2026-05-15 09:58:01 +08:00

104 lines
2.7 KiB
Go

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)
}
}