feat: 档口入库码后台批量回写 (#246)
This commit is contained in:
@@ -2,9 +2,12 @@ package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"errors"
|
||||
"testing"
|
||||
|
||||
_ "modernc.org/sqlite"
|
||||
|
||||
"cmautobuy/admin/model"
|
||||
"cmautobuy/admin/syb"
|
||||
)
|
||||
@@ -20,13 +23,40 @@ type fakeInnerCodeWriter struct {
|
||||
updatedCode string
|
||||
}
|
||||
|
||||
func TestApplyInnerCodes_远程批量上限不随页面容量放宽(t *testing.T) {
|
||||
ids := make([]int64, InnerCodeApplyBatchLimit+1)
|
||||
func TestQueueInnerCodeApplyBatch_超过20条可一次排队(t *testing.T) {
|
||||
if innerCodeApplyChunkSize != 20 {
|
||||
t.Fatalf("后台数据库读取分组应固定为 20,实际 %d", innerCodeApplyChunkSize)
|
||||
}
|
||||
db, err := sql.Open("sqlite", "file:inner_code_queue_over_20?mode=memory&cache=shared")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer db.Close()
|
||||
if _, err := db.Exec(`CREATE TABLE syb_inner_code_records (
|
||||
id INTEGER PRIMARY KEY,status TEXT NOT NULL,apply_batch_id TEXT,apply_queued_at TEXT,
|
||||
applied_by_user_id TEXT,result_message TEXT,apply_started_at TEXT,updated_at TEXT,
|
||||
deleted_at TEXT
|
||||
)`); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
ids := make([]int64, 45)
|
||||
for i := range ids {
|
||||
ids[i] = int64(i + 1)
|
||||
if _, err := db.Exec(`INSERT INTO syb_inner_code_records(id,status,updated_at) VALUES(?,'ready','old')`, ids[i]); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
if _, err := ApplyInnerCodes(context.Background(), nil, nil, ids, "user-1"); err == nil {
|
||||
t.Fatal("超过 20 条时应该在访问数据库或顺运宝前拒绝")
|
||||
batch, err := QueueInnerCodeApplyBatch(db, ids, "user-1")
|
||||
if err != nil || batch.Count != 45 || batch.ID == "" {
|
||||
t.Fatalf("batch=%+v err=%v", batch, err)
|
||||
}
|
||||
var queued, batches int
|
||||
if err := db.QueryRow(`SELECT COUNT(*),COUNT(DISTINCT apply_batch_id)
|
||||
FROM syb_inner_code_records WHERE status='queued'`).Scan(&queued, &batches); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if queued != 45 || batches != 1 {
|
||||
t.Fatalf("queued=%d batches=%d", queued, batches)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user