Files
mixmaker/backend/internal/domain/draft_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

49 lines
1.4 KiB
Go

package domain
import (
"testing"
"time"
)
func TestMapDraftAlternatesAndLeavesOneMap(t *testing.T) {
d, err := NewMapDraft([]string{"A", "B", "C"}, "red", [2]string{"red", "blue"})
if err != nil {
t.Fatal(err)
}
if err := d.Ban("blue", "A", "actor", time.Now()); err == nil {
t.Fatal("accepted out-of-turn ban")
}
if err := d.Ban("red", "A", "actor", time.Now()); err != nil {
t.Fatal(err)
}
if err := d.Ban("blue", "B", "actor", time.Now()); err != nil {
t.Fatal(err)
}
if selected, ok := d.Selected(); !ok || selected != "C" {
t.Fatalf("selected=%q ok=%v", selected, ok)
}
}
func TestHeroDraftRoleAndRepeatedBanRules(t *testing.T) {
heroes := []Hero{{Name: "DVa", Role: Tank}, {Name: "Sigma", Role: Tank}, {Name: "Tracer", Role: Damage}, {Name: "Ana", Role: Support}}
d, err := NewHeroDraft(heroes, [2]string{"a", "b"}, "a", 2, map[string][]string{"a": {"Ana"}})
if err != nil {
t.Fatal(err)
}
if err := d.Ban("a", "Ana", "x", time.Now()); err == nil {
t.Fatal("accepted team's repeated series ban")
}
if err := d.Ban("a", "DVa", "x", time.Now()); err != nil {
t.Fatal(err)
}
if err := d.Ban("b", "Ana", "y", time.Now()); err != nil {
t.Fatal("opponent should be allowed to ban Ana:", err)
}
if err := d.Ban("a", "Sigma", "x", time.Now()); err == nil {
t.Fatal("accepted same-role bans by one team")
}
if err := d.Ban("a", "Tracer", "x", time.Now()); err != nil {
t.Fatal(err)
}
}