package builders import ( "agent-desk/internal/models" "agent-desk/internal/pkg/enums" "agent-desk/internal/pkg/i18nx" "strings" "testing" ) func TestKnowledgeBuildersLocalizeLabelsWithoutChangingContent(t *testing.T) { for _, locale := range []string{"en-US", "ru-RU", "zh-CN"} { t.Run(locale, func(t *testing.T) { kb := BuildKnowledgeBase(&models.KnowledgeBase{Name: "用户 название", KnowledgeType: "faq", Status: enums.StatusOk, AnswerMode: 1}, locale) if kb.Name != "用户 название" || kb.KnowledgeTypeName != i18nx.Getf(locale, "knowledge.labels.type.faq") || kb.StatusName != i18nx.Getf(locale, "knowledge.labels.status.0") { t.Fatalf("unexpected labels/content: %+v", kb) } raw := " 原文 answer\n回答: keep this " faq := BuildKnowledgeFAQ(&models.KnowledgeFAQ{Question: raw, Answer: raw, Status: enums.StatusDisabled, IndexStatus: enums.KnowledgeDocumentIndexStatusFailed, IndexError: "SQL failed password=fixture-only"}, locale) if faq.Question != raw || faq.Answer != raw { t.Fatal("authored content changed") } if faq.IndexStatusName != i18nx.Getf(locale, "knowledge.labels.index.failed") || faq.StatusName != i18nx.Getf(locale, "knowledge.labels.status.1") { t.Fatalf("unexpected labels: %+v", faq) } if faq.IndexError != i18nx.Getf(locale, "error.knowledge.indexFailed") || strings.Contains(faq.IndexError, "fixture-only") { t.Fatalf("unsafe index error %q", faq.IndexError) } doc := BuildKnowledgeDocument(&models.KnowledgeDocument{Content: raw, IndexError: "provider raw error"}, locale) list := BuildKnowledgeDocumentList(&models.KnowledgeDocument{IndexError: "provider raw error"}, locale) if doc.Content != raw || doc.IndexError != faq.IndexError || list.IndexError != faq.IndexError { t.Fatal("document content or safe error mismatch") } log := BuildKnowledgeRetrieveLog(&models.KnowledgeRetrieveLog{Answer: raw, Question: raw, AnswerStatus: 2, TraceData: raw}, locale) hit := BuildKnowledgeRetrieveHitResponse(&models.KnowledgeRetrieveHit{Snippet: raw, ChunkType: "faq"}, locale) if log.Answer != raw || log.Question != raw || log.TraceData != raw || hit.Snippet != raw { t.Fatal("historical data was rewritten") } if log.AnswerStatusName != i18nx.Getf(locale, "knowledge.labels.answer.2") { t.Fatalf("answer label = %q", log.AnswerStatusName) } }) } if BuildKnowledgeFAQ(&models.KnowledgeFAQ{}, "en-US").IndexError != "" { t.Fatal("empty error should remain empty") } }