53 lines
2.0 KiB
Go
53 lines
2.0 KiB
Go
package repository
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"database/sql"
|
||
|
|
"errors"
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
_ "modernc.org/sqlite"
|
||
|
|
|
||
|
|
"cmautobuy/admin/model"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestCatalogImportRun_登记查询重放和冲突(t *testing.T) {
|
||
|
|
db, err := sql.Open("sqlite", ":memory:")
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
defer db.Close()
|
||
|
|
if _, err := db.Exec(`CREATE TABLE catalog_import_runs (
|
||
|
|
source TEXT NOT NULL,batch_id TEXT NOT NULL,request_hash TEXT NOT NULL,status TEXT NOT NULL,
|
||
|
|
request_count INTEGER NOT NULL,conflict_count INTEGER NOT NULL,observed_at TEXT,last_request_at TEXT NOT NULL,
|
||
|
|
last_conflict_at TEXT,shopee_created INTEGER NOT NULL DEFAULT 0,shopee_updated INTEGER NOT NULL DEFAULT 0,
|
||
|
|
sku_created INTEGER NOT NULL DEFAULT 0,sku_updated INTEGER NOT NULL DEFAULT 0,pdd_created INTEGER NOT NULL DEFAULT 0,
|
||
|
|
pdd_updated INTEGER NOT NULL DEFAULT 0,association_created INTEGER NOT NULL DEFAULT 0,
|
||
|
|
association_unchanged INTEGER NOT NULL DEFAULT 0,failure_count INTEGER NOT NULL DEFAULT 0,
|
||
|
|
error_summary TEXT,response_body TEXT,created_at TEXT NOT NULL,finished_at TEXT,
|
||
|
|
PRIMARY KEY(source,batch_id))`); err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
run := model.CatalogImportRun{Source: "script-a", BatchID: "batch-1", RequestHash: "abc",
|
||
|
|
Status: model.CatalogImportProcessing, ObservedAt: "2026-08-11T00:00:00Z",
|
||
|
|
LastRequestAt: "2026-08-11T00:01:00Z", CreatedAt: "2026-08-11T00:01:00Z"}
|
||
|
|
if err := InsertCatalogImportRun(db, run); err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
if err := InsertCatalogImportRun(db, run); !errors.Is(err, ErrCatalogImportRunExists) {
|
||
|
|
t.Fatalf("重复批次应由唯一键拦截:%v", err)
|
||
|
|
}
|
||
|
|
if err := RecordCatalogImportReplay(db, run.Source, run.BatchID, "2026-08-11T00:02:00Z"); err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
if err := RecordCatalogImportConflict(db, run.Source, run.BatchID, "2026-08-11T00:03:00Z"); err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
got, err := GetCatalogImportRun(db, run.Source, run.BatchID)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
if got.RequestCount != 3 || got.ConflictCount != 1 || got.LastConflictAt == "" {
|
||
|
|
t.Fatalf("批次计数不正确:%+v", got)
|
||
|
|
}
|
||
|
|
}
|