package main import ( "bytes" "html/template" "strings" "testing" "cmautobuy/admin/service" ) func TestPddImportResultTemplate_完整集合和失败明细安全渲染(t *testing.T) { tmpl, err := template.ParseFS(templateFS, "templates/*/*.html") if err != nil { t.Fatal(err) } var output bytes.Buffer data := map[string]any{ "Title": "PDD 商品", "Active": "pdd", "CSRFToken": "test-csrf", "ImportResult": &service.PddImportResult{ TotalRows: 25, CreatedCount: 2, ExistingCount: 1, DuplicateCount: 1, GoodsIDs: []string{"737116531267", "647453710994"}, Failures: []service.PddImportFailure{{ Row: 5, Raw: "", Reason: "不是拼多多网址", }}, }, } if err := tmpl.ExecuteTemplate(&output, "pdd/list", data); err != nil { t.Fatalf("渲染 PDD 导入结果失败: %v", err) } body := output.String() for _, want := range []string{ "本次导入结果", "总行数 25", `data-collect-form="pdd-import-collect-form"`, `name="ids" value="737116531267"`, `name="ids" value="647453710994"`, "Excel 行号", "不是拼多多网址", "<script>alert(1)</script>", } { if !strings.Contains(body, want) { t.Errorf("导入结果页面缺少 %q", want) } } if strings.Contains(body, "") { t.Error("Excel 原始内容没有经过 html/template 自动转义") } }