78 lines
2.8 KiB
Go
78 lines
2.8 KiB
Go
package roomrocket
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
)
|
|
|
|
func TestNormalizeConfigDefaultsAndSortsLevels(t *testing.T) {
|
|
config, err := normalizeConfig(RoomRocketConfig{
|
|
AppCode: "lalu",
|
|
LaunchDelayMS: defaultLaunchDelayMS,
|
|
Levels: []RoomRocketLevelConfig{
|
|
{Level: 2, FuelThreshold: 300},
|
|
{Level: 1, FuelThreshold: 100},
|
|
{Level: 3, FuelThreshold: 600},
|
|
{Level: 4, FuelThreshold: 1_000},
|
|
{Level: 5, FuelThreshold: 1_500},
|
|
},
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("normalizeConfig failed: %v", err)
|
|
}
|
|
if config.FuelSource != defaultFuelSource || config.LaunchDelayMS != defaultLaunchDelayMS || config.BroadcastScope != defaultBroadcastScope {
|
|
t.Fatalf("default fields mismatch: %+v", config)
|
|
}
|
|
if config.Levels[0].Level != 1 || config.Levels[4].Level != 5 {
|
|
t.Fatalf("levels should be sorted by level: %+v", config.Levels)
|
|
}
|
|
}
|
|
|
|
func TestDefaultConfigKeepsOperationalDefaults(t *testing.T) {
|
|
config, err := normalizeConfig(defaultConfig("lalu"))
|
|
if err != nil {
|
|
t.Fatalf("normalizeConfig(defaultConfig) failed: %v", err)
|
|
}
|
|
if !config.BroadcastEnabled || config.LaunchDelayMS != defaultLaunchDelayMS || len(config.Levels) != roomRocketLevelCount {
|
|
t.Fatalf("default config mismatch: %+v", config)
|
|
}
|
|
}
|
|
|
|
func TestNormalizeConfigRejectsInvalidLevels(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
config RoomRocketConfig
|
|
}{
|
|
{name: "missing_level", config: RoomRocketConfig{AppCode: "lalu", Levels: []RoomRocketLevelConfig{{Level: 1, FuelThreshold: 1}}}},
|
|
{name: "duplicate", config: RoomRocketConfig{AppCode: "lalu", Levels: []RoomRocketLevelConfig{
|
|
{Level: 1, FuelThreshold: 1}, {Level: 1, FuelThreshold: 2}, {Level: 3, FuelThreshold: 3}, {Level: 4, FuelThreshold: 4}, {Level: 5, FuelThreshold: 5},
|
|
}}},
|
|
{name: "zero_threshold", config: RoomRocketConfig{AppCode: "lalu", Levels: []RoomRocketLevelConfig{
|
|
{Level: 1, FuelThreshold: 0}, {Level: 2, FuelThreshold: 2}, {Level: 3, FuelThreshold: 3}, {Level: 4, FuelThreshold: 4}, {Level: 5, FuelThreshold: 5},
|
|
}}},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
t.Run(test.name, func(t *testing.T) {
|
|
_, err := normalizeConfig(test.config)
|
|
if !errors.Is(err, ErrInvalidArgument) {
|
|
t.Fatalf("normalizeConfig should reject %s with ErrInvalidArgument, got %v", test.name, err)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestNormalizeConfigRejectsIncompleteRewardAndFuelRule(t *testing.T) {
|
|
config := defaultConfig("lalu")
|
|
config.Levels[0].InRoomRewards = []RoomRocketRewardItem{{ResourceGroupID: 0, Weight: 100}}
|
|
if _, err := normalizeConfig(config); !errors.Is(err, ErrInvalidArgument) {
|
|
t.Fatalf("reward without resource group should be invalid, got %v", err)
|
|
}
|
|
|
|
config = defaultConfig("lalu")
|
|
config.GiftFuelRules = []GiftFuelRuleConfig{{GiftID: "gift-1"}}
|
|
if _, err := normalizeConfig(config); !errors.Is(err, ErrInvalidArgument) {
|
|
t.Fatalf("fuel rule without multiplier or fixed fuel should be invalid, got %v", err)
|
|
}
|
|
}
|