mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-07-13 08:25:10 +08:00
- 新增 web-server 运行模式与浏览器端运行时桥接 - 支持管理员密码、会话策略、Google Authenticator 与恢复码 - 设置中心补充浏览器访问认证状态与改密入口 - 优化初始化向导,未启用 2FA 时跳过验证器步骤 Refs #618
89 lines
2.6 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|