feat: 采购详情展示 PDD 核单结果 (#125)

This commit is contained in:
chengma
2026-08-10 19:59:47 +08:00
parent 3554608513
commit a7bc9a940a
6 changed files with 173 additions and 0 deletions
+64
View File
@@ -3,6 +3,7 @@ package service
import (
"database/sql"
"fmt"
"strings"
"testing"
"cmautobuy/admin/model"
@@ -368,6 +369,66 @@ func TestGetTaskDetail_采购任务显示专有字段(t *testing.T) {
}
}
func TestGetTaskDetail_采购成功独立显示PDD核单结果(t *testing.T) {
db := newTestDB(t)
insertTestTask(t, db, testTaskParams{
taskID: "PUR-ORDER", taskType: model.TaskPurchase, status: model.TaskSucceeded,
resultData: `{"purchase":{"order_no":"PDD-20260810-001","ordered_at":"2026-08-10T11:12:13Z","payment_status":"unpaid","match_status":"matched","order_submitted":true}}`,
})
d, err := GetTaskDetail(db, "PUR-ORDER")
if err != nil {
t.Fatal(err)
}
if !d.HasPddOrder || d.PddOrderNo != "PDD-20260810-001" {
t.Fatalf("PDD 订单编号没有结构化显示: %+v", d)
}
if d.PddOrderedAt != formatLocalTime("2026-08-10T11:12:13Z") {
t.Errorf("UTC 下单时间应转为本地时间,实际 %q", d.PddOrderedAt)
}
if d.PddPaymentStatusText != "未付款(Client 上报时)" ||
d.PddOrderResultText != "Admin 不会查询 PDD 实时付款状态。" {
t.Errorf("付款状态说明不明确: status=%q help=%q",
d.PddPaymentStatusText, d.PddOrderResultText)
}
if !d.HasResult || !strings.Contains(d.ResultData, `"order_no":"PDD-20260810-001"`) {
t.Error("结构化展示后仍必须保留原始结果")
}
}
func TestGetTaskDetail_核单结果状态分别显示(t *testing.T) {
db := newTestDB(t)
tests := []struct {
name string
status model.TaskStatus
resultData string
want string
}{
{"等待上报", model.TaskClaimed, "", "等待 Client 核单上报。"},
{"人工处理", model.TaskManualReview, "", "订单结果不确定,请结合错误信息人工核对。"},
{"非法JSON", model.TaskSucceeded, `{`, "采购结果格式异常,请展开完整结果进行诊断。"},
{"缺少purchase", model.TaskSucceeded, `{}`, "采购结果格式异常,请展开完整结果进行诊断。"},
{"尚未匹配", model.TaskSucceeded, `{"purchase":{"match_status":"not_found"}}`, "本次结果没有已匹配的 PDD 订单。"},
{"时间非法", model.TaskSucceeded, `{"purchase":{"order_no":"PDD-1","ordered_at":"2026-08-10 11:12","payment_status":"unpaid","match_status":"matched","order_submitted":true}}`, "采购结果中的下单时间格式异常,请展开完整结果进行诊断。"},
}
for i, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
taskID := fmt.Sprintf("PUR-STATE-%d", i)
insertTestTask(t, db, testTaskParams{
taskID: taskID, taskType: model.TaskPurchase,
status: tc.status, resultData: tc.resultData,
})
d, err := GetTaskDetail(db, taskID)
if err != nil {
t.Fatal(err)
}
if d.HasPddOrder || d.PddOrderResultText != tc.want {
t.Errorf("状态说明不对: HasPddOrder=%t text=%q", d.HasPddOrder, d.PddOrderResultText)
}
})
}
}
func TestGetTaskDetail_采集任务不带采购专有字段(t *testing.T) {
db := newTestDB(t)
insertTestTask(t, db, testTaskParams{taskID: "COL-1", taskType: model.TaskCollect, status: model.TaskPending, pddGoodsID: "111"})
@@ -382,6 +443,9 @@ func TestGetTaskDetail_采集任务不带采购专有字段(t *testing.T) {
if d.SpecText != "" || d.QuantityText != "" || d.PriceLimitText != "" {
t.Errorf("采集任务不该填充采购专有字段: spec=%q qty=%q price=%q", d.SpecText, d.QuantityText, d.PriceLimitText)
}
if d.HasPddOrder || d.PddOrderResultText != "" {
t.Error("采集任务不应生成 PDD 核单结果展示")
}
}
func TestGetTaskDetail_有错误信息时显示(t *testing.T) {