134 lines
3.9 KiB
Go
134 lines
3.9 KiB
Go
package roomturnoverreward
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"chatapp3-golang/internal/config"
|
|
"chatapp3-golang/internal/model"
|
|
|
|
"gorm.io/driver/sqlite"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func newTestService(t *testing.T) (*Service, *gorm.DB) {
|
|
t.Helper()
|
|
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.RoomTurnoverRewardConfig{},
|
|
&model.RoomTurnoverRewardLevel{},
|
|
&model.RoomTurnoverRewardRecord{},
|
|
); err != nil {
|
|
t.Fatalf("auto migrate: %v", err)
|
|
}
|
|
service := NewService(config.Config{
|
|
RoomTurnoverReward: config.RoomTurnoverRewardConfig{
|
|
DefaultSysOrigin: "LIKEI",
|
|
Timezone: "Asia/Riyadh",
|
|
},
|
|
}, db)
|
|
return service, db
|
|
}
|
|
|
|
func TestGetConfigReturnsDefaultLevelsWhenMissing(t *testing.T) {
|
|
service, _ := newTestService(t)
|
|
|
|
resp, err := service.GetConfig(context.Background(), "")
|
|
if err != nil {
|
|
t.Fatalf("GetConfig() error = %v", err)
|
|
}
|
|
if resp.Configured || resp.Enabled {
|
|
t.Fatalf("GetConfig() configured/enabled = %v/%v, want false/false", resp.Configured, resp.Enabled)
|
|
}
|
|
if !resp.AutoRewardEnabled {
|
|
t.Fatalf("GetConfig() autoRewardEnabled = false, want true")
|
|
}
|
|
if resp.SysOrigin != "LIKEI" || resp.Timezone != "Asia/Riyadh" {
|
|
t.Fatalf("GetConfig() sys/timezone = %q/%q", resp.SysOrigin, resp.Timezone)
|
|
}
|
|
if len(resp.LevelConfigs) != 4 {
|
|
t.Fatalf("default level count = %d, want 4", len(resp.LevelConfigs))
|
|
}
|
|
if got := resp.LevelConfigs[3]; got.TurnoverThreshold != 5000000 || got.RewardGold != 250000 {
|
|
t.Fatalf("highest default level = %+v", got)
|
|
}
|
|
}
|
|
|
|
func TestSaveConfigRejectsDuplicateThreshold(t *testing.T) {
|
|
service, _ := newTestService(t)
|
|
|
|
_, err := service.SaveConfig(context.Background(), SaveRoomTurnoverRewardConfigRequest{
|
|
SysOrigin: "LIKEI",
|
|
Enabled: true,
|
|
Timezone: "Asia/Riyadh",
|
|
LevelConfigs: []RoomTurnoverRewardLevelInput{
|
|
{Level: 1, TurnoverThreshold: 100000, RewardGold: 2000, Enabled: true},
|
|
{Level: 2, TurnoverThreshold: 100000, RewardGold: 3000, Enabled: true},
|
|
},
|
|
})
|
|
if err == nil {
|
|
t.Fatalf("SaveConfig() error = nil, want duplicate threshold error")
|
|
}
|
|
}
|
|
|
|
func TestSaveConfigUpsertsBySysOrigin(t *testing.T) {
|
|
service, _ := newTestService(t)
|
|
ctx := context.Background()
|
|
|
|
first, err := service.SaveConfig(ctx, SaveRoomTurnoverRewardConfigRequest{
|
|
SysOrigin: "likei",
|
|
Enabled: true,
|
|
Timezone: "Asia/Riyadh",
|
|
LevelConfigs: []RoomTurnoverRewardLevelInput{
|
|
{Level: 1, TurnoverThreshold: 100000, RewardGold: 2000, Enabled: true},
|
|
},
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("first SaveConfig() error = %v", err)
|
|
}
|
|
second, err := service.SaveConfig(ctx, SaveRoomTurnoverRewardConfigRequest{
|
|
SysOrigin: "LIKEI",
|
|
Enabled: true,
|
|
Timezone: "Asia/Riyadh",
|
|
LevelConfigs: []RoomTurnoverRewardLevelInput{
|
|
{Level: 1, TurnoverThreshold: 200000, RewardGold: 5000, Enabled: true},
|
|
},
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("second SaveConfig() error = %v", err)
|
|
}
|
|
if first.ID != second.ID {
|
|
t.Fatalf("config ID changed on upsert: first=%d second=%d", first.ID, second.ID)
|
|
}
|
|
if got := second.LevelConfigs[0]; got.TurnoverThreshold != 200000 || got.RewardGold != 5000 {
|
|
t.Fatalf("upserted level = %+v", got)
|
|
}
|
|
if !second.AutoRewardEnabled {
|
|
t.Fatalf("autoRewardEnabled = false, want default true")
|
|
}
|
|
}
|
|
|
|
func TestSaveConfigCanDisableAutoReward(t *testing.T) {
|
|
service, _ := newTestService(t)
|
|
autoRewardEnabled := false
|
|
|
|
resp, err := service.SaveConfig(context.Background(), SaveRoomTurnoverRewardConfigRequest{
|
|
SysOrigin: "LIKEI",
|
|
Enabled: true,
|
|
AutoRewardEnabled: &autoRewardEnabled,
|
|
Timezone: "Asia/Riyadh",
|
|
LevelConfigs: []RoomTurnoverRewardLevelInput{
|
|
{Level: 1, TurnoverThreshold: 100000, RewardGold: 2000, Enabled: true},
|
|
},
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("SaveConfig() error = %v", err)
|
|
}
|
|
if resp.AutoRewardEnabled {
|
|
t.Fatalf("autoRewardEnabled = true, want false")
|
|
}
|
|
}
|