Files
cmautobuy/admin/service/execution_mode_test.go
T

50 lines
1.8 KiB
Go
Raw Normal View History

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)
}
}