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