Files
MyGoNavi/internal/webserver/auth_pages_test.go
Syngnat 714c6fc553 feat(web-server): 新增浏览器访问认证与初始化流程
- 新增 web-server 运行模式与浏览器端运行时桥接
- 支持管理员密码、会话策略、Google Authenticator 与恢复码
- 设置中心补充浏览器访问认证状态与改密入口
- 优化初始化向导,未启用 2FA 时跳过验证器步骤

Refs #618
2026-07-04 21:50:52 +08:00

89 lines
2.6 KiB
Go

package webserver
import (
"net/http"
"net/http/httptest"
"strings"
"testing"
"GoNavi-Wails/shared/i18n"
)
func TestResolveWebAuthLanguagePriority(t *testing.T) {
t.Run("query overrides cookie and accept-language", func(t *testing.T) {
request := httptest.NewRequest("GET", "/login?lang=ja-JP", nil)
request.AddCookie(&http.Cookie{Name: webAuthLanguageCookieName, Value: "de-DE"})
request.Header.Set("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8")
if got := resolveWebAuthLanguage(request); got != i18n.LanguageJaJP {
t.Fatalf("resolveWebAuthLanguage()=%q, want %q", got, i18n.LanguageJaJP)
}
})
t.Run("cookie overrides accept-language", func(t *testing.T) {
request := httptest.NewRequest("GET", "/login", nil)
request.AddCookie(&http.Cookie{Name: webAuthLanguageCookieName, Value: "de-DE"})
request.Header.Set("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8")
if got := resolveWebAuthLanguage(request); got != i18n.LanguageDeDE {
t.Fatalf("resolveWebAuthLanguage()=%q, want %q", got, i18n.LanguageDeDE)
}
})
t.Run("accept-language is used as fallback", func(t *testing.T) {
request := httptest.NewRequest("GET", "/login", nil)
request.Header.Set("Accept-Language", "zh-TW,zh;q=0.9,en;q=0.8")
if got := resolveWebAuthLanguage(request); got != i18n.LanguageZhTW {
t.Fatalf("resolveWebAuthLanguage()=%q, want %q", got, i18n.LanguageZhTW)
}
})
}
func TestRenderAuthPageUsesLocalizedCopyAndSolidColors(t *testing.T) {
localizer := newWebAuthLocalizer(i18n.LanguageZhCN)
if localizer == nil {
t.Fatal("expected localized auth page localizer")
}
page := renderAuthPage(
i18n.LanguageZhCN,
webAuthText(localizer, "web_auth.page.setup.title", nil),
webAuthText(localizer, "web_auth.page.setup.subtitle", nil),
renderSetupBody(localizer),
renderSetupScript(localizer),
)
for _, fragment := range []string{
`lang="zh-CN"`,
"初始化 GoNavi Web",
"发行方",
"账户",
} {
if !strings.Contains(page, fragment) {
t.Fatalf("expected rendered page to contain %q", fragment)
}
}
if strings.Contains(page, "radial-gradient") || strings.Contains(page, "linear-gradient") {
t.Fatalf("expected auth page to use solid colors only")
}
for _, fragment := range []string{
`class="wizard-nav"`,
`data-step-panel="0"`,
`data-step-panel="1" hidden`,
`data-step-panel="2" hidden`,
"创建管理员密码",
"绑定验证器",
"确认会话策略",
`id="next-step"`,
`id="back-step"`,
`id="totp-disabled-note"`,
} {
if !strings.Contains(page, fragment) {
t.Fatalf("expected setup wizard page to contain %q", fragment)
}
}
}