feat: harden support, localize knowledge and add operator availability [skip ci]
Source-only publication of reviewed commit 64e96a7f423673dc29ad56485be9fc79bce8af1c.
Passed in isolation: focused frontend/backend tests, race checks, TypeScript typecheck, lint, Go compilation, Flowgram build, and deterministic SDK build/tests.
Not accepted as a production release: Next.js export/native assembly remains blocked by environment memory limits; browser interaction and MySQL staging acceptance remain unverified. No production server, database/schema, runtime configuration, deployment, release tag, or workflow execution was performed.
Expected source tree: 0a4a7528e9.
This commit is contained in:
47
internal/builders/knowledge_builder_i18n_test.go
Normal file
47
internal/builders/knowledge_builder_i18n_test.go
Normal file
@@ -0,0 +1,47 @@
|
||||
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")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user