From d60f1e6ec421c8df0262debfaa83dd557125d231 Mon Sep 17 00:00:00 2001 From: BenCookie95 Date: Wed, 18 Feb 2026 12:54:52 -0500 Subject: [PATCH] GetAllForObject, use Master instead of replica --- .../store/sqlstore/autotranslation_store.go | 3 +- .../store/storetest/autotranslation.go | 70 +++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) diff --git a/server/channels/store/sqlstore/autotranslation_store.go b/server/channels/store/sqlstore/autotranslation_store.go index c112a27fe68..ee894b661bd 100644 --- a/server/channels/store/sqlstore/autotranslation_store.go +++ b/server/channels/store/sqlstore/autotranslation_store.go @@ -233,7 +233,8 @@ func (s *SqlAutoTranslationStore) GetAllForObject(objectType, objectID string) ( Where(sq.Eq{"ObjectType": objectType, "ObjectId": objectID}) var translations []Translation - if err := s.GetReplica().SelectBuilder(&translations, query); err != nil { + // Use GetMaster to avoid replica lag issues when workers fetch queued items + if err := s.GetMaster().SelectBuilder(&translations, query); err != nil { return nil, errors.Wrapf(err, "failed to get all translations for object_id=%s", objectID) } diff --git a/server/channels/store/storetest/autotranslation.go b/server/channels/store/storetest/autotranslation.go index d1b5a80ce37..271ef409783 100644 --- a/server/channels/store/storetest/autotranslation.go +++ b/server/channels/store/storetest/autotranslation.go @@ -18,6 +18,7 @@ func TestAutoTranslationStore(t *testing.T, rctx request.CTX, ss store.Store, s t.Run("IsUserEnabled", func(t *testing.T) { testAutoTranslationIsUserEnabled(t, rctx, ss) }) t.Run("GetUserLanguage", func(t *testing.T) { testAutoTranslationGetUserLanguage(t, rctx, ss) }) t.Run("GetActiveDestinationLanguages", func(t *testing.T) { testAutoTranslationGetActiveDestinationLanguages(t, rctx, ss) }) + t.Run("GetAllForObject", func(t *testing.T) { testAutoTranslationGetAllForObject(t, ss) }) } func testAutoTranslationIsUserEnabled(t *testing.T, rctx request.CTX, ss store.Store) { @@ -376,3 +377,72 @@ func testAutoTranslationGetActiveDestinationLanguages(t *testing.T, rctx request assert.Contains(t, languages, "es") }) } + +func testAutoTranslationGetAllForObject(t *testing.T, ss store.Store) { + objectID := model.NewId() + objectType := model.TranslationObjectTypePost + + t.Run("returns empty for nonexistent object", func(t *testing.T) { + results, err := ss.AutoTranslation().GetAllForObject(objectType, model.NewId()) + require.NoError(t, err) + assert.Empty(t, results) + }) + + t.Run("returns all translations for an object", func(t *testing.T) { + // Save translations in two languages + err := ss.AutoTranslation().Save(&model.Translation{ + ObjectID: objectID, + ObjectType: objectType, + Lang: "es", + Provider: "test", + Type: model.TranslationTypeString, + Text: "hola", + State: model.TranslationStateReady, + }) + require.NoError(t, err) + + err = ss.AutoTranslation().Save(&model.Translation{ + ObjectID: objectID, + ObjectType: objectType, + Lang: "fr", + Provider: "test", + Type: model.TranslationTypeString, + Text: "bonjour", + State: model.TranslationStateReady, + }) + require.NoError(t, err) + + results, err := ss.AutoTranslation().GetAllForObject(objectType, objectID) + require.NoError(t, err) + require.Len(t, results, 2) + + langToText := make(map[string]string) + for _, tr := range results { + assert.Equal(t, objectID, tr.ObjectID) + assert.Equal(t, objectType, tr.ObjectType) + langToText[tr.Lang] = tr.Text + } + assert.Equal(t, "hola", langToText["es"]) + assert.Equal(t, "bonjour", langToText["fr"]) + }) + + t.Run("does not return translations for other objects", func(t *testing.T) { + otherID := model.NewId() + err := ss.AutoTranslation().Save(&model.Translation{ + ObjectID: otherID, + ObjectType: objectType, + Lang: "de", + Provider: "test", + Type: model.TranslationTypeString, + Text: "hallo", + State: model.TranslationStateReady, + }) + require.NoError(t, err) + + results, err := ss.AutoTranslation().GetAllForObject(objectType, objectID) + require.NoError(t, err) + for _, tr := range results { + assert.Equal(t, objectID, tr.ObjectID) + } + }) +}