Skip to main content
Version: Next 🚧

Test fixtures

The parser layer is exercised offline against 89 captured live payloads spanning 6 fixture directories. This page indexes them all so contributors who want to extend a parser can find a representative payload to test against without making a fresh network call.

Each fixture directory also has its own README.md documenting provenance — see those files for the exact URL each capture was made from + the date.

ESPN cross-league — tests/fixtures/espn/ (43 captures)​

Summary endpoint (8 — one per ESPN league)​

The richest payload in the package (~700KB–1.8MB per game). Captured against championship / playoff games where every section has data.

FileGameCaptured
summary_nba.json2024 NBA Finals G5 BOS @ DALevent 401585607
summary_mlb.json2024 World Series G5 LAD @ NYYevent 401701044
summary_nfl.jsonSuper Bowl LIX KC @ PHIevent 401671889
summary_nhl.json2024 Stanley Cup Final G7 EDM @ FLAevent 401675111
summary_wnba.json2024 WNBA Finals G5 MIN @ NYevent 401726992
summary_mbb.json2024 NCAA M Championship Purdue @ UConnevent 401638645
summary_wbb.json2024 NCAA W Championship Iowa @ SCevent 401637613
summary_cfb.json2025 CFB National Championship OSU @ NDevent 401677192

Team-scoped + league-wide endpoints (28 — 4 endpoints × 7 leagues)​

Cross-league parity captures for parse_team_roster, parse_team_schedule, parse_news, parse_injuries — one representative team per league. NHL fixtures use the hockey/nhl slug (ESPN's view); the modern api-web.nhle.com NHL data lives under tests/fixtures/nhl_api_web/.

EndpointNBAMLBNFLNHLWNBAMBBWBBCFB
team_rosterLAL (13)NYY (10)KC (12)EDM (22)NYL (20)Duke (150)UConn (41)Alabama (333)
team_scheduleLALNYYKCEDMNYLDukeUConnAlabama
newsNBA-wideMLB-wideNFL-wideNHL-wideWNBA-wideMBB-wideWBB-wideCFB-wide
injuriesNBA-wideMLB-wideNFL-wideNHL-wideWNBA-wide(empty)(empty)CFB-wide

Shape divergence captured: MBB/WBB league-wide injuries return empty payloads because ESPN doesn't publish them; NHL/CFB schedules sometimes return empty because of off-season (NHL May, CFB May). The parsers handle all these as zero-row frames.

Core v2 single + list endpoints (7)​

FileEndpoint
venues_core_nba.jsonCore v2 venues?limit=5 — 5 $ref-only items
events_core_nba.jsonCore v2 events?limit=3 — 1 $ref item (off-season)
athlete_statslog_lbj.jsonCore v2 athletes/1966/statisticslog — LeBron, 23 entries

MLB Stats API — tests/fixtures/mlb_api/ (8 captures)​

Captured from statsapi.mlb.com. Used by tests/test_mlb_api_parsers.py.

FileEndpointNotes
schedule_2024_09_29.json/schedule?sportId=1&date=2024-09-2915 games, final regular-season day
teams_2024.json/teams?sportId=1&season=202430 MLB teams
team_roster_yankees_2024.json/teams/147/roster?season=2024NYY ~54 players
standings_2024.json/standings?leagueId=103,104&season=20246 divisions × 5 teams
person_stats_judge_2024.json/people/592450/stats?stats=season&season=2024Aaron Judge season splits
venues_active.json/venues?activeStatus=Y1,646 active venues
sports.json/sports20 sport IDs
divisions.json/divisions61 divisions

NHL api-web — tests/fixtures/nhl_api_web/ (17 captures)​

Captured from api-web.nhle.com/v1/. Used by tests/test_nhl_api_web_parsers.py. Most game-center fixtures focus on the 2024 Stanley Cup Final G7 (game 2023030417) so the boxscore / pbp / landing / right-rail captures all cross-reference.

FileEndpoint
pbp_2024_scf_g7.json/gamecenter/2023030417/play-by-play — 331 plays
boxscore_2024_scf_g7.json/gamecenter/2023030417/boxscore
landing_2024_scf_g7.json/gamecenter/2023030417/landing
right_rail_2024_scf_g7.json/gamecenter/2023030417/right-rail — 6 sub-frames
schedule_2024_06_24.json/schedule/2024-06-24
score_2024_06_24.json/score/2024-06-24
scoreboard_now.json/scoreboard/now
standings_now.json/standings/now — 32 teams × 84 cols
standings_season.json/standings-season — 108 NHL seasons
club_schedule_edm_2024.json/club-schedule-season/EDM/20232024
club_stats_edm_2024.json/club-stats/EDM/20232024/2
roster_edm_2024.json/roster/EDM/20232024
player_mcdavid_landing.json/player/8478402/landing — 130-col profile
player_mcdavid_gamelog.json/player/8478402/game-log/20232024/2 — 76 games
skater_leaders_now.json/skater-stats-leaders/current?categories=points&limit=10
goalie_leaders_now.json/goalie-stats-leaders/current?categories=wins&limit=10
draft_picks_2024_r1.json/draft/picks/2024/1 — 32 first-round picks

NHL EDGE — tests/fixtures/nhl_edge/ (7 captures)​

Captured from api-web.nhle.com/v1/edge/*. Used by tests/test_nhl_edge_parsers.py. Player-tracking / Statcast-style deep dives focused on Connor McDavid + an EDM/EDG team comparison.

FileEndpoint
skater_detail.json/edge/skater-detail/8478402/20242025/2 — McDavid
skater_zone_time.json/edge/skater-zone-time/8478402/20242025/2 — 4-row strength splits
skater_shot_speed.json/edge/skater-shot-speed-detail/8478402/20242025/2 — + 10-row hardestShots
team_detail.json/edge/team-detail/22/20242025/2 — EDM
team_shot_loc.json/edge/team-shot-location-detail/22/20242025/2 — 17-cell grid + 12-row totals
goalie_detail.json/edge/goalie-detail/8480313/20242025/2 — Stuart Skinner
goalie_shot_loc.json/edge/goalie-shot-location-detail/8480313/20242025/2 — 17-cell grid + 4-row totals

NHL Stats REST — tests/fixtures/nhl_stats_rest/ (8 captures)​

Captured from api.nhle.com/stats/rest/en/. Used by tests/test_nhl_aux_parsers.py (shared with the Records fixtures).

FileEndpointNotes
stats_rest_season.json/season108 NHL seasons (1917-18 → present)
stats_rest_franchise.json/franchise40 franchises (active + defunct)
stats_rest_country.json/country49 countries with NHL player history
stats_rest_glossary.json/glossary321 stat definitions
stats_rest_config.json/configMeta (no data key → 0 rows)
stats_rest_skater_summary_2024.json/skater/summary?cayenneExp=…Top 20 by points, 2023-24 regular season
stats_rest_goalie_summary_2024.json/goalie/summary?…Top 10 goalies
stats_rest_team_summary_2024.json/team/summary?…All 32 teams

NHL Records — tests/fixtures/nhl_records/ (6 captures)​

Captured from records.nhl.com/site/api/. Used by tests/test_nhl_aux_parsers.py.

FileEndpointNotes
records_franchise.json/franchise40 franchises
records_franchise_team_totals.json/franchise-team-totals?limit=1010 of 120
records_coach.json/coach?limit=1010 of 574
records_draft.json/draft?limit=1010 of 13,152
records_player_records.json/player?limit=1010 of 23,313
records_attendance.json/attendance80 years of attendance

Maintenance​

To refresh a fixture, re-capture from the URL in the directory's README.md and overwrite the file (stems must match what the test loaders expect). The parser tests are payload-agnostic so newer captures will keep working as long as the schema doesn't change — when a schema does drift, the offline tests catch it immediately and the weekly cron drift detector (.github/workflows/live-tests-cron.yml) catches API-level changes even when the repo is otherwise quiet.

See also​