mirror of
https://github.com/jcreek/CosmicClash.git
synced 2026-09-10 16:04:04 +00:00
64 lines
2.1 KiB
Go
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)
|
|
}
|
|
}
|