fix: align business reports and record task migration progress
This commit is contained in:
@@ -2,6 +2,7 @@ package business
|
||||
|
||||
import (
|
||||
"context"
|
||||
"sync/atomic"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@@ -9,6 +10,35 @@ import (
|
||||
"kra/internal/biz/business"
|
||||
)
|
||||
|
||||
func TestAlertLossSkipsPaymentReadsForExpiredLogins(t *testing.T) {
|
||||
db := openTestDB(t)
|
||||
now := prepareAlertV2(t, db)
|
||||
if err := db.Exec("UPDATE tab_promote SET last_login_time=0,create_time=1").Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
var paymentReads atomic.Int32
|
||||
if err := db.Callback().Row().Before("gorm:row").Register("count_loss_payment_reads", func(tx *gorm.DB) {
|
||||
if tx.Statement.Table == "tab_spend" {
|
||||
paymentReads.Add(1)
|
||||
}
|
||||
}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
keys := []business.ChannelKey{{SourceDB: "lx", ID: 1}, {SourceDB: "hw", ID: 1}}
|
||||
window := business.AlertLossAt(now)
|
||||
states, err := loadAlertLoss(db, keys, window)
|
||||
if err != nil || paymentReads.Load() != 0 || len(states) != 2 || !*states[keys[0]] || !*states[keys[1]] {
|
||||
t.Fatalf("expired logins should establish loss without payment reads: %+v %v reads=%d", states, err, paymentReads.Load())
|
||||
}
|
||||
if err := db.Exec("UPDATE tab_promote SET last_login_time=? WHERE source_db='hw'", now.Unix()).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
states, err = loadAlertLoss(db, keys, window)
|
||||
if err != nil || paymentReads.Load() != 1 || !*states[keys[0]] || *states[keys[1]] {
|
||||
t.Fatalf("active login must still check payments within its own platform: %+v %v reads=%d", states, err, paymentReads.Load())
|
||||
}
|
||||
}
|
||||
|
||||
func prepareAlertV2(t *testing.T, db *gorm.DB) time.Time {
|
||||
t.Helper()
|
||||
now := time.Date(2026, 11, 5, 0, 0, 0, 0, time.FixedZone("Asia/Shanghai", 8*3600))
|
||||
|
||||
Reference in New Issue
Block a user