First Commit
ci / go (push) Waiting to run
ci / go-db (agent) (push) Waiting to run
ci / go-db (config) (push) Waiting to run
ci / go-db (db) (push) Waiting to run
ci / go-db (evidence) (push) Waiting to run
ci / go-db (llmrec) (push) Waiting to run
ci / go-db (server) (push) Waiting to run
web / web (push) Waiting to run
docs / links (push) Canceled after 0s
detections / detections (push) Canceled after 0s

This commit is contained in:
dela
2026-10-09 08:38:16 +08:00
commit 0335d572de
756 changed files with 201663 additions and 0 deletions
+49
View File
@@ -0,0 +1,49 @@
package server
import (
"testing"
"github.com/Autumn-27/artex/db"
)
// TestTaskLLMResolutionLocalized guards F18: every user-facing reason/label that
// GET /api/tasks/{id}/llm/resolution returns (rendered in the task LLM settings
// chain / system/llm UI via resolutionLabel / the chain editor) must be Korean —
// Hangul present, no Chinese Han. Source enum values and English fmt.Errorf wraps
// are out of scope and are not asserted here.
func TestTaskLLMResolutionLocalized(t *testing.T) {
// 1) Every localized constant is Korean. Reverting any to Chinese fails this.
for _, c := range []struct{ label, msg string }{
{"reasonLLMProfileMissing", reasonLLMProfileMissing},
{"reasonLLMProfileNoAPIKey", reasonLLMProfileNoAPIKey},
{"reasonLLMProfileInvalid", reasonLLMProfileInvalid},
{"reasonTaskLLMChainExhausted", reasonTaskLLMChainExhausted},
{"reasonNoLLMAvailable", reasonNoLLMAvailable},
{"sourceNameGlobalConfig", sourceNameGlobalConfig},
} {
assertKoreanError(t, c.label, c.msg)
}
// 2) Pin the two reasons reachable with no DB. resolutionFromProfile returns
// before touching providerForProfile for a nil profile and for a profile with
// a blank API key, so a zero-value Server exercises the real code path.
s := &Server{}
missing := s.resolutionFromProfile(nil, "task_chain")
if missing.Available {
t.Fatalf("nil profile must be unavailable, got %+v", missing)
}
if missing.Reason != reasonLLMProfileMissing {
t.Fatalf("nil profile reason = %q, want %q", missing.Reason, reasonLLMProfileMissing)
}
assertKoreanError(t, "resolutionFromProfile(nil).Reason", missing.Reason)
noKey := s.resolutionFromProfile(&db.LLMProfile{Name: "p", Format: "openai", Model: "m"}, "task_chain")
if noKey.Available {
t.Fatalf("blank API key must be unavailable, got %+v", noKey)
}
if noKey.Reason != reasonLLMProfileNoAPIKey {
t.Fatalf("blank-key reason = %q, want %q", noKey.Reason, reasonLLMProfileNoAPIKey)
}
assertKoreanError(t, "resolutionFromProfile(noKey).Reason", noKey.Reason)
}