diff --git a/app/playoff.py b/app/playoff.py index 0d5e8c7..8d4153a 100644 --- a/app/playoff.py +++ b/app/playoff.py @@ -92,10 +92,19 @@ def series_state(series_status): } +def _game_number(game, state): + """This card's game number. Prefer the raw ``gameNumber`` field so we don't + drift forward once ``seriesStatus`` advances after the game ends.""" + raw = game.get("gameNumber") + if isinstance(raw, int) and raw > 0: + return raw + return state["game_number"] + + def series_blurb(game): """One sentence of series context for a playoff card.""" state = series_state(game.get("seriesStatus", {})) - g = state["game_number"] + g = _game_number(game, state) leader_name = _leader_name(game, state) trailer_name = _trailer_name(game, state) @@ -137,7 +146,7 @@ def series_badges(game): def series_summary(game): """Short line rendered above the card, e.g. 'Game 2 of 7'.""" state = series_state(game.get("seriesStatus", {})) - return f"Game {state['game_number']} of 7" + return f"Game {_game_number(game, state)} of 7" def is_pinned(game): diff --git a/tests/conftest.py b/tests/conftest.py index def4022..7016ad4 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -65,6 +65,7 @@ def make_playoff_game( bottom_abbrev="BOS", top_is_home=True, game_state="LIVE", + game_number=None, **kwargs, ): """Convenience wrapper around make_game for playoff fixtures. @@ -87,7 +88,7 @@ def make_playoff_game( home_abbrev, away_abbrev = bottom_abbrev, top_abbrev home_name, away_name = "Bottom Seeds", "Top Seeds" - return make_game( + game = make_game( game_state=game_state, game_type=3, series_status=series_status, @@ -97,6 +98,9 @@ def make_playoff_game( away_name=kwargs.pop("away_name", away_name), **kwargs, ) + if game_number is not None: + game["gameNumber"] = game_number + return game LIVE_GAME = make_game() diff --git a/tests/test_playoff_series.py b/tests/test_playoff_series.py index ca9e5f8..51556c2 100644 --- a/tests/test_playoff_series.py +++ b/tests/test_playoff_series.py @@ -149,6 +149,12 @@ class TestSeriesSummary: game = make_playoff_game(top_wins=1, bottom_wins=1) assert series_summary(game) == "Game 3 of 7" + def test_finished_game_keeps_its_own_number(self): + # seriesStatus has advanced to 2-0 after this game finished, but the + # raw gameNumber pins the card to the game it actually represents. + game = make_playoff_game(top_wins=2, bottom_wins=0, game_number=2) + assert series_summary(game) == "Game 2 of 7" + class TestIsPinned: def test_game7_live_is_pinned(self):