test(infra) Pinball Brothers scraper-pipeline integration tests#44
Merged
Conversation
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
PolitenessExceptionpropagation on both Acquire and Report paths.PB is a SINGLE-yield scraper (
.Gameonly — game pages contain nofirmware downloads or other linkable assets) so unlike the CGC
proof-of-concept the tests assert
.Gameorder only and verify.Linkis null on every yielded item. Discovery is paginated WP-RESTJSON at
/wp-json/wp/v2/pages?per_page=N&page=M, so the failureisolation 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 errorsdotnet 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
docs/adr/README.mdand/ordocs/are updated in the same PR~/.claude/projects/c--projects-PinballWizard/memory/is now stale, it has been updated or removed in the same PRTODO/FIXME/ commented-out code committed<NoWarn>without a comment explaining why and the removal criterionPre-push self-audit (additive PRs)
Step 0 —
/local-review(qualitative)/local-reviewand addressed every 🔴 finding before push/local-reviewin 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
*Optionsproperty has at least one real getter call insrc/— N/A (no options added; tests reuse existingPinballBrothersOptions)CgcGamePageScraperTestsline-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 commentscatch { }— none added (test file contains nocatchclauses; onlyAssert.ThrowsAsync<PolitenessException>propagation assertions)ISourceScraper? — N/A (PB scraper exists; tests only)0 Warning(s) 0 Error(s)git log -1 --format='%an <%ae>'shows personal noreply — confirmed:Jim Keeley <94459922+jkeeley2073@users.noreply.github.com>