- 新增 templates/partials/article_form.html(define article_form): 按 .FormIsMy 分支渲染——管理员变体(标签/置顶勾选/草稿发布双按钮/ /api/admin/articles)与作者变体(状态下拉/保存取消//api/my/articles) - renderArticleForm / renderMyArticleForm 均渲染 article_form,各自 设置 FormIsMy=false/true;JS 统一(API_BASE/redirectBase/editor/ 错误提示均单份) - 删除 templates/admin/article_create.html 与 templates/user/my_article_form.html(约 360 行 → 一份 ~230 行) - 新增 TestArticleFormTemplateVariants 断言两个变体渲染差异; 测试环境注册两个工作区的新建页路由
50 lines
1.7 KiB
Go
50 lines
1.7 KiB
Go
package handlers
|
||
|
||
import (
|
||
"net/http"
|
||
"strings"
|
||
"testing"
|
||
)
|
||
|
||
// TestArticleFormTemplateVariants 验证管理员与作者工作区共用同一份
|
||
// article_form 模板(templates/partials/article_form.html)时的两个变体:
|
||
// - 管理员:含置顶勾选(is_top)/ /api/admin/articles 前缀,作者 API 不出现
|
||
// - 作者:含状态下拉 / /api/my/articles 前缀,置顶与管理员 API 不出现
|
||
func TestArticleFormTemplateVariants(t *testing.T) {
|
||
e := newSecurityTestEnv(t)
|
||
|
||
// 管理员新建页(FormIsMy=false 变体)。
|
||
admin := e.login(t, "admin")
|
||
w := e.do(http.MethodGet, "/admin/articles/new", admin, nil, "")
|
||
if w.Code != http.StatusOK {
|
||
t.Fatalf("admin GET /admin/articles/new: status = %d", w.Code)
|
||
}
|
||
body := w.Body.String()
|
||
for _, want := range []string{`id="articleForm"`, `id="articleSessionToken"`, "isTopCheckbox", `"/api/admin/articles"`} {
|
||
if !strings.Contains(body, want) {
|
||
t.Fatalf("admin variant missing %q", want)
|
||
}
|
||
}
|
||
if strings.Contains(body, "/api/my/articles") {
|
||
t.Fatal("admin variant must not reference the author API")
|
||
}
|
||
|
||
// 作者新建页(FormIsMy=true 变体)。
|
||
alice := e.login(t, "alice")
|
||
w = e.do(http.MethodGet, "/my/articles/new", alice, nil, "")
|
||
if w.Code != http.StatusOK {
|
||
t.Fatalf("author GET /my/articles/new: status = %d", w.Code)
|
||
}
|
||
body = w.Body.String()
|
||
for _, want := range []string{`id="articleForm"`, `id="articleSessionToken"`, `"/api/my/articles"`, `name="status"`} {
|
||
if !strings.Contains(body, want) {
|
||
t.Fatalf("author variant missing %q", want)
|
||
}
|
||
}
|
||
for _, forbid := range []string{"isTopCheckbox", "/api/admin/articles"} {
|
||
if strings.Contains(body, forbid) {
|
||
t.Fatalf("author variant must not contain %q", forbid)
|
||
}
|
||
}
|
||
}
|