steam-backlog-enforcer/steam_backlog_enforcer/tests
Krzysztof kuhy Rudnicki 2ff39edca4 Bring _web_dataset.py under the 250-line cap — cap campaign complete
_web_dataset.py  436 -> 178  + _web_models, _web_games, _web_pace

The six dataclasses (WebGame, WebStateInfo, WebDefaults, DefaultSummary,
PaceVsHLTB, WebDataset) are used by BOTH the parent and the helpers, so they
go to their own leaf model module that both import. Leaving them in the
parent is what created a circular import and broke ./run.sh on the previous
attempt.

All public names plus the seven private helpers tests reach for are
re-exported from _web_dataset via __all__, so import paths are unchanged.
Test patch targets split per class: TestBuildWebDataset, TestDatasetToPayload
and TestDatasetEndpoint still patch load_snapshot on _web_dataset (that
function did not move) while their cache patches move to _web_games.

`bash scripts/check_file_length.sh --all` now exits 0 — no file in the repo
is over 250 lines. 1344 tests, 100.00% coverage. Verified live: ./run.sh
status works and build_web_dataset projects all 958 games with pace and
summary sections intact; service at 0 restarts.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016A1EYiv7e7HGhET84oa9M3
2026-08-24 16:08:12 +02:00
..
__init__.py test: achieve 100% branch coverage across all python_pkg packages 2026-03-21 17:51:36 +01:00
_isolate_playtime.py Split total-block, playtime and MCP by responsibility 2026-08-23 20:52:08 +02:00
_main_helpers.py Allow abandoning a manual pick at any time; cap picks at 2 2026-08-24 15:41:32 +02:00
_no_subprocess.py Stop the enforcer launching Steam and notifications as root 2026-08-24 13:55:44 +02:00
_total_block_paths.py Split total-block, playtime and MCP by responsibility 2026-08-23 20:52:08 +02:00
conftest.py Split _actions, _whitelist, _cmd_done and hltb under the cap 2026-08-24 14:55:57 +02:00
test_actions_abandon_manual_pick.py Allow abandoning a manual pick at any time; cap picks at 2 2026-08-24 15:41:32 +02:00
test_actions_status_payload.py Split _actions, _whitelist, _cmd_done and hltb under the cap 2026-08-24 14:55:57 +02:00
test_actions.py Allow abandoning a manual pick at any time; cap picks at 2 2026-08-24 15:41:32 +02:00
test_cmd_done_part2.py chore: set up as standalone repo 2026-05-28 07:21:29 +02:00
test_cmd_playtime.py Split total-block, playtime and MCP by responsibility 2026-08-23 20:52:08 +02:00
test_config_interactive_setup.py Bring every test file under the 250-line cap 2026-08-24 14:16:08 +02:00
test_config.py Bring every test file under the 250-line cap 2026-08-24 14:16:08 +02:00
test_desktop_env.py Stop the enforcer launching Steam and notifications as root 2026-08-24 13:55:44 +02:00
test_desktop_session_gating.py Stop the enforcer launching Steam and notifications as root 2026-08-24 13:55:44 +02:00
test_desktop_user_cmd.py Stop the enforcer launching Steam and notifications as root 2026-08-24 13:55:44 +02:00
test_do_enforce.py Stop the enforcer launching Steam and notifications as root 2026-08-24 13:55:44 +02:00
test_enforce_loop_part2.py Stop the enforcer launching Steam and notifications as root 2026-08-24 13:55:44 +02:00
test_enforce_loop_part3.py Stop the enforcer launching Steam and notifications as root 2026-08-24 13:55:44 +02:00
test_enforce_loop.py Stop the enforcer launching Steam and notifications as root 2026-08-24 13:55:44 +02:00
test_enforce_steps.py Stop the enforcer launching Steam and notifications as root 2026-08-24 13:55:44 +02:00
test_enforcer_part2.py feat: add block-gaming command (Stage 4) + guard-lib migration cleanup 2026-07-04 11:45:54 +02:00
test_enforcer.py Stop the enforcer launching Steam and notifications as root 2026-08-24 13:55:44 +02:00
test_ensure_debug_port.py Stop the enforcer launching Steam and notifications as root 2026-08-24 13:55:44 +02:00
test_ensure_steam_running.py Stop the enforcer launching Steam and notifications as root 2026-08-24 13:55:44 +02:00
test_game_install_guard.py Re-arm the no-library warning before install_game's early return 2026-08-24 14:04:54 +02:00
test_game_install_part2.py Stop the enforcer launching Steam and notifications as root 2026-08-24 13:55:44 +02:00
test_game_install_part3.py Stop the enforcer launching Steam and notifications as root 2026-08-24 13:55:44 +02:00
test_game_install.py Stop the enforcer launching Steam and notifications as root 2026-08-24 13:55:44 +02:00
test_game_names.py Stop the enforcer launching Steam and notifications as root 2026-08-24 13:55:44 +02:00
test_hltb_build_search_payload.py Bring the HLTB modules under the 250-line cap 2026-08-24 15:23:13 +02:00
test_hltb_confidence_helpers.py Split _actions, _whitelist, _cmd_done and hltb under the cap 2026-08-24 14:55:57 +02:00
test_hltb_detail_extract_comp100_avg_and_high.py Bring the HLTB modules under the 250-line cap 2026-08-24 15:23:13 +02:00
test_hltb_detail_fetch_leisure_times_save_interval.py Bring the HLTB modules under the 250-line cap 2026-08-24 15:23:13 +02:00
test_hltb_detail_fetch_leisure_times.py Bring the HLTB modules under the 250-line cap 2026-08-24 15:23:13 +02:00
test_hltb_detail_process_game_detail.py Bring the HLTB modules under the 250-line cap 2026-08-24 15:23:13 +02:00
test_hltb_detail.py Bring the HLTB modules under the 250-line cap 2026-08-24 15:23:13 +02:00
test_hltb_fetch_hltb_detail_missing.py Split _actions, _whitelist, _cmd_done and hltb under the cap 2026-08-24 14:55:57 +02:00
test_hltb_part2.py Split _actions, _whitelist, _cmd_done and hltb under the cap 2026-08-24 14:55:57 +02:00
test_hltb_part3.py chore: set up as standalone repo 2026-05-28 07:21:29 +02:00
test_hltb_pick_best_hltb_entry_alias_exact_match_beats_spinoff.py Bring the HLTB modules under the 250-line cap 2026-08-24 15:23:13 +02:00
test_hltb_pick_best_hltb_entry.py Bring the HLTB modules under the 250-line cap 2026-08-24 15:23:13 +02:00
test_hltb_search_extract_leisure_hours.py Bring the HLTB modules under the 250-line cap 2026-08-24 15:23:13 +02:00
test_hltb_search_fetch_batch_hltb.py Bring every test file under the 250-line cap 2026-08-24 14:16:08 +02:00
test_hltb_search_part2.py Bring the HLTB modules under the 250-line cap 2026-08-24 15:23:13 +02:00
test_hltb_search_zero_comp_100_skipped.py Bring every test file under the 250-line cap 2026-08-24 14:16:08 +02:00
test_hltb_search.py Bring every test file under the 250-line cap 2026-08-24 14:16:08 +02:00
test_hltb.py Bring the HLTB modules under the 250-line cap 2026-08-24 15:23:13 +02:00
test_library_hider_ops.py Stop the enforcer launching Steam and notifications as root 2026-08-24 13:55:44 +02:00
test_library_hider_part2.py Stop the enforcer launching Steam and notifications as root 2026-08-24 13:55:44 +02:00
test_library_hider.py Stop the enforcer launching Steam and notifications as root 2026-08-24 13:55:44 +02:00
test_main_abandon.py Allow abandoning a manual pick at any time; cap picks at 2 2026-08-24 15:41:32 +02:00
test_main_dispatch_extra.py Split main.py (1076 lines) into a main/ package 2026-08-23 19:56:34 +02:00
test_main_dispatch.py Split main.py (1076 lines) into a main/ package 2026-08-23 19:56:34 +02:00
test_main_done.py Split _actions, _whitelist, _cmd_done and hltb under the cap 2026-08-24 14:55:57 +02:00
test_main_entrypoint.py Split main.py (1076 lines) into a main/ package 2026-08-23 19:56:34 +02:00
test_main_install.py Split main.py (1076 lines) into a main/ package 2026-08-23 19:56:34 +02:00
test_main_misc_gating.py Split main.py (1076 lines) into a main/ package 2026-08-23 19:56:34 +02:00
test_main_misc.py Split main.py (1076 lines) into a main/ package 2026-08-23 19:56:34 +02:00
test_main_part2.py Split _actions, _whitelist, _cmd_done and hltb under the cap 2026-08-24 14:55:57 +02:00
test_main_part2b.py Split _actions, _whitelist, _cmd_done and hltb under the cap 2026-08-24 14:55:57 +02:00
test_main_part2c.py Split _actions, _whitelist, _cmd_done and hltb under the cap 2026-08-24 14:55:57 +02:00
test_main_pick_cap.py Split main.py (1076 lines) into a main/ package 2026-08-23 19:56:34 +02:00
test_main_pick_manual.py Split main.py (1076 lines) into a main/ package 2026-08-23 19:56:34 +02:00
test_main_picks.py Split main.py (1076 lines) into a main/ package 2026-08-23 19:56:34 +02:00
test_main_shared.py Split main.py (1076 lines) into a main/ package 2026-08-23 19:56:34 +02:00
test_main_status.py Allow abandoning a manual pick at any time; cap picks at 2 2026-08-24 15:41:32 +02:00
test_mcp_actions.py Allow abandoning a manual pick at any time; cap picks at 2 2026-08-24 15:41:32 +02:00
test_mcp_gaming_time.py Split total-block, playtime and MCP by responsibility 2026-08-23 20:52:08 +02:00
test_mcp.py Split total-block, playtime and MCP by responsibility 2026-08-23 20:52:08 +02:00
test_pacman.py Split total-block, playtime and MCP by responsibility 2026-08-23 20:52:08 +02:00
test_playtime_block_part2.py Split total-block, playtime and MCP by responsibility 2026-08-23 20:52:08 +02:00
test_playtime_block.py Split total-block, playtime and MCP by responsibility 2026-08-23 20:52:08 +02:00
test_playtime_cutoff.py Split total-block, playtime and MCP by responsibility 2026-08-23 20:52:08 +02:00
test_playtime_kill.py Split total-block, playtime and MCP by responsibility 2026-08-23 20:52:08 +02:00
test_playtime_part2.py Split total-block, playtime and MCP by responsibility 2026-08-23 20:52:08 +02:00
test_playtime_procs.py Split total-block, playtime and MCP by responsibility 2026-08-23 20:52:08 +02:00
test_playtime_proctree.py Split total-block, playtime and MCP by responsibility 2026-08-23 20:52:08 +02:00
test_playtime_tick.py Split total-block, playtime and MCP by responsibility 2026-08-23 20:52:08 +02:00
test_playtime.py Split total-block, playtime and MCP by responsibility 2026-08-23 20:52:08 +02:00
test_polls_tracking_backfill_polls_for_finished.py Bring every test file under the 250-line cap 2026-08-24 14:16:08 +02:00
test_polls_tracking_part2.py Split steam_api and _scanning_confidence under the cap 2026-08-24 14:25:43 +02:00
test_polls_tracking_report_assigned_confidence.py Bring every test file under the 250-line cap 2026-08-24 14:16:08 +02:00
test_polls_tracking_report_poll_confidence_chosen_zero_polls_report_poll_confidence_chosen_equals_min.py Split steam_api and _scanning_confidence under the cap 2026-08-24 14:25:43 +02:00
test_polls_tracking_report_poll_confidence_chosen_zero_polls.py Split steam_api and _scanning_confidence under the cap 2026-08-24 14:25:43 +02:00
test_polls_tracking.py Bring every test file under the 250-line cap 2026-08-24 14:16:08 +02:00
test_protondb_fetch_batch.py Bring every test file under the 250-line cap 2026-08-24 14:16:08 +02:00
test_protondb_fetch_one.py Bring every test file under the 250-line cap 2026-08-24 14:16:08 +02:00
test_protondb.py Bring every test file under the 250-line cap 2026-08-24 14:16:08 +02:00
test_scanning_cached_confidence_overlay_avoids_refetch.py Bring _stats.py and scanning.py under the 250-line cap 2026-08-24 16:00:54 +02:00
test_scanning_confidence_helpers_pick_next_shortest_candidate_no_echo_whe.py Bring _stats.py and scanning.py under the 250-line cap 2026-08-24 16:00:54 +02:00
test_scanning_confidence_helpers.py Bring _stats.py and scanning.py under the 250-line cap 2026-08-24 16:00:54 +02:00
test_scanning_part2.py Bring _stats.py and scanning.py under the 250-line cap 2026-08-24 16:00:54 +02:00
test_scanning_part3.py Bring _stats.py and scanning.py under the 250-line cap 2026-08-24 16:00:54 +02:00
test_scanning_part4.py Bring _stats.py and scanning.py under the 250-line cap 2026-08-24 16:00:54 +02:00
test_scanning_pick_next_game_sequential.py Bring _stats.py and scanning.py under the 250-line cap 2026-08-24 16:00:54 +02:00
test_scanning_pick_next_game_unknown_hours.py Bring _stats.py and scanning.py under the 250-line cap 2026-08-24 16:00:54 +02:00
test_scanning_pick_next_game.py Bring _stats.py and scanning.py under the 250-line cap 2026-08-24 16:00:54 +02:00
test_scanning.py Bring _stats.py and scanning.py under the 250-line cap 2026-08-24 16:00:54 +02:00
test_stats_cmd_stats_refilter_called_when_ensure_rush_data_re.py Bring every test file under the 250-line cap 2026-08-24 14:16:08 +02:00
test_stats_cmd_stats.py Bring every test file under the 250-line cap 2026-08-24 14:16:08 +02:00
test_stats_ensure_rush_data.py Bring _stats.py and scanning.py under the 250-line cap 2026-08-24 16:00:54 +02:00
test_stats_print_player_speed_scenario.py Bring every test file under the 250-line cap 2026-08-24 14:16:08 +02:00
test_stats_print_worst_example.py Bring _stats.py and scanning.py under the 250-line cap 2026-08-24 16:00:54 +02:00
test_stats_refresh_recently_played_completions.py Bring _stats.py and scanning.py under the 250-line cap 2026-08-24 16:00:54 +02:00
test_stats_sum_hours.py Bring _stats.py and scanning.py under the 250-line cap 2026-08-24 16:00:54 +02:00
test_stats_unplayable_rating_counts_linux_skipped.py Bring _stats.py and scanning.py under the 250-line cap 2026-08-24 16:00:54 +02:00
test_stats.py Bring _stats.py and scanning.py under the 250-line cap 2026-08-24 16:00:54 +02:00
test_steam_api_steam_a_p_i_client.py Split steam_api and _scanning_confidence under the cap 2026-08-24 14:25:43 +02:00
test_steam_api.py Bring every test file under the 250-line cap 2026-08-24 14:16:08 +02:00
test_steam_launch_lifecycle.py Stop the enforcer launching Steam and notifications as root 2026-08-24 13:55:44 +02:00
test_steam_restart.py Stop the enforcer launching Steam and notifications as root 2026-08-24 13:55:44 +02:00
test_store_blocker_block_via_hosts_install.py Point the iptables tests at the module that now holds the code 2026-08-24 15:07:58 +02:00
test_store_blocker_part2.py Split store_blocker along its one-way call boundaries 2026-08-24 15:06:15 +02:00
test_store_blocker_unblock_store.py Bring every test file under the 250-line cap 2026-08-24 14:16:08 +02:00
test_store_blocker.py Bring every test file under the 250-line cap 2026-08-24 14:16:08 +02:00
test_total_block_hosts.py Split total-block, playtime and MCP by responsibility 2026-08-23 20:52:08 +02:00
test_total_block_iptables.py Split total-block, playtime and MCP by responsibility 2026-08-23 20:52:08 +02:00
test_total_block_lifecycle.py Split total-block, playtime and MCP by responsibility 2026-08-23 20:52:08 +02:00
test_total_block_purge.py Split total-block, playtime and MCP by responsibility 2026-08-23 20:52:08 +02:00
test_total_block_remnants.py Split total-block, playtime and MCP by responsibility 2026-08-23 20:52:08 +02:00
test_total_block.py Split total-block, playtime and MCP by responsibility 2026-08-23 20:52:08 +02:00
test_update_restart_guard.py Stop the enforcer launching Steam and notifications as root 2026-08-24 13:55:44 +02:00
test_web_dataset_build_games.py Bring _web_dataset.py under the 250-line cap — cap campaign complete 2026-08-24 16:08:12 +02:00
test_web_dataset_compute_pace_vs_h_l_t_b_both_rush_and_leisure_interpolation_comp.py Bring every test file under the 250-line cap 2026-08-24 14:16:08 +02:00
test_web_dataset_compute_pace_vs_h_l_t_b.py Bring every test file under the 250-line cap 2026-08-24 14:16:08 +02:00
test_web_dataset_count_complete_since_start.py Bring every test file under the 250-line cap 2026-08-24 14:16:08 +02:00
test_web_dataset_dataset_to_payload.py Bring _web_dataset.py under the 250-line cap — cap campaign complete 2026-08-24 16:08:12 +02:00
test_web_dataset.py Bring every test file under the 250-line cap 2026-08-24 14:16:08 +02:00
test_web_server.py Bring _web_dataset.py under the 250-line cap — cap campaign complete 2026-08-24 16:08:12 +02:00
test_whitelist_add_pending_exception.py Bring every test file under the 250-line cap 2026-08-24 14:16:08 +02:00
test_whitelist_immutable_flag_is_append_audit_log.py Split _actions, _whitelist, _cmd_done and hltb under the cap 2026-08-24 14:55:57 +02:00
test_whitelist_immutable_flag_is.py Split _actions, _whitelist, _cmd_done and hltb under the cap 2026-08-24 14:55:57 +02:00
test_whitelist.py Split _actions, _whitelist, _cmd_done and hltb under the cap 2026-08-24 14:55:57 +02:00