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