package smashegg import ( "context" "testing" "time" "chatapp3-golang/internal/model" "gorm.io/driver/sqlite" "gorm.io/gorm" ) func TestPageAdminRecordsDefaultsToLastWeekAndSummarizesGold(t *testing.T) { db, err := gorm.Open(sqlite.Open("file:"+t.Name()+"?mode=memory&cache=shared"), &gorm.Config{}) if err != nil { t.Fatalf("open sqlite: %v", err) } if err := db.AutoMigrate(&model.SmashEggDrawRecord{}); err != nil { t.Fatalf("migrate sqlite: %v", err) } now := time.Now().Add(-time.Hour).Truncate(time.Second) rows := []model.SmashEggDrawRecord{ { DrawNo: "draw-ten", EventID: "draw-ten-1", SysOrigin: "LIKEI", UserID: 1001, DrawTimes: 10, PaidGold: 1000, RewardType: rewardTypeGold, GoldAmount: 100, RewardValueGold: 100, Status: drawStatusSuccess, CreateTime: now, UpdateTime: now, }, { DrawNo: "draw-ten", EventID: "draw-ten-2", SysOrigin: "LIKEI", UserID: 1001, DrawTimes: 10, PaidGold: 1000, RewardType: rewardTypeGold, GoldAmount: 200, RewardValueGold: 200, Status: drawStatusSuccess, CreateTime: now, UpdateTime: now, }, { DrawNo: "draw-one", EventID: "draw-one-1", SysOrigin: "LIKEI", UserID: 1002, DrawTimes: 1, PaidGold: 100, RewardType: rewardTypeGold, GoldAmount: 50, RewardValueGold: 50, Status: drawStatusSuccess, CreateTime: now, UpdateTime: now, }, { DrawNo: "draw-old", EventID: "draw-old-1", SysOrigin: "LIKEI", UserID: 1003, DrawTimes: 1, PaidGold: 100, RewardType: rewardTypeGold, GoldAmount: 100, RewardValueGold: 100, Status: drawStatusSuccess, CreateTime: now.AddDate(0, 0, -8), UpdateTime: now.AddDate(0, 0, -8), }, } if err := db.Create(&rows).Error; err != nil { t.Fatalf("insert records: %v", err) } service := &Service{db: db} resp, err := service.PageAdminRecords(context.Background(), "likei", 0, drawStatusSuccess, 1, 20, "", "") if err != nil { t.Fatalf("PageAdminRecords returned error: %v", err) } if resp.Total != 3 { t.Fatalf("total = %d, want 3", resp.Total) } if resp.TotalPaidGold != 1100 { t.Fatalf("total paid gold = %d, want 1100", resp.TotalPaidGold) } if resp.TotalRewardGold != 350 { t.Fatalf("total reward gold = %d, want 350", resp.TotalRewardGold) } if resp.ReturnRatioBasisPoints != 3182 || resp.ReturnRatioPercent != "31.82" { t.Fatalf("return ratio = %d/%s, want 3182/31.82", resp.ReturnRatioBasisPoints, resp.ReturnRatioPercent) } }