feat: 统一顺运宝日期同步并记录历史 (#59)
This commit is contained in:
@@ -191,6 +191,82 @@ func TestSybSyncState_首次为空之后可更新(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func createSybSyncTestUser(t *testing.T, db *sql.DB) model.User {
|
||||
t.Helper()
|
||||
user := model.User{
|
||||
UserID: "USR-SYNC", Username: "buyer", PasswordHash: "test-hash",
|
||||
Role: model.RolePurchaser, Status: model.UserActive,
|
||||
PasswordChangedAt: "2026-08-09T00:00:00Z", CreatedAt: "2026-08-09T00:00:00Z",
|
||||
UpdatedAt: "2026-08-09T00:00:00Z",
|
||||
}
|
||||
if err := CreateInitialAdmin(db, user); err != nil {
|
||||
t.Fatalf("创建同步记录测试用户失败: %v", err)
|
||||
}
|
||||
return user
|
||||
}
|
||||
|
||||
func TestSybSyncRun_创建完成并分页读取(t *testing.T) {
|
||||
db := newSybTestDB(t)
|
||||
user := createSybSyncTestUser(t, db)
|
||||
run := model.SybSyncRun{
|
||||
RunID: "SYB-RUN-1", UserID: user.UserID, DateFrom: "2026-08-07",
|
||||
DateTo: "2026-08-09", StartedAt: "2026-08-09T01:00:00Z",
|
||||
}
|
||||
if err := CreateSybSyncRun(db, run); err != nil {
|
||||
t.Fatalf("创建同步记录失败: %v", err)
|
||||
}
|
||||
if err := FinishSybSyncRun(db, model.SybSyncRun{
|
||||
RunID: "SYB-RUN-1", Status: model.SybSyncSucceeded,
|
||||
StockCount: 3, DetailCount: 4, Created: 2, Updated: 2, Skipped: 1,
|
||||
CursorAdvanced: true, FinishedAt: "2026-08-09T01:02:00Z",
|
||||
}); err != nil {
|
||||
t.Fatalf("完成同步记录失败: %v", err)
|
||||
}
|
||||
|
||||
rows, err := ListSybSyncRuns(db, 10, 0)
|
||||
if err != nil || len(rows) != 1 {
|
||||
t.Fatalf("读取同步记录失败: rows=%+v err=%v", rows, err)
|
||||
}
|
||||
got := rows[0]
|
||||
if got.Username != "buyer" || got.Status != model.SybSyncSucceeded ||
|
||||
got.DetailCount != 4 || !got.CursorAdvanced || got.FinishedAt == "" {
|
||||
t.Fatalf("同步记录字段不正确: %+v", got)
|
||||
}
|
||||
if count, err := CountSybSyncRuns(db); err != nil || count != 1 {
|
||||
t.Fatalf("同步记录总数错误: count=%d err=%v", count, err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestInterruptRunningSybSyncRuns_只中断未完成记录(t *testing.T) {
|
||||
db := newSybTestDB(t)
|
||||
user := createSybSyncTestUser(t, db)
|
||||
for _, id := range []string{"RUNNING", "DONE"} {
|
||||
if err := CreateSybSyncRun(db, model.SybSyncRun{
|
||||
RunID: id, UserID: user.UserID, DateFrom: "2026-08-09", DateTo: "2026-08-09",
|
||||
StartedAt: "2026-08-09T01:00:00Z",
|
||||
}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
if err := FinishSybSyncRun(db, model.SybSyncRun{
|
||||
RunID: "DONE", Status: model.SybSyncSucceeded, FinishedAt: "2026-08-09T01:01:00Z",
|
||||
}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
affected, err := InterruptRunningSybSyncRuns(db, "2026-08-09T02:00:00Z")
|
||||
if err != nil || affected != 1 {
|
||||
t.Fatalf("应该只中断一条 running 记录: affected=%d err=%v", affected, err)
|
||||
}
|
||||
rows, _ := ListSybSyncRuns(db, 10, 0)
|
||||
statuses := map[string]model.SybSyncRunStatus{}
|
||||
for _, row := range rows {
|
||||
statuses[row.RunID] = row.Status
|
||||
}
|
||||
if statuses["RUNNING"] != model.SybSyncInterrupted || statuses["DONE"] != model.SybSyncSucceeded {
|
||||
t.Fatalf("中断状态错误: %+v", statuses)
|
||||
}
|
||||
}
|
||||
|
||||
func TestListSybOrders_关键字筛选订单号和标题(t *testing.T) {
|
||||
db := newSybTestDB(t)
|
||||
mustUpsert := func(sybID, orderNo, title string) {
|
||||
|
||||
Reference in New Issue
Block a user