Initialize project with basic structure, including Docker configuration, backend and frontend setup, environment configuration, and essential files for development.
This commit is contained in:
60
backend/internal/domain/model_test.go
Normal file
60
backend/internal/domain/model_test.go
Normal file
@@ -0,0 +1,60 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user