package main import ( "bytes" "html/template" "strings" "testing" "cmautobuy/admin/service" ) func TestSybListTemplate_区分标题图片与阶段动作(t *testing.T) { tmpl, err := template.ParseFS(templateFS, "templates/*/*.html") if err != nil { t.Fatal(err) } rows := []service.SybOrderView{ { SybID: "SYB-READY", OrderNo: "ORDER-READY", Title: "可采购商品", ImageURL: "https://example.test/original.jpg", Stage: service.SybStagePurchaseReady, StageText: "可创建采购任务", StageHelp: "规格映射有效", ActionText: "创建采购任务", CanPurchase: true, DefaultMaxPrice: "39.90", }, { SybID: "SYB-TASK", OrderNo: "ORDER-TASK", Title: "已有任务商品", Stage: service.SybStageTaskCreated, StageText: "已创建采购任务", StageHelp: "已有任务", ActionText: "查看采购任务", }, { SybID: "SYB-PDD", OrderNo: "ORDER-PDD", Title: "待关联商品", Stage: service.SybStagePddMissing, StageText: "未关联 PDD", StageHelp: "下一步关联采购商品", ActionText: "关联 PDD", }, } var output bytes.Buffer data := map[string]any{ "Title": "顺运宝数据", "Active": "syb", "CSRFToken": "test-csrf", "Rows": rows, "DetailURL": "/syb/detail", "StageOptions": service.SybStageOptions(), } if err := tmpl.ExecuteTemplate(&output, "syb/list", data); err != nil { t.Fatalf("渲染顺运宝列表失败: %v", err) } body := output.String() for _, want := range []string{ `class="table-title-action" data-detail-open-id="SYB-READY"`, `data-image-preview-url="https://example.test/original.jpg"`, `aria-label="查看 可采购商品 的原图"`, `id="image-preview-modal"`, `data-purchase-id="SYB-READY"`, `href="/tasks?type=purchase`, `q=ORDER-TASK"`, `data-detail-open-id="SYB-PDD"`, } { if !strings.Contains(body, want) { t.Errorf("顺运宝列表缺少 %q", want) } } if strings.Contains(body, `