package server import ( "io/fs" "net/http" "net/http/httptest" "regexp" "strings" "testing" ) func TestResolveWebLocaleCookieOverridesSystemAcceptLanguage(t *testing.T) { cfg := DefaultConfig() cfg.Web.DefaultLocale = "en" req := httptest.NewRequest(http.MethodGet, "/login", nil) req.Header.Set("Accept-Language", "ru-RU,ru;q=0.9,en;q=0.8") req.AddCookie(&http.Cookie{Name: webLocaleCookieName, Value: "en"}) if got := resolveWebLocale(req, cfg); got != "en" { t.Fatalf("locale = %q, want cookie locale en", got) } } func TestFormatWebTimeUsesSelectedLocale(t *testing.T) { stamp := "2026-07-17T13:45:00Z" if got := formatWebTime("ru", stamp); !strings.Contains(got, "17.07.2026") { t.Fatalf("Russian timestamp = %q", got) } if got := formatWebTime("en", stamp); !strings.Contains(got, "Jul 17, 2026") { t.Fatalf("English timestamp = %q", got) } } func TestTranslationCatalogsHaveMatchingKeysAndHideUnknownKeys(test *testing.T) { for key := range _translations["en"] { if _, ok := _translations["ru"][key]; !ok { test.Fatalf("English key %q is missing in Russian catalog", key) } } for key := range _translations["ru"] { if _, ok := _translations["en"][key]; !ok { test.Fatalf("Russian key %q is missing in English catalog", key) } } if got := t("en", "missing.key"); got == "missing.key" || strings.Contains(got, "missing.key") { test.Fatalf("unknown key leaked to UI: %q", got) } } func TestEmbeddedTemplatesUseExternalAssetsAndNoInlineEventHandlers(t *testing.T) { entries, err := fs.Glob(webFS, "web/templates/*.html") if err != nil { t.Fatal(err) } for _, name := range entries { body, err := webFS.ReadFile(name) if err != nil { t.Fatal(err) } text := string(body) for _, forbidden := range []string{"`, `/static/app.css`, "Verstak Sync"} { if !strings.Contains(body, want) { t.Fatalf("home is missing %q: %s", want, body) } } if strings.Contains(body, "