feat: 增加真实采购任务安全模式 (#98)
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"testing"
|
||||
|
||||
"cmautobuy/admin/model"
|
||||
)
|
||||
|
||||
func insertLiveTask(t *testing.T, db *sql.DB, taskID, clientID string) {
|
||||
t.Helper()
|
||||
now := model.NowISO()
|
||||
_, err := db.Exec(`INSERT INTO tasks
|
||||
(task_id,task_type,status,execution_mode,assigned_client,pdd_goods_url,
|
||||
pdd_goods_id,pdd_options,quantity,max_price_cent,live_confirmed_by,
|
||||
live_confirmed_at,created_at,updated_at)
|
||||
VALUES (?,'purchase','assigned','live',?,'https://example.invalid/1','1',
|
||||
'{"color":"黑色"}',1,100,'USER-1',?,?,?)`, taskID, clientID, now, now, now)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestClaimNextTask_按客户端真实采购能力隔离(t *testing.T) {
|
||||
db := newTestDB(t)
|
||||
insertLiveTask(t, db, "TASK-LIVE", "CLIENT-1")
|
||||
if task, err := ClaimNextTask(db, "CLIENT-1", []string{"purchase"}, "dry_run"); err != nil || task != nil {
|
||||
t.Fatalf("dry_run 客户端不应看见 live 任务: task=%+v err=%v", task, err)
|
||||
}
|
||||
task, err := ClaimNextTask(db, "CLIENT-1", []string{"purchase"}, "live")
|
||||
if err != nil || task == nil || task.ExecutionMode != model.TaskExecutionLive {
|
||||
t.Fatalf("live 客户端应领到 live 任务: task=%+v err=%v", task, err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestTaskExecutionMode_取消和重派不改变模式(t *testing.T) {
|
||||
db := newTestDB(t)
|
||||
insertLiveTask(t, db, "TASK-IMMUTABLE", "CLIENT-1")
|
||||
if _, err := db.Exec(`UPDATE tasks SET status='cancelled',updated_at=? WHERE task_id='TASK-IMMUTABLE'`, model.NowISO()); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := db.Exec(`UPDATE tasks SET status='assigned',assigned_client='CLIENT-2',updated_at=? WHERE task_id='TASK-IMMUTABLE'`, model.NowISO()); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
var mode string
|
||||
if err := db.QueryRow(`SELECT execution_mode FROM tasks WHERE task_id='TASK-IMMUTABLE'`).Scan(&mode); err != nil || mode != "live" {
|
||||
t.Fatalf("取消/重派后模式=%q err=%v", mode, err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user