feat: 保持模块列表筛选和分页状态 (#156)

This commit is contained in:
chengma
2026-08-11 15:18:00 +08:00
parent d7e548a60f
commit cd1fc8ae68
4 changed files with 155 additions and 7 deletions
+54
View File
@@ -36,6 +36,60 @@ func TestPaginationCSS_桌面右对齐且窄窗口不遮挡内容(t *testing.T)
}
}
func TestModuleNavigation_按账号保存稳定列表状态且安全回退(t *testing.T) {
header, err := os.ReadFile("templates/partials/header.html")
if err != nil {
t.Fatal(err)
}
js, err := os.ReadFile("static/js/app.js")
if err != nil {
t.Fatal(err)
}
headerSource := string(header)
for _, want := range []string{
"data-module-navigation",
"data-ui-state-user=\"{{if .CurrentUser}}{{.CurrentUser.UserID}}{{end}}\"",
"data-module-root=\"/shopee\"",
"data-module-root=\"/pdd\"",
"data-module-root=\"/syb\"",
"data-module-root=\"/tasks\"",
"data-module-root=\"/clients\"",
"data-module-root=\"/users\"",
} {
if !strings.Contains(headerSource, want) {
t.Errorf("公共导航缺少模块状态标识 %q", want)
}
}
jsSource := string(js)
for _, want := range []string{
"var MODULE_QUERY_KEYS = {",
"\"/shopee\": [\"goods_id\", \"status\", \"shop\", \"image\", \"page\"]",
"\"/syb\": [\"order_no\", \"shop\", \"stage\", \"page\", \"date_from\", \"date_to\"]",
"var MODULE_STATE_PREFIX = \"cmautobuy:module-state:\"",
"parsed.origin !== window.location.origin || parsed.pathname !== moduleRoot",
"sessionStorage.setItem(",
"sessionStorage.removeItem(moduleStateStorageKey(userID, moduleRoot))",
"setupModuleNavigationState();",
} {
if !strings.Contains(jsSource, want) {
t.Errorf("模块状态脚本缺少安全或交互约束 %q", want)
}
}
whitelistStart := strings.Index(jsSource, "var MODULE_QUERY_KEYS")
whitelistEnd := strings.Index(jsSource, "var MODULE_STATE_PREFIX")
if whitelistStart == -1 || whitelistEnd <= whitelistStart {
t.Fatal("没有找到模块查询参数白名单")
}
whitelist := jsSource[whitelistStart:whitelistEnd]
for _, forbidden := range []string{"\"msg\"", "\"error\"", "\"history\"", "\"login\"", "\"change_password\""} {
if strings.Contains(whitelist, forbidden) {
t.Errorf("稳定状态白名单不应包含临时参数 %s", forbidden)
}
}
}
func TestPurchaseModal_未选规格行保持隐藏且不提交(t *testing.T) {
files := map[string][]string{
"static/css/app.css": {