e22f4b7800
Replaces the LangUndetermined placeholder with whatlanggo-backed body detection on every send path, then adds a translation cache keyed on (message_id, target_lang) populated lazily on the per-message read endpoint. The noop translator that ships with Stage D returns engine="noop", which the service treats as "translation unavailable" — wiring a real backend (LibreTranslate HTTP client is the documented next step) is a one-file swap. GetMessage and ListInbox now accept a targetLang argument; the HTTP layer resolves the caller's accounts.preferred_language and forwards it. Inbox uses the cache only (never calls the translator) so bulk reads stay fast under future SaaS backends. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
50 lines
1.4 KiB
Go
50 lines
1.4 KiB
Go
package detector
|
|
|
|
import "testing"
|
|
|
|
func TestDetectKnownLanguages(t *testing.T) {
|
|
t.Parallel()
|
|
d := New()
|
|
cases := []struct {
|
|
name string
|
|
text string
|
|
want string
|
|
}{
|
|
{
|
|
name: "english paragraph",
|
|
text: "The trade agreement should be signed before the next turn. " +
|
|
"I expect a written response by the time the engine generates the next report.",
|
|
want: "en",
|
|
},
|
|
{
|
|
name: "russian paragraph",
|
|
text: "Привет! Я предлагаю заключить дипломатическое соглашение и провести " +
|
|
"совместную операцию по освоению гиперпространственных маршрутов. " +
|
|
"Жду твоего письменного ответа до конца следующего хода игры, " +
|
|
"чтобы мы успели согласовать детали и подписать договор вовремя.",
|
|
want: "ru",
|
|
},
|
|
}
|
|
for _, tc := range cases {
|
|
tc := tc
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
got := d.Detect(tc.text)
|
|
if got != tc.want {
|
|
t.Fatalf("Detect = %q, want %q", got, tc.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestDetectShortOrEmpty(t *testing.T) {
|
|
t.Parallel()
|
|
d := New()
|
|
short := []string{"", "hi", " "}
|
|
for _, s := range short {
|
|
if got := d.Detect(s); got != Undetermined {
|
|
t.Errorf("Detect(%q) = %q, want %q", s, got, Undetermined)
|
|
}
|
|
}
|
|
}
|