Skip to content

test(infra) Pinball Brothers scraper-pipeline integration tests#44

Merged
jkeeley2073 merged 1 commit into
mainfrom
Dev-PbScraperTestInfra
May 3, 2026
Merged

test(infra) Pinball Brothers scraper-pipeline integration tests#44
jkeeley2073 merged 1 commit into
mainfrom
Dev-PbScraperTestInfra

Conversation

@jkeeley2073
Copy link
Copy Markdown
Contributor

Summary

Backfill of the PR #41 family-wide scraper-pipeline integration test
template for the Pinball Brothers scraper. Five new tests pin yield
order with full provenance, the gate-vs-wire URL equality invariant,
per-page failure isolation, discovery-failure abort, and
PolitenessException propagation on both Acquire and Report paths.

PB is a SINGLE-yield scraper (.Game only — game pages contain no
firmware downloads or other linkable assets) so unlike the CGC
proof-of-concept the tests assert .Game order only and verify
.Link is null on every yielded item. Discovery is paginated WP-REST
JSON at /wp-json/wp/v2/pages?per_page=N&page=M, so the failure
isolation test exercises an in-batch malformed page (slug equals the
suffix exactly so the canonical slug is empty → extractor returns
null → siblings still yield) rather than a per-page HTTP failure
since per-game extraction is pure (no HTTP).

No production code changed — only the new test file and a single
CHANGELOG bullet clustered with the other backfill bullets.

Test Plan

  • dotnet build -nologo -v:m — 0 warnings, 0 errors
  • dotnet test --filter "FullyQualifiedName~PbGamePageScraperTests"
    5 passed, 0 failed
  • dotnet test (full suite) — 435 passed, 0 failed (was 430 baseline)

Out of Scope

Six other scraper backfills (JJP / BoF / Multimorphic / AP / Spooky /
Stern.Manuals) running in parallel worktrees as separate PRs.

Checklist

  • CI is green (build + test + coverage + CodeQL + sanitization)
  • PR title follows the Conventional Commits format above
  • If this is a new architectural decision, an ADR has been added under docs/adr/
  • If user-visible behavior changes, README.md and/or docs/ are updated in the same PR
  • If a memory in ~/.claude/projects/c--projects-PinballWizard/memory/ is now stale, it has been updated or removed in the same PR
  • No TODO / FIXME / commented-out code committed
  • No new entries in <NoWarn> without a comment explaining why and the removal criterion

Pre-push self-audit (additive PRs)

Step 0 — /local-review (qualitative)

  • Ran /local-review and addressed every 🔴 finding before push
  • Local review outcome: deferred to human reviewer (run at merge time) — this is one of seven parallel backfill PRs all using the same template that already passed /local-review in PR test(infra) family-wide scraper-pipeline test infrastructure #41; the human reviewer runs the qualitative pass once at merge time.

Step 1 — Mechanical checklist

  • Every new *Options property has at least one real getter call in src/N/A (no options added; tests reuse existing PinballBrothersOptions)
  • Sibling-diffed against the closest existing implementation — mirrored CgcGamePageScraperTests line-for-line where applicable; PB-specific deltas (single-yield, single-batch WP-REST discovery, pure per-game extract) called out in the test docstring and per-test comments
  • No bare catch { } — none added (test file contains no catch clauses; only Assert.ThrowsAsync<PolitenessException> propagation assertions)
  • New ISourceScraper? — N/A (PB scraper exists; tests only)
  • Tests assert behavior, not just structure — happy-path asserts game count + titles + slugs + provenance; per-page-failure fixture actually contains a malformed page and asserts it's missing from output; discovery-failure asserts empty yield; politeness tests assert zero requests after gate throw
  • Build is zero-warning — confirmed: 0 Warning(s) 0 Error(s)
  • git log -1 --format='%an <%ae>' shows personal noreply — confirmed: Jim Keeley <94459922+jkeeley2073@users.noreply.github.com>

Backfill of the PR #41 template across the family. 5 tests covering
happy-path with full provenance + gate-vs-wire URL equality, per-page
failure isolation, discovery failure, PolitenessException on both Acquire
and Report. Single-yield (.Game only).

Pre-push audit: 7-item mechanical (all pass). /local-review deferred to
human reviewer at merge time.
@jkeeley2073 jkeeley2073 added the claude-code Generated with Claude Code label May 3, 2026
@jkeeley2073 jkeeley2073 merged commit c3511ab into main May 3, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

claude-code Generated with Claude Code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant