fix: 修复顺运宝采购完成状态与重复采购 (#169)
This commit is contained in:
@@ -341,6 +341,64 @@ func TestCreatePurchaseTasks_安全字段和重复保护(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestCreatePurchaseTasks_成功或待核对任务禁止重复采购(t *testing.T) {
|
||||
cases := []struct {
|
||||
status model.TaskStatus
|
||||
wantStage string
|
||||
wantReason string
|
||||
wantAttention bool
|
||||
}{
|
||||
{model.TaskSucceeded, SybStagePurchaseCompleted, "已有成功采购任务", false},
|
||||
{model.TaskManualReview, SybStagePurchaseReview, "待人工核对", true},
|
||||
}
|
||||
for _, tc := range cases {
|
||||
t.Run(string(tc.status), func(t *testing.T) {
|
||||
db := newTestDB(t)
|
||||
key := seedPurchasableWorkflow(t, db, "SYB-LOCKED")
|
||||
if err := SaveSybMapping(db, "SYB-LOCKED", key, "USR-1"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
admin, _, _ := prepareClientAssignmentUsers(t, db)
|
||||
if err := RegisterClient(db, model.Client{ClientID: "CLIENT-1", Name: "采购机"}, true); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
created, err := CreatePurchaseTasks(db, admin,
|
||||
[]PurchaseTaskRequest{{SybID: "SYB-LOCKED", MaxPriceCent: 4200}}, "CLIENT-1")
|
||||
if err != nil || created.Created != 1 {
|
||||
t.Fatalf("准备采购任务失败: result=%+v err=%v", created, err)
|
||||
}
|
||||
if _, err := db.Exec(`UPDATE tasks SET status=? WHERE task_type='purchase' AND syb_id=?`, tc.status, "SYB-LOCKED"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
before := countPurchaseTasksForSyb(t, db, "SYB-LOCKED")
|
||||
result, err := CreatePurchaseTasks(db, admin,
|
||||
[]PurchaseTaskRequest{{SybID: "SYB-LOCKED", MaxPriceCent: 4300}}, "CLIENT-1")
|
||||
if err != nil || result.Created != 0 || len(result.Failures) != 1 ||
|
||||
!strings.Contains(result.Failures[0].Reason, tc.wantReason) {
|
||||
t.Fatalf("%s 任务必须阻止重复采购: result=%+v err=%v", tc.status, result, err)
|
||||
}
|
||||
if after := countPurchaseTasksForSyb(t, db, "SYB-LOCKED"); after != before {
|
||||
t.Fatalf("拒绝后任务数量从 %d 变为 %d", before, after)
|
||||
}
|
||||
list, err := ListSybOrdersView(db, "", "", tc.wantStage, 1)
|
||||
if err != nil || list.Total != 1 || len(list.Rows) != 1 ||
|
||||
list.Rows[0].Stage != tc.wantStage || list.Rows[0].NeedsAttention != tc.wantAttention {
|
||||
t.Fatalf("%s 阶段筛选错误: result=%+v err=%v", tc.status, list, err)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func countPurchaseTasksForSyb(t *testing.T, db *sql.DB, sybID string) int {
|
||||
t.Helper()
|
||||
var count int
|
||||
if err := db.QueryRow(`SELECT COUNT(*) FROM tasks WHERE task_type='purchase' AND syb_id=?`, sybID).Scan(&count); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return count
|
||||
}
|
||||
|
||||
func TestCreatePurchaseTasks_客户端权限和逐条失败(t *testing.T) {
|
||||
db := newTestDB(t)
|
||||
key := seedPurchasableWorkflow(t, db, "SYB-1")
|
||||
|
||||
Reference in New Issue
Block a user