Files
CosmicClash/server/domain/tier_test.go
T
2026-09-01 15:29:49 +01:00

64 lines
2.1 KiB
Go

package domain
import "testing"
func testTierPolicy(t *testing.T) TierPolicy {
t.Helper()
policy, err := NewTierPolicy([]TierBand{
{Tier: RankTierBronze, MinRating: 0},
{Tier: RankTierSilver, MinRating: 1200},
{Tier: RankTierGold, MinRating: 1500},
{Tier: RankTierPlatinum, MinRating: 1800},
})
if err != nil {
t.Fatal(err)
}
return policy
}
func TestRankedTierUsesAuthoritativeBandsAndExactBoundaries(t *testing.T) {
policy := testTierPolicy(t)
for _, test := range []struct {
rating float64
games int
want RankTier
}{
{rating: 2000, games: 0, want: RankTierProvisional},
{rating: 1199.99, games: 10, want: RankTierBronze},
{rating: 1200, games: 10, want: RankTierSilver},
{rating: 1499.99, games: 10, want: RankTierSilver},
{rating: 1500, games: 10, want: RankTierGold},
{rating: 1800, games: 10, want: RankTierPlatinum},
} {
got, err := RankedTier(RankedProfile{Rating: Rating{Value: test.rating}, RankedGames: test.games}, policy)
if err != nil || got != test.want {
t.Errorf("rating %.2f games %d = %s, err=%v; want %s", test.rating, test.games, got, err, test.want)
}
}
}
func TestTierPolicyRejectsUnorderedOrUnboundedConfiguration(t *testing.T) {
for _, bands := range [][]TierBand{
{},
{{Tier: RankTierBronze, MinRating: 1}},
{{Tier: RankTierBronze, MinRating: 0}, {Tier: RankTierSilver, MinRating: 0}},
{{Tier: RankTierBronze, MinRating: 0}, {Tier: RankTierSilver, MinRating: -1}},
{{Tier: RankTierBronze, MinRating: 0}, {Tier: RankTier(""), MinRating: 1200}},
} {
if _, err := NewTierPolicy(bands); err == nil {
t.Errorf("invalid tier policy accepted: %+v", bands)
}
}
policy := testTierPolicy(t)
if _, err := RankedTier(RankedProfile{Rating: Rating{Value: 1500}, RankedGames: -1}, policy); err == nil {
t.Fatal("negative ranked games accepted")
}
}
func TestDefaultTierPolicyUsesBackendLaunchBands(t *testing.T) {
tier, err := RankedTier(RankedProfile{Rating: Rating{Value: 1600}, RankedGames: 10}, DefaultTierPolicy())
if err != nil || tier != RankTierGold {
t.Fatalf("default tier = (%q, %v), want GOLD", tier, err)
}
}