Files
mixmaker/backend/internal/domain/model_test.go
lemintare 1239fcee08
Some checks failed
CI / backend (push) Has been cancelled
CI / frontend (push) Has been cancelled
CI / compose (push) Has been cancelled
Initialize project with basic structure, including Docker configuration, backend and frontend setup, environment configuration, and essential files for development.
2026-07-19 00:17:31 +03:00

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