fix: 修复商务汇总任务超时并验证计划启用
This commit is contained in:
@@ -101,3 +101,73 @@ func TestReportBuildStorageReplacesBothTablesAtomically(t *testing.T) {
|
||||
t.Fatal("失败后丢失原身份键或覆盖原汇总")
|
||||
}
|
||||
}
|
||||
|
||||
func TestReportUsersRestrictKnownPlatformsAndKeepAmbiguousMatches(t *testing.T) {
|
||||
db := openTestDB(t)
|
||||
if err := db.Exec("CREATE TABLE tab_user(id INTEGER,source_db TEXT,puid INTEGER,promote_id INTEGER,idcard TEXT,PRIMARY KEY(id,source_db))").Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := db.Exec("INSERT INTO tab_user VALUES(1,'lx',0,10,'known'),(1,'hw',0,20,'unrelated'),(2,'lx',0,10,'ambiguous-a'),(2,'hw',0,20,'ambiguous-b'),(3,'yq',0,30,'unique')").Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
known := map[business.ReportUserKey]bool{{SourceDB: "lx", ID: 1}: true, {SourceDB: "lx", ID: 2}: true}
|
||||
users, err := loadReportUsers(db, known, map[int64]bool{2: true, 3: true})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(users) != 4 {
|
||||
t.Fatalf("wrong user scope: %+v", users)
|
||||
}
|
||||
if _, ok := users[business.ReportUserKey{SourceDB: "hw", ID: 1}]; ok {
|
||||
t.Fatal("known source loaded another platform")
|
||||
}
|
||||
for _, key := range []business.ReportUserKey{{SourceDB: "lx", ID: 1}, {SourceDB: "lx", ID: 2}, {SourceDB: "hw", ID: 2}, {SourceDB: "yq", ID: 3}} {
|
||||
if _, ok := users[key]; !ok {
|
||||
t.Fatalf("lost identity needed for report/ambiguity: %+v", key)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestReportUsersAcrossBatches(t *testing.T) {
|
||||
db := openTestDB(t)
|
||||
if err := db.Exec("CREATE TABLE tab_user(id INTEGER,source_db TEXT,puid INTEGER,promote_id INTEGER,idcard TEXT,PRIMARY KEY(id,source_db))").Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
known := map[business.ReportUserKey]bool{}
|
||||
unknown := map[int64]bool{}
|
||||
rows := make([]map[string]any, 0, 2004)
|
||||
for id := int64(1); id <= 1002; id++ {
|
||||
for _, source := range []string{"lx", "hw"} {
|
||||
rows = append(rows, map[string]any{"id": id, "source_db": source, "puid": 0, "promote_id": id, "idcard": source})
|
||||
}
|
||||
known[business.ReportUserKey{SourceDB: "lx", ID: id}] = true
|
||||
if id > 501 {
|
||||
unknown[id] = true
|
||||
}
|
||||
}
|
||||
// 缺失用户不能被同号的其他平台用户替代。
|
||||
known[business.ReportUserKey{SourceDB: "yq", ID: 1}] = true
|
||||
if err := db.Table("tab_user").CreateInBatches(rows, 100).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
users, err := loadReportUsers(db, known, unknown)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(users) != 1503 {
|
||||
t.Fatalf("分批读取用户数量错误: %d", len(users))
|
||||
}
|
||||
for id := int64(1); id <= 1002; id++ {
|
||||
user, ok := users[business.ReportUserKey{SourceDB: "lx", ID: id}]
|
||||
if !ok || user.PromoteID == nil || *user.PromoteID != id || user.IDCard != "lx" {
|
||||
t.Fatalf("跨批丢失或混淆用户资料: id=%d user=%+v", id, user)
|
||||
}
|
||||
_, other := users[business.ReportUserKey{SourceDB: "hw", ID: id}]
|
||||
if other != unknown[id] {
|
||||
t.Fatalf("跨批用户平台范围错误: id=%d", id)
|
||||
}
|
||||
}
|
||||
if _, exists := users[business.ReportUserKey{SourceDB: "yq", ID: 1}]; exists {
|
||||
t.Fatal("缺失平台用户不能回退到同号账号")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user