61 lines
2.1 KiB
Go
61 lines
2.1 KiB
Go
package domain
|
|
|
|
import "testing"
|
|
|
|
func TestRatingsAndCaptainInvariants(t *testing.T) {
|
|
if err := (Ratings{Tank: 1, Damage: 40, Support: 20}).Validate(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := (Ratings{Tank: 0, Damage: 20, Support: 20}).Validate(); err == nil {
|
|
t.Fatal("expected invalid rating")
|
|
}
|
|
team := Team{Slots: []Slot{{PlayerID: "p1", Role: Tank}}}
|
|
if err := team.AssignCaptain("outsider"); err == nil {
|
|
t.Fatal("outsider was assigned captain")
|
|
}
|
|
if err := team.AssignCaptain("p1"); err != nil || team.CaptainPlayerID != "p1" {
|
|
t.Fatalf("valid captain rejected: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestPlayerPreferenceLimits(t *testing.T) {
|
|
player := Player{ID: "p1", PreferredRoles: []Role{Tank, Support}, PreferredPlayerIDs: []string{"p2", "p3", "p4"}}
|
|
if err := player.ValidatePreferences(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
player.PreferredPlayerIDs = append(player.PreferredPlayerIDs, "p5")
|
|
if err := player.ValidatePreferences(); err == nil {
|
|
t.Fatal("expected teammate preference limit")
|
|
}
|
|
}
|
|
|
|
func TestSeriesBestOfThree(t *testing.T) {
|
|
s := Series{TeamAID: "a", TeamBID: "b", BestOf: 3}
|
|
for _, outcome := range []MapOutcome{TeamAWin, Draw, TeamAWin} {
|
|
if err := s.RecordResult(MapResult{MapName: "map", Outcome: outcome}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
if s.WinnerTeamID != "a" || s.Version != 3 {
|
|
t.Fatalf("unexpected completed series: %+v", s)
|
|
}
|
|
if err := s.RecordResult(MapResult{MapName: "late", Outcome: TeamBWin}); err == nil {
|
|
t.Fatal("accepted result after completion")
|
|
}
|
|
}
|
|
|
|
func TestSeriesResultCorrectionPreservesHistoryAndRecalculatesWinner(t *testing.T) {
|
|
s := Series{TeamAID: "a", TeamBID: "b", BestOf: 3}
|
|
_ = s.RecordResult(MapResult{MapName: "one", Outcome: TeamAWin})
|
|
_ = s.RecordResult(MapResult{MapName: "two", Outcome: TeamAWin})
|
|
if s.WinnerTeamID != "a" {
|
|
t.Fatal("series should initially be won by team A")
|
|
}
|
|
if err := s.CorrectResult(1, MapResult{MapName: "two", Outcome: TeamBWin}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if s.WinnerTeamID != "" || len(s.Results) != 3 || s.Results[2].CorrectionOf != 2 {
|
|
t.Fatalf("unexpected corrected series: %+v", s)
|
|
}
|
|
}
|