完善站点运营设置:分路由管理、登录可见评论、邮件模板内联与关闭注册 SSR。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-23 00:17:00 +08:00
parent acde7ee288
commit 6f054a903c
98 changed files with 8239 additions and 2073 deletions

View File

@@ -60,10 +60,10 @@ func TestNormalizeKeywords(t *testing.T) {
func TestNormalizeFooterLinks(t *testing.T) {
got, err := NormalizeFooterLinks([]FooterLink{
{Label: "备案", URL: "https://beian.miit.gov.cn/", NewTab: true},
{Label: "关于", URL: "/about", NewTab: false},
{Label: "备案", URL: "https://beian.miit.gov.cn/", NewTab: true, Align: FooterLinkAlignRight},
{Label: "关于", URL: "/about", NewTab: false, Align: FooterLinkAlignLeft},
})
if err != nil || len(got) != 2 || got[1].URL != "/about" {
if err != nil || len(got) != 2 || got[1].URL != "/about" || got[1].Align != FooterLinkAlignLeft {
t.Fatalf("got %+v err=%v", got, err)
}
bad := []FooterLink{
@@ -71,6 +71,7 @@ func TestNormalizeFooterLinks(t *testing.T) {
{Label: "x", URL: "//evil.test"},
{Label: "", URL: "/a"},
{Label: "x", URL: "ftp://files.test/a"},
{Label: "x", URL: "/ok", Align: "middle"},
}
for _, item := range bad {
if _, err := NormalizeFooterLinks([]FooterLink{item}); err == nil {
@@ -79,8 +80,28 @@ func TestNormalizeFooterLinks(t *testing.T) {
}
raw := `[{"label":"ICP","url":"https://beian.miit.gov.cn/"}]`
parsed, err := parseFooterLinksJSON(raw)
if err != nil || len(parsed) != 1 || !parsed[0].NewTab {
t.Fatalf("external default new tab, got %+v err=%v", parsed, err)
if err != nil || len(parsed) != 1 || !parsed[0].NewTab || parsed[0].Align != FooterLinkAlignRight {
t.Fatalf("external default new tab + right align, got %+v err=%v", parsed, err)
}
}
func TestNormalizeFooterLinkAlign(t *testing.T) {
cases := []struct {
in string
want string
ok bool
}{
{"", FooterLinkAlignRight, true},
{" right ", FooterLinkAlignRight, true},
{"left", FooterLinkAlignLeft, true},
{"center", FooterLinkAlignCenter, true},
{"middle", "", false},
}
for _, tc := range cases {
got, ok := NormalizeFooterLinkAlign(tc.in)
if ok != tc.ok || got != tc.want {
t.Fatalf("in=%q got=%q ok=%v want=%q/%v", tc.in, got, ok, tc.want, tc.ok)
}
}
}