Files
NHL-Scoreboard/tests/test_bracket_view.py
T
josh 930247b32f
CI / Lint (push) Successful in 8s
CI / Test (push) Successful in 10s
CI / Build & Push (push) Successful in 22s
style: apply ruff format and fix lint issues in playoff modules
- Rename single-letter `l` loop variables in bracket_view to satisfy E741
- Drop unused `json` import from test_playoff_cache (F401/F811)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-19 12:48:42 -04:00

136 lines
4.6 KiB
Python

from app.bracket_view import build_bracket_view
def _series(
letter,
top_abbrev,
top_id,
top_wins,
bot_abbrev,
bot_id,
bot_wins,
rnd=1,
winning_id=None,
top_seed="D1",
bot_seed="WC1",
):
return {
"seriesLetter": letter,
"playoffRound": rnd,
"topSeedWins": top_wins,
"bottomSeedWins": bot_wins,
"topSeedRankAbbrev": top_seed,
"bottomSeedRankAbbrev": bot_seed,
"winningTeamId": winning_id,
"topSeedTeam": {
"id": top_id,
"abbrev": top_abbrev,
"name": {"default": f"{top_abbrev} Team"},
"commonName": {"default": top_abbrev},
"darkLogo": f"http://example.com/{top_abbrev}_dark.svg",
},
"bottomSeedTeam": {
"id": bot_id,
"abbrev": bot_abbrev,
"name": {"default": f"{bot_abbrev} Team"},
"commonName": {"default": bot_abbrev},
"darkLogo": f"http://example.com/{bot_abbrev}_dark.svg",
},
}
class TestEmptyBracket:
def test_empty_payload_returns_all_placeholders(self):
view = build_bracket_view(2026, {"series": []})
assert len(view["east_r1"]) == 4
assert len(view["west_r1"]) == 4
assert len(view["east_r2"]) == 2
assert len(view["west_r2"]) == 2
assert len(view["east_cf"]) == 1
assert len(view["west_cf"]) == 1
assert len(view["cup"]) == 1
for slot in view["east_r1"]:
assert slot["empty"] is True
assert slot["series_id"].startswith("2026-")
def test_none_payload_is_safe(self):
view = build_bracket_view(2026, None)
assert all(s["empty"] for s in view["east_r1"])
class TestMatchupStates:
def test_complete_series_marks_winner(self):
s = _series("A", "TOR", 10, 4, "OTT", 9, 2, winning_id=10)
view = build_bracket_view(2026, {"series": [s]})
a = view["east_r1"][0]
assert a["empty"] is False
assert a["state"] == "complete"
assert a["winner_abbrev"] == "TOR"
assert a["top_wins"] == 4
assert a["bottom_wins"] == 2
def test_active_series_has_wins_but_no_winner(self):
s = _series("B", "FLA", 13, 2, "TBL", 14, 1)
view = build_bracket_view(2026, {"series": [s]})
b = view["east_r1"][1]
assert b["state"] == "active"
assert b["winner_abbrev"] is None
def test_upcoming_series_zero_zero(self):
s = _series("C", "WSH", 15, 0, "MTL", 8, 0)
view = build_bracket_view(2026, {"series": [s]})
c = view["east_r1"][2]
assert c["state"] == "upcoming"
class TestRoutingToRounds:
def test_round_1_east_vs_west_by_letter(self):
series = [
_series("A", "T1", 1, 1, "T2", 2, 0),
_series("E", "T3", 3, 1, "T4", 4, 0),
]
view = build_bracket_view(2026, {"series": series})
assert view["east_r1"][0]["top"]["abbrev"] == "T1"
assert view["west_r1"][0]["top"]["abbrev"] == "T3"
def test_round_2_routing(self):
series = [
_series("I", "T1", 1, 0, "T2", 2, 0, rnd=2),
_series("K", "T3", 3, 0, "T4", 4, 0, rnd=2),
]
view = build_bracket_view(2026, {"series": series})
assert view["east_r2"][0]["top"]["abbrev"] == "T1"
assert view["west_r2"][0]["top"]["abbrev"] == "T3"
def test_conf_finals_routing(self):
series = [
_series("M", "T1", 1, 0, "T2", 2, 0, rnd=3),
_series("N", "T3", 3, 0, "T4", 4, 0, rnd=3),
]
view = build_bracket_view(2026, {"series": series})
assert view["east_cf"][0]["top"]["abbrev"] == "T1"
assert view["west_cf"][0]["top"]["abbrev"] == "T3"
def test_cup_final_routing(self):
series = [_series("O", "T1", 1, 2, "T2", 2, 4, rnd=4, winning_id=2)]
view = build_bracket_view(2026, {"series": series})
assert view["cup"][0]["bottom"]["abbrev"] == "T2"
assert view["cup"][0]["winner_abbrev"] == "T2"
class TestSeriesIdLink:
def test_series_id_format(self):
s = _series("A", "TOR", 10, 0, "OTT", 9, 0)
view = build_bracket_view(2026, {"series": [s]})
assert view["east_r1"][0]["series_id"] == "2026-A"
class TestRoundsAccordionBundle:
def test_rounds_has_four_entries(self):
view = build_bracket_view(2026, {"series": []})
assert len(view["rounds"]) == 4
assert view["rounds"][0]["label"] == "First Round"
assert view["rounds"][3]["label"] == "Stanley Cup Final"
assert "east" in view["rounds"][0]
assert "cup" in view["rounds"][3]