From 09274e039c3702ef5095aba99cadacb388520f7f Mon Sep 17 00:00:00 2001 From: Eric Wagoner Date: Sat, 1 Aug 2026 14:09:13 -0400 Subject: [PATCH] Photo-title fixture set + resolve baseline; language-only cues skip fetch MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Data-driven stub XML for all 27 extracted titles (searches incl. empty results for the long Avalon Hill/SPI box titles, truncated-head retry queries for later, tie-break stats with publisher links, version lists aligned with the real collection objectids). Language-only cues no longer trigger a versions fetch — language can't reach the plausibility threshold alone, so the request would always be wasted; it still scores when stronger cues exist. Baseline resolve: 22 auto, 1 ambiguous (Wiz-War editions), 4 unmatched (the long box titles — next commit). Co-Authored-By: Claude Fable 5 --- data/matches.csv | 28 ++ scripts/write_photo_fixtures.py | 351 ++++++++++++++++++ src/bggpipe/resolve.py | 11 +- ...rdgame-2Cboardgameexpansion_8996b7d5fe.xml | 1 + ...oic-Age---Featuring-New-Civ_8486af3c6d.xml | 1 + ...oic-Age-type=boardgame-2Cbo_1f14c01996.xml | 1 + ...rdgame-2Cboardgameexpansion_aca1fe8ceb.xml | 1 + ...rdgame-2Cboardgameexpansion_877bb1bc86.xml | 1 + ...rdgame-2Cboardgameexpansion_b1f230622c.xml | 1 + ...rdgame-2Cboardgameexpansion_782f1326dc.xml | 1 + ...of-History-8000-BC-to-250-B_6dfe500fb4.xml | 1 + ...rdgame-2Cboardgameexpansion_481c867f49.xml | 1 + ...rdgame-2Cboardgameexpansion_dbefe5359a.xml | 1 + ...rdgame-2Cboardgameexpansion_848554ec74.xml | 1 + ...rdgame-2Cboardgameexpansion_154ea686d4.xml | 1 + ...rdgame-2Cboardgameexpansion_c8073100d5.xml | 1 + ...rdgame-2Cboardgameexpansion_e688e8fb3c.xml | 1 + ...rdgame-2Cboardgameexpansion_9c49c5766f.xml | 1 + ...rdgame-2Cboardgameexpansion_d7b66e2720.xml | 1 + ...rdgame-2Cboardgameexpansion_f29706aacf.xml | 1 + ...rdgame-2Cboardgameexpansion_668671d8a7.xml | 1 + ...rdgame-2Cboardgameexpansion_fcff3e9f9a.xml | 1 + ...rdgame-2Cboardgameexpansion_7ce024e973.xml | 1 + ...rdgame-2Cboardgameexpansion_398fbd77a5.xml | 1 + ...rdgame-2Cboardgameexpansion_1113df3dae.xml | 1 + ...rdgame-2Cboardgameexpansion_7c9b71b031.xml | 1 + ...rdgame-2Cboardgameexpansion_9de3a82a7b.xml | 1 + ...rdgame-2Cboardgameexpansion_e8b9feea5d.xml | 1 + ...rdgame-2Cboardgameexpansion_2403c9a3c0.xml | 1 + ...rdgame-2Cboardgameexpansion_0be5b731c6.xml | 1 + ...rdgame-2Cboardgameexpansion_1548147928.xml | 1 + ...in-the-25th-Century-type=bo_d1ea14fbd7.xml | 1 + ...rdgame-2Cboardgameexpansion_e4d139c3af.xml | 1 + ...rdgame-2Cboardgameexpansion_d3e090d859.xml | 1 + ...rdgame-2Cboardgameexpansion_5e60175c58.xml | 1 + ...rdgame-2Cboardgameexpansion_2c8b74ea84.xml | 1 + ...ng_id=1218-2C104710-stats=1_9ac6609f5e.xml | 1 + .../thing_id=1339-versions=1_76fffe61e6.xml | 1 + .../thing_id=177-versions=1_a50b6534c2.xml | 1 + .../thing_id=193621-versions=1_b0b8e177ce.xml | 1 + .../thing_id=224-versions=1_0965f5986e.xml | 1 + .../thing_id=235096-versions=1_6971fd8efc.xml | 1 + .../thing_id=240-versions=1_720245041a.xml | 1 + .../thing_id=2524-versions=1_a36c20def8.xml | 1 + .../thing_id=2529-versions=1_ae4f4b0f0f.xml | 1 + .../thing_id=26-versions=1_3d488157bf.xml | 1 + .../thing_id=268163-versions=1_73358308e2.xml | 1 + .../thing_id=3090-versions=1_c1e6ddabda.xml | 1 + ...ng_id=3585-2C244115-stats=1_f1c50911dc.xml | 1 + .../thing_id=3585-versions=1_48ead3ba60.xml | 1 + ...thing_id=39-2C40529-stats=1_7fb40b9d38.xml | 1 + .../thing_id=483-versions=1_795d325a85.xml | 1 + .../thing_id=71-versions=1_19169a34ed.xml | 1 + 53 files changed, 434 insertions(+), 6 deletions(-) create mode 100644 data/matches.csv create mode 100644 scripts/write_photo_fixtures.py create mode 100644 tests/fixtures/bgg_cache/search_query=5-MINUTE-DUNGEON-type=boardgame-2Cboardgameexpansion_8996b7d5fe.xml create mode 100644 tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-Game-Expansion-of-the-Heroic-Age---Featuring-New-Civ_8486af3c6d.xml create mode 100644 tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-Game-Expansion-of-the-Heroic-Age-type=boardgame-2Cbo_1f14c01996.xml create mode 100644 tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-type=boardgame-2Cboardgameexpansion_aca1fe8ceb.xml create mode 100644 tests/fixtures/bgg_cache/search_query=Age-of-Renaissance-type=boardgame-2Cboardgameexpansion_877bb1bc86.xml create mode 100644 tests/fixtures/bgg_cache/search_query=Britannia-type=boardgame-2Cboardgameexpansion_b1f230622c.xml create mode 100644 tests/fixtures/bgg_cache/search_query=CAT-CRIMES-type=boardgame-2Cboardgameexpansion_782f1326dc.xml create mode 100644 tests/fixtures/bgg_cache/search_query=CIVILIZATION-Game-of-the-Heroic-Age---The-Dawn-of-History-8000-BC-to-250-B_6dfe500fb4.xml create mode 100644 tests/fixtures/bgg_cache/search_query=CIVILIZATION-Game-of-the-Heroic-Age-type=boardgame-2Cboardgameexpansion_481c867f49.xml create mode 100644 tests/fixtures/bgg_cache/search_query=CIVILIZATION-type=boardgame-2Cboardgameexpansion_dbefe5359a.xml create mode 100644 tests/fixtures/bgg_cache/search_query=COSMIC-ENCOUNTER-type=boardgame-2Cboardgameexpansion_848554ec74.xml create mode 100644 tests/fixtures/bgg_cache/search_query=Cards-Against-Humanity-type=boardgame-2Cboardgameexpansion_154ea686d4.xml create mode 100644 tests/fixtures/bgg_cache/search_query=DOCTOR-WHO-The-Game-of-Time-26-Space-type=boardgame-2Cboardgameexpansion_c8073100d5.xml create mode 100644 tests/fixtures/bgg_cache/search_query=Diplomacy-type=boardgame-2Cboardgameexpansion_e688e8fb3c.xml create mode 100644 tests/fixtures/bgg_cache/search_query=Dungeon-21-type=boardgame-2Cboardgameexpansion_9c49c5766f.xml create mode 100644 tests/fixtures/bgg_cache/search_query=EXPLODING-KITTENS-type=boardgame-2Cboardgameexpansion_d7b66e2720.xml create mode 100644 tests/fixtures/bgg_cache/search_query=FLAT-TOP-type=boardgame-2Cboardgameexpansion_f29706aacf.xml create mode 100644 tests/fixtures/bgg_cache/search_query=Herbaceous-type=boardgame-2Cboardgameexpansion_668671d8a7.xml create mode 100644 tests/fixtures/bgg_cache/search_query=History-of-the-World-type=boardgame-2Cboardgameexpansion_fcff3e9f9a.xml create mode 100644 tests/fixtures/bgg_cache/search_query=Joking-Hazard-type=boardgame-2Cboardgameexpansion_7ce024e973.xml create mode 100644 tests/fixtures/bgg_cache/search_query=PATCH-WORK-type=boardgame-2Cboardgameexpansion_398fbd77a5.xml create mode 100644 tests/fixtures/bgg_cache/search_query=ROYALS-type=boardgame-2Cboardgameexpansion_1113df3dae.xml create mode 100644 tests/fixtures/bgg_cache/search_query=SANTORINI-type=boardgame-2Cboardgameexpansion_7c9b71b031.xml create mode 100644 tests/fixtures/bgg_cache/search_query=SCRAWL-type=boardgame-2Cboardgameexpansion_9de3a82a7b.xml create mode 100644 tests/fixtures/bgg_cache/search_query=SHERIFF-OF-NOTTINGHAM-type=boardgame-2Cboardgameexpansion_e8b9feea5d.xml create mode 100644 tests/fixtures/bgg_cache/search_query=SKIP-BO-type=boardgame-2Cboardgameexpansion_2403c9a3c0.xml create mode 100644 tests/fixtures/bgg_cache/search_query=SORCERER-The-Game-of-Magical-Conflict-type=boardgame-2Cboardgameexpansion_0be5b731c6.xml create mode 100644 tests/fixtures/bgg_cache/search_query=SORCERER-type=boardgame-2Cboardgameexpansion_1548147928.xml create mode 100644 tests/fixtures/bgg_cache/search_query=STARFORCE-ALPHA-CENTAURI-Interstellar-Conflict-in-the-25th-Century-type=bo_d1ea14fbd7.xml create mode 100644 tests/fixtures/bgg_cache/search_query=STARFORCE-ALPHA-type=boardgame-2Cboardgameexpansion_e4d139c3af.xml create mode 100644 tests/fixtures/bgg_cache/search_query=Utter-Nonsense-21-type=boardgame-2Cboardgameexpansion_d3e090d859.xml create mode 100644 tests/fixtures/bgg_cache/search_query=Wiz-War-type=boardgame-2Cboardgameexpansion_5e60175c58.xml create mode 100644 tests/fixtures/bgg_cache/search_query=a-Gentle-Rain-type=boardgame-2Cboardgameexpansion_2c8b74ea84.xml create mode 100644 tests/fixtures/bgg_cache/thing_id=1218-2C104710-stats=1_9ac6609f5e.xml create mode 100644 tests/fixtures/bgg_cache/thing_id=1339-versions=1_76fffe61e6.xml create mode 100644 tests/fixtures/bgg_cache/thing_id=177-versions=1_a50b6534c2.xml create mode 100644 tests/fixtures/bgg_cache/thing_id=193621-versions=1_b0b8e177ce.xml create mode 100644 tests/fixtures/bgg_cache/thing_id=224-versions=1_0965f5986e.xml create mode 100644 tests/fixtures/bgg_cache/thing_id=235096-versions=1_6971fd8efc.xml create mode 100644 tests/fixtures/bgg_cache/thing_id=240-versions=1_720245041a.xml create mode 100644 tests/fixtures/bgg_cache/thing_id=2524-versions=1_a36c20def8.xml create mode 100644 tests/fixtures/bgg_cache/thing_id=2529-versions=1_ae4f4b0f0f.xml create mode 100644 tests/fixtures/bgg_cache/thing_id=26-versions=1_3d488157bf.xml create mode 100644 tests/fixtures/bgg_cache/thing_id=268163-versions=1_73358308e2.xml create mode 100644 tests/fixtures/bgg_cache/thing_id=3090-versions=1_c1e6ddabda.xml create mode 100644 tests/fixtures/bgg_cache/thing_id=3585-2C244115-stats=1_f1c50911dc.xml create mode 100644 tests/fixtures/bgg_cache/thing_id=3585-versions=1_48ead3ba60.xml create mode 100644 tests/fixtures/bgg_cache/thing_id=39-2C40529-stats=1_7fb40b9d38.xml create mode 100644 tests/fixtures/bgg_cache/thing_id=483-versions=1_795d325a85.xml create mode 100644 tests/fixtures/bgg_cache/thing_id=71-versions=1_19169a34ed.xml diff --git a/data/matches.csv b/data/matches.csv new file mode 100644 index 0000000..d3a6353 --- /dev/null +++ b/data/matches.csv @@ -0,0 +1,28 @@ +title_raw,bgg_id,bgg_name,year,type,match_status,version_id,version_name,version_status,candidates_json,version_candidates_json,source_photos +ROYALS,165986,Royals,2014,boardgame,auto,,,version_unknown,"[{""bgg_id"": 165986, ""name"": ""Royals"", ""year"": 2014, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],IMG_4499.jpeg +CAT CRIMES,235096,Cat Crimes,2017,boardgame,auto,360982,English edition,version_auto,"[{""bgg_id"": 235096, ""name"": ""Cat Crimes"", ""year"": 2017, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 360982, ""name"": ""English edition"", ""year"": 2017, ""publishers"": [""ThinkFun""], ""languages"": [""English""], ""score"": 3}]",IMG_4499.jpeg +COSMIC ENCOUNTER,40529,Cosmic Encounter,2008,boardgame,auto,,,version_unknown,"[{""bgg_id"": 39, ""name"": ""Cosmic Encounter"", ""year"": 1977, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 7000, ""rank"": 800}, {""bgg_id"": 40529, ""name"": ""Cosmic Encounter"", ""year"": 2008, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 75000, ""rank"": 150}]",[],IMG_4499.jpeg +SHERIFF OF NOTTINGHAM,157969,Sheriff of Nottingham,2014,boardgame,auto,,,version_unknown,"[{""bgg_id"": 157969, ""name"": ""Sheriff of Nottingham"", ""year"": 2014, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],IMG_4499.jpeg +5 MINUTE DUNGEON,207830,5-Minute Dungeon,2017,boardgame,auto,,,version_unknown,"[{""bgg_id"": 207830, ""name"": ""5-Minute Dungeon"", ""year"": 2017, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],IMG_4499.jpeg +Britannia,240,Britannia,1986,boardgame,auto,25668,Avalon Hill English edition,version_auto,"[{""bgg_id"": 240, ""name"": ""Britannia"", ""year"": 1986, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 25668, ""name"": ""Avalon Hill English edition"", ""year"": 1986, ""publishers"": [""The Avalon Hill Game Co""], ""languages"": [""English""], ""score"": 3}]",IMG_4500.jpeg +CIVILIZATION Game of the Heroic Age - The Dawn of History 8000 BC to 250 BC,,,,,unmatched,,,,[],[],IMG_4500.jpeg +"ADVANCED CIVILIZATION Game Expansion of the Heroic Age - Featuring New Civilization, Commodity, and Calamity Cards",,,,,unmatched,,,,[],[],IMG_4500.jpeg +DOCTOR WHO The Game of Time & Space,3090,Doctor Who: The Game of Time & Space,1980,boardgame,auto,309001,Games Workshop English edition,version_auto,"[{""bgg_id"": 3090, ""name"": ""Doctor Who: The Game of Time & Space"", ""year"": 1980, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 309001, ""name"": ""Games Workshop English edition"", ""year"": 1980, ""publishers"": [""Games Workshop Ltd.""], ""languages"": [""English""], ""score"": 3}]",IMG_4500.jpeg +SORCERER The Game of Magical Conflict,,,,,unmatched,,,,[],[],IMG_4500.jpeg +STARFORCE ALPHA CENTAURI Interstellar Conflict in the 25th Century,,,,,unmatched,,,,[],[],IMG_4500.jpeg +SKIP-BO,1078,Skip-Bo,1967,boardgame,auto,,,version_unknown,"[{""bgg_id"": 1078, ""name"": ""Skip-Bo"", ""year"": 1967, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],IMG_4501.jpeg +a Gentle Rain,268163,A Gentle Rain,2019,boardgame,auto,268164,Bloom Edition,version_auto,"[{""bgg_id"": 268163, ""name"": ""A Gentle Rain"", ""year"": 2019, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 268164, ""name"": ""Bloom Edition"", ""year"": 2021, ""publishers"": [""Mondo Games""], ""languages"": [""English""], ""score"": 3}]",IMG_4501.jpeg +PATCH WORK,163412,Patchwork,2014,boardgame,auto,,,version_unknown,"[{""bgg_id"": 163412, ""name"": ""Patchwork"", ""year"": 2014, ""type"": ""boardgame"", ""exact"": false, ""fuzzy"": 94.7, ""owned"": null, ""rank"": null}]",[],IMG_4501.jpeg +SANTORINI,194655,Santorini,2016,boardgame,auto,,,version_unknown,"[{""bgg_id"": 194655, ""name"": ""Santorini"", ""year"": 2016, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],IMG_4501.jpeg;IMG_4502.jpeg +Utter Nonsense!,181254,Utter Nonsense,2015,boardgame,auto,,,version_unknown,"[{""bgg_id"": 181254, ""name"": ""Utter Nonsense"", ""year"": 2015, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],IMG_4501.jpeg +Cards Against Humanity,50381,Cards Against Humanity,2009,boardgame,auto,,,version_unknown,"[{""bgg_id"": 50381, ""name"": ""Cards Against Humanity"", ""year"": 2009, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],IMG_4501.jpeg +Joking Hazard,193621,Joking Hazard,2016,boardgame,auto,19362101,First edition,version_auto,"[{""bgg_id"": 193621, ""name"": ""Joking Hazard"", ""year"": 2016, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 19362101, ""name"": ""First edition"", ""year"": 2016, ""publishers"": [""Cyanide & Happiness""], ""languages"": [""English""], ""score"": 3}]",IMG_4501.jpeg;IMG_4502.jpeg +EXPLODING KITTENS,172225,Exploding Kittens,2015,boardgame,auto,,,version_unknown,"[{""bgg_id"": 172225, ""name"": ""Exploding Kittens"", ""year"": 2015, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],IMG_4501.jpeg +Herbaceous,195314,Herbaceous,2017,boardgame,auto,,,version_unknown,"[{""bgg_id"": 195314, ""name"": ""Herbaceous"", ""year"": 2017, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],IMG_4502.jpeg +Wiz-War,,,,,ambiguous,,,,"[{""bgg_id"": 1218, ""name"": ""Wiz-War"", ""year"": 1983, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 4000, ""rank"": 2500}, {""bgg_id"": 104710, ""name"": ""Wiz-War"", ""year"": 2012, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": 8000, ""rank"": 1200}]",[],IMG_4502.jpeg +SCRAWL,218866,Scrawl,2017,boardgame,auto,,,version_unknown,"[{""bgg_id"": 218866, ""name"": ""Scrawl"", ""year"": 2017, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],IMG_4502.jpeg +FLAT TOP,2529,Flat Top,1977,boardgame,auto,,,version_unknown,"[{""bgg_id"": 2529, ""name"": ""Flat Top"", ""year"": 1977, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]",[],IMG_4502.jpeg +Diplomacy,483,Diplomacy,1959,boardgame,auto,,,version_ambiguous,"[{""bgg_id"": 483, ""name"": ""Diplomacy"", ""year"": 1959, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 48301, ""name"": ""Avalon Hill 1976 edition"", ""year"": 1976, ""publishers"": [""The Avalon Hill Game Co""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 48302, ""name"": ""Avalon Hill 1999 edition"", ""year"": 1999, ""publishers"": [""The Avalon Hill Game Co""], ""languages"": [""English""], ""score"": 3}]",IMG_4502.jpeg +Age of Renaissance,26,Age of Renaissance,1996,boardgame,auto,2601,Avalon Hill English edition,version_auto,"[{""bgg_id"": 26, ""name"": ""Age of Renaissance"", ""year"": 1996, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 2601, ""name"": ""Avalon Hill English edition"", ""year"": 1996, ""publishers"": [""The Avalon Hill Game Co""], ""languages"": [""English""], ""score"": 3}]",IMG_4502.jpeg +History of the World,224,History of the World,1991,boardgame,auto,22401,Avalon Hill English edition,version_auto,"[{""bgg_id"": 224, ""name"": ""History of the World"", ""year"": 1991, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 22401, ""name"": ""Avalon Hill English edition"", ""year"": 1993, ""publishers"": [""The Avalon Hill Game Co""], ""languages"": [""English""], ""score"": 3}]",IMG_4502.jpeg +Dungeon!,1339,Dungeon!,1975,boardgame,auto,,,version_ambiguous,"[{""bgg_id"": 1339, ""name"": ""Dungeon!"", ""year"": 1975, ""type"": ""boardgame"", ""exact"": true, ""fuzzy"": 100.0, ""owned"": null, ""rank"": null}]","[{""version_id"": 133901, ""name"": ""TSR first edition"", ""year"": 1975, ""publishers"": [""TSR""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 133902, ""name"": ""TSR second edition"", ""year"": 1980, ""publishers"": [""TSR""], ""languages"": [""English""], ""score"": 3}, {""version_id"": 133903, ""name"": ""TSR New Dungeon edition"", ""year"": 1989, ""publishers"": [""TSR""], ""languages"": [""English""], ""score"": 3}]",IMG_4502.jpeg diff --git a/scripts/write_photo_fixtures.py b/scripts/write_photo_fixtures.py new file mode 100644 index 0000000..37b34a3 --- /dev/null +++ b/scripts/write_photo_fixtures.py @@ -0,0 +1,351 @@ +"""Stub BGG XML fixtures for the 27 titles extracted from the real shelf +photos, aligned with the objectids in the real collection snapshots. + +Like write_stub_fixtures.py these are hand-written approximations (BGG's +API is locked until the registration is approved). They cover: the plain +search per title, empty results for the long Avalon Hill/SPI box titles +(what real search does with them), the truncated-head retry searches, +tie-break stats (Cosmic Encounter, Wiz-War, Sorcerer), and version lists +for every title with publisher/edition/year cues. Once BGG_API_TOKEN +exists: delete the cache dirs and re-run resolve/record_fixtures to +replace all of this with real recordings. + +Usage: uv run python scripts/write_photo_fixtures.py +""" + +from __future__ import annotations + +from pathlib import Path + +from bggpipe.bgg_client import cache_key + +TARGETS = (Path("tests/fixtures/bgg_cache"), Path("data/bgg_cache")) +SEARCH_TYPES = "boardgame,boardgameexpansion" + +BG, EXP = "boardgame", "boardgameexpansion" + +# (bgg_id, name, year, type, name_type) +SEARCHES: dict[str, list[tuple]] = { + "ROYALS": [(165986, "Royals", 2014, BG, "primary")], + "CAT CRIMES": [(235096, "Cat Crimes", 2017, BG, "primary")], + "COSMIC ENCOUNTER": [ + (39, "Cosmic Encounter", 1977, BG, "primary"), + (40529, "Cosmic Encounter", 2008, BG, "primary"), + ], + "SHERIFF OF NOTTINGHAM": [ + (157969, "Sheriff of Nottingham", 2014, BG, "primary"), + (289411, "Sheriff of Nottingham (2nd Edition)", 2020, BG, "primary"), + ], + "5 MINUTE DUNGEON": [(207830, "5-Minute Dungeon", 2017, BG, "primary")], + "Britannia": [(240, "Britannia", 1986, BG, "primary")], + # BGG search finds nothing for the full transcribed box titles + "CIVILIZATION Game of the Heroic Age - The Dawn of History 8000 BC to 250 BC": [], + "CIVILIZATION Game of the Heroic Age": [], + "CIVILIZATION": [ + (71, "Civilization", 1980, BG, "primary"), + (170416, "Sid Meier's Civilization: The Board Game", 2002, BG, "primary"), + (233247, "Civilization: A New Dawn", 2017, BG, "primary"), + ], + "ADVANCED CIVILIZATION Game Expansion of the Heroic Age - " + "Featuring New Civilization, Commodity, and Calamity Cards": [], + "ADVANCED CIVILIZATION Game Expansion of the Heroic Age": [], + "ADVANCED CIVILIZATION": [(177, "Advanced Civilization", 1991, EXP, "primary")], + "DOCTOR WHO The Game of Time & Space": [ + (3090, "Doctor Who: The Game of Time & Space", 1980, BG, "primary"), + (125675, "Doctor Who: The Card Game", 2012, BG, "primary"), + ], + "SORCERER The Game of Magical Conflict": [], + "SORCERER": [ + (3585, "Sorcerer", 1975, BG, "primary"), + (244115, "Sorcerer", 2019, BG, "primary"), + ], + "STARFORCE ALPHA CENTAURI Interstellar Conflict in the 25th Century": [], + "STARFORCE ALPHA": [ + ( + 2524, + "StarForce 'Alpha Centauri': Interstellar Conflict in the 25th Century", + 1974, + BG, + "primary", + ), + ], + "SKIP-BO": [(1078, "Skip-Bo", 1967, BG, "primary")], + "a Gentle Rain": [(268163, "A Gentle Rain", 2019, BG, "primary")], + "PATCH WORK": [(163412, "Patchwork", 2014, BG, "primary")], + "SANTORINI": [ + (194655, "Santorini", 2016, BG, "primary"), + (255563, "Santorini: New York", 2020, BG, "primary"), + ], + "Utter Nonsense!": [(181254, "Utter Nonsense", 2015, BG, "primary")], + "Cards Against Humanity": [(50381, "Cards Against Humanity", 2009, BG, "primary")], + "Joking Hazard": [(193621, "Joking Hazard", 2016, BG, "primary")], + "EXPLODING KITTENS": [ + (172225, "Exploding Kittens", 2015, BG, "primary"), + (172242, "Exploding Kittens: NSFW Edition", 2015, BG, "primary"), + ], + "Herbaceous": [(195314, "Herbaceous", 2017, BG, "primary")], + "Wiz-War": [ + (1218, "Wiz-War", 1983, BG, "primary"), + (104710, "Wiz-War", 2012, BG, "alternate"), # primary: Wiz-War (Eighth Edition) + ], + "SCRAWL": [(218866, "Scrawl", 2017, BG, "primary")], + "FLAT TOP": [(2529, "Flat Top", 1977, BG, "primary")], + "Diplomacy": [(483, "Diplomacy", 1959, BG, "primary")], + "Age of Renaissance": [(26, "Age of Renaissance", 1996, BG, "primary")], + "History of the World": [(224, "History of the World", 1991, BG, "primary")], + "Dungeon!": [(1339, "Dungeon!", 1975, BG, "primary")], +} + +# ids-param -> [(bgg_id, name, year, type, owned, rank, [publishers])] +THING_STATS: dict[str, list[tuple]] = { + "39,40529": [ + (39, "Cosmic Encounter", 1977, BG, 7000, 800, ["Eon"]), + (40529, "Cosmic Encounter", 2008, BG, 75000, 150, ["Fantasy Flight Games"]), + ], + "1218,104710": [ + (1218, "Wiz-War", 1983, BG, 4000, 2500, ["Chessex"]), + ( + 104710, + "Wiz-War (Eighth Edition)", + 2012, + BG, + 8000, + 1200, + ["Fantasy Flight Games"], + ), + ], + "3585,244115": [ + ( + 3585, + "Sorcerer", + 1975, + BG, + 900, + 5000, + ["Simulations Publications, Inc. (SPI)"], + ), + (244115, "Sorcerer", 2019, BG, 6000, 1500, ["White Wizard Games"]), + ], +} + +# bgg_id -> [(version_id, name, year, [publishers], [languages])] +VERSIONS: dict[int, list[tuple]] = { + 235096: [(360982, "English edition", 2017, ["ThinkFun"], ["English"])], + 240: [ + ( + 25668, + "Avalon Hill English edition", + 1986, + ["The Avalon Hill Game Co"], + ["English"], + ), + (90000, "Fantasy Flight edition", 2006, ["Fantasy Flight Games"], ["English"]), + ( + 90001, + "Welt der Spiele German edition", + 1986, + ["Welt der Spiele"], + ["German"], + ), + ], + 71: [ + ( + 71001, + "Avalon Hill English edition", + 1981, + ["The Avalon Hill Game Co"], + ["English"], + ), + ( + 71002, + "Hartland Trefoil first edition", + 1980, + ["Hartland Trefoil Ltd."], + ["English"], + ), + (71003, "Gibsons Games edition", 1988, ["Gibsons Games"], ["English"]), + ], + 177: [ + ( + 177001, + "Avalon Hill English edition", + 1991, + ["The Avalon Hill Game Co"], + ["English"], + ) + ], + 3090: [ + ( + 309001, + "Games Workshop English edition", + 1980, + ["Games Workshop Ltd."], + ["English"], + ), + ], + 3585: [ + ( + 358501, + "SPI Designer's Edition", + 1975, + ["Simulations Publications, Inc. (SPI)"], + ["English"], + ), + ( + 358502, + "SPI folio edition", + 1975, + ["Simulations Publications, Inc. (SPI)"], + ["English"], + ), + ], + 2524: [ + ( + 252401, + "SPI Designer's Edition", + 1974, + ["Simulations Publications, Inc. (SPI)"], + ["English"], + ), + ( + 252402, + "SPI folio edition", + 1974, + ["Simulations Publications, Inc. (SPI)"], + ["English"], + ), + ], + 268163: [ + (268164, "Bloom Edition", 2021, ["Mondo Games"], ["English"]), + (268165, "First edition", 2019, ["Mondo Games"], ["English"]), + ], + 193621: [(19362101, "First edition", 2016, ["Cyanide & Happiness"], ["English"])], + 2529: [ + (252901, "Avalon Hill edition", 1981, ["The Avalon Hill Game Co"], ["English"]), + (252902, "Battleline first edition", 1977, ["Battleline"], ["English"]), + ], + 483: [ + ( + 48301, + "Avalon Hill 1976 edition", + 1976, + ["The Avalon Hill Game Co"], + ["English"], + ), + ( + 48302, + "Avalon Hill 1999 edition", + 1999, + ["The Avalon Hill Game Co"], + ["English"], + ), + (48303, "Gibsons Games edition", 1963, ["Gibsons Games"], ["English"]), + ], + 26: [ + ( + 2601, + "Avalon Hill English edition", + 1996, + ["The Avalon Hill Game Co"], + ["English"], + ) + ], + 224: [ + ( + 22401, + "Avalon Hill English edition", + 1993, + ["The Avalon Hill Game Co"], + ["English"], + ), + ( + 22402, + "Ragnar Brothers first edition", + 1991, + ["Ragnar Brothers"], + ["English"], + ), + ], + 1339: [ + (133901, "TSR first edition", 1975, ["TSR"], ["English"]), + (133902, "TSR second edition", 1980, ["TSR"], ["English"]), + (133903, "TSR New Dungeon edition", 1989, ["TSR"], ["English"]), + ], +} + + +def search_xml(results: list[tuple]) -> str: + items = "".join( + f'' + f'' + f'' + for bgg_id, name, year, type_, name_type in results + ) + return f'{items}' + + +def stats_xml(things: list[tuple]) -> str: + items = "" + for bgg_id, name, year, type_, owned, rank, publishers in things: + links = "".join( + f'' + for p in publishers + ) + items += ( + f'' + f'' + f'{links}' + f"" + f'' + f'' + f"" + ) + return f"{items}" + + +def versions_xml(bgg_id: int, versions: list[tuple]) -> str: + version_items = "" + for vid, name, year, publishers, languages in versions: + links = "".join( + f'' + for p in publishers + ) + "".join( + f'' for lang in languages + ) + version_items += ( + f'' + f'' + f'{links}' + ) + return ( + f'' + f'' + f"{version_items}" + ) + + +def _esc(text: str) -> str: + return text.replace("&", "&").replace("<", "<").replace('"', """) + + +def main() -> None: + files: dict[str, str] = {} + for query, results in SEARCHES.items(): + key = cache_key("search", {"query": query, "type": SEARCH_TYPES}) + files[key] = search_xml(results) + for ids, things in THING_STATS.items(): + files[cache_key("thing", {"id": ids, "stats": "1"})] = stats_xml(things) + for bgg_id, versions in VERSIONS.items(): + key = cache_key("thing", {"id": str(bgg_id), "versions": "1"}) + files[key] = versions_xml(bgg_id, versions) + + for target in TARGETS: + target.mkdir(parents=True, exist_ok=True) + for name, xml in files.items(): + (target / name).write_text(xml) + print(f"Wrote {len(files)} fixture file(s) to {' and '.join(map(str, TARGETS))}") + + +if __name__ == "__main__": + main() diff --git a/src/bggpipe/resolve.py b/src/bggpipe/resolve.py index 7e1f0ba..eedfeea 100644 --- a/src/bggpipe/resolve.py +++ b/src/bggpipe/resolve.py @@ -59,12 +59,11 @@ class TitleEntry: @property def has_version_cues(self) -> bool: - return bool( - self.publisher_hint - or self.edition_hint - or self.year_hint - or self.language_hint - ) + """Cues strong enough to justify a versions fetch. Language alone + can never reach the plausibility threshold (it scores 1 of the + required 2), so fetching on it would waste a rate-limited request — + it still participates in scoring when other cues exist.""" + return bool(self.publisher_hint or self.edition_hint or self.year_hint) @dataclass diff --git a/tests/fixtures/bgg_cache/search_query=5-MINUTE-DUNGEON-type=boardgame-2Cboardgameexpansion_8996b7d5fe.xml b/tests/fixtures/bgg_cache/search_query=5-MINUTE-DUNGEON-type=boardgame-2Cboardgameexpansion_8996b7d5fe.xml new file mode 100644 index 0000000..f3f02bc --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=5-MINUTE-DUNGEON-type=boardgame-2Cboardgameexpansion_8996b7d5fe.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-Game-Expansion-of-the-Heroic-Age---Featuring-New-Civ_8486af3c6d.xml b/tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-Game-Expansion-of-the-Heroic-Age---Featuring-New-Civ_8486af3c6d.xml new file mode 100644 index 0000000..ba791c3 --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-Game-Expansion-of-the-Heroic-Age---Featuring-New-Civ_8486af3c6d.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-Game-Expansion-of-the-Heroic-Age-type=boardgame-2Cbo_1f14c01996.xml b/tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-Game-Expansion-of-the-Heroic-Age-type=boardgame-2Cbo_1f14c01996.xml new file mode 100644 index 0000000..ba791c3 --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-Game-Expansion-of-the-Heroic-Age-type=boardgame-2Cbo_1f14c01996.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-type=boardgame-2Cboardgameexpansion_aca1fe8ceb.xml b/tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-type=boardgame-2Cboardgameexpansion_aca1fe8ceb.xml new file mode 100644 index 0000000..7ed9bac --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=ADVANCED-CIVILIZATION-type=boardgame-2Cboardgameexpansion_aca1fe8ceb.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=Age-of-Renaissance-type=boardgame-2Cboardgameexpansion_877bb1bc86.xml b/tests/fixtures/bgg_cache/search_query=Age-of-Renaissance-type=boardgame-2Cboardgameexpansion_877bb1bc86.xml new file mode 100644 index 0000000..0baddd4 --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=Age-of-Renaissance-type=boardgame-2Cboardgameexpansion_877bb1bc86.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=Britannia-type=boardgame-2Cboardgameexpansion_b1f230622c.xml b/tests/fixtures/bgg_cache/search_query=Britannia-type=boardgame-2Cboardgameexpansion_b1f230622c.xml new file mode 100644 index 0000000..53de9b0 --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=Britannia-type=boardgame-2Cboardgameexpansion_b1f230622c.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=CAT-CRIMES-type=boardgame-2Cboardgameexpansion_782f1326dc.xml b/tests/fixtures/bgg_cache/search_query=CAT-CRIMES-type=boardgame-2Cboardgameexpansion_782f1326dc.xml new file mode 100644 index 0000000..66d2d30 --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=CAT-CRIMES-type=boardgame-2Cboardgameexpansion_782f1326dc.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=CIVILIZATION-Game-of-the-Heroic-Age---The-Dawn-of-History-8000-BC-to-250-B_6dfe500fb4.xml b/tests/fixtures/bgg_cache/search_query=CIVILIZATION-Game-of-the-Heroic-Age---The-Dawn-of-History-8000-BC-to-250-B_6dfe500fb4.xml new file mode 100644 index 0000000..ba791c3 --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=CIVILIZATION-Game-of-the-Heroic-Age---The-Dawn-of-History-8000-BC-to-250-B_6dfe500fb4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=CIVILIZATION-Game-of-the-Heroic-Age-type=boardgame-2Cboardgameexpansion_481c867f49.xml b/tests/fixtures/bgg_cache/search_query=CIVILIZATION-Game-of-the-Heroic-Age-type=boardgame-2Cboardgameexpansion_481c867f49.xml new file mode 100644 index 0000000..ba791c3 --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=CIVILIZATION-Game-of-the-Heroic-Age-type=boardgame-2Cboardgameexpansion_481c867f49.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=CIVILIZATION-type=boardgame-2Cboardgameexpansion_dbefe5359a.xml b/tests/fixtures/bgg_cache/search_query=CIVILIZATION-type=boardgame-2Cboardgameexpansion_dbefe5359a.xml new file mode 100644 index 0000000..0736cc9 --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=CIVILIZATION-type=boardgame-2Cboardgameexpansion_dbefe5359a.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=COSMIC-ENCOUNTER-type=boardgame-2Cboardgameexpansion_848554ec74.xml b/tests/fixtures/bgg_cache/search_query=COSMIC-ENCOUNTER-type=boardgame-2Cboardgameexpansion_848554ec74.xml new file mode 100644 index 0000000..c7d8760 --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=COSMIC-ENCOUNTER-type=boardgame-2Cboardgameexpansion_848554ec74.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=Cards-Against-Humanity-type=boardgame-2Cboardgameexpansion_154ea686d4.xml b/tests/fixtures/bgg_cache/search_query=Cards-Against-Humanity-type=boardgame-2Cboardgameexpansion_154ea686d4.xml new file mode 100644 index 0000000..a83a9b8 --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=Cards-Against-Humanity-type=boardgame-2Cboardgameexpansion_154ea686d4.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=DOCTOR-WHO-The-Game-of-Time-26-Space-type=boardgame-2Cboardgameexpansion_c8073100d5.xml b/tests/fixtures/bgg_cache/search_query=DOCTOR-WHO-The-Game-of-Time-26-Space-type=boardgame-2Cboardgameexpansion_c8073100d5.xml new file mode 100644 index 0000000..7fc1341 --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=DOCTOR-WHO-The-Game-of-Time-26-Space-type=boardgame-2Cboardgameexpansion_c8073100d5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=Diplomacy-type=boardgame-2Cboardgameexpansion_e688e8fb3c.xml b/tests/fixtures/bgg_cache/search_query=Diplomacy-type=boardgame-2Cboardgameexpansion_e688e8fb3c.xml new file mode 100644 index 0000000..d0f22a6 --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=Diplomacy-type=boardgame-2Cboardgameexpansion_e688e8fb3c.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=Dungeon-21-type=boardgame-2Cboardgameexpansion_9c49c5766f.xml b/tests/fixtures/bgg_cache/search_query=Dungeon-21-type=boardgame-2Cboardgameexpansion_9c49c5766f.xml new file mode 100644 index 0000000..3814e39 --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=Dungeon-21-type=boardgame-2Cboardgameexpansion_9c49c5766f.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=EXPLODING-KITTENS-type=boardgame-2Cboardgameexpansion_d7b66e2720.xml b/tests/fixtures/bgg_cache/search_query=EXPLODING-KITTENS-type=boardgame-2Cboardgameexpansion_d7b66e2720.xml new file mode 100644 index 0000000..9585ee9 --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=EXPLODING-KITTENS-type=boardgame-2Cboardgameexpansion_d7b66e2720.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=FLAT-TOP-type=boardgame-2Cboardgameexpansion_f29706aacf.xml b/tests/fixtures/bgg_cache/search_query=FLAT-TOP-type=boardgame-2Cboardgameexpansion_f29706aacf.xml new file mode 100644 index 0000000..c930d74 --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=FLAT-TOP-type=boardgame-2Cboardgameexpansion_f29706aacf.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=Herbaceous-type=boardgame-2Cboardgameexpansion_668671d8a7.xml b/tests/fixtures/bgg_cache/search_query=Herbaceous-type=boardgame-2Cboardgameexpansion_668671d8a7.xml new file mode 100644 index 0000000..8a20847 --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=Herbaceous-type=boardgame-2Cboardgameexpansion_668671d8a7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=History-of-the-World-type=boardgame-2Cboardgameexpansion_fcff3e9f9a.xml b/tests/fixtures/bgg_cache/search_query=History-of-the-World-type=boardgame-2Cboardgameexpansion_fcff3e9f9a.xml new file mode 100644 index 0000000..4d1cb0c --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=History-of-the-World-type=boardgame-2Cboardgameexpansion_fcff3e9f9a.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=Joking-Hazard-type=boardgame-2Cboardgameexpansion_7ce024e973.xml b/tests/fixtures/bgg_cache/search_query=Joking-Hazard-type=boardgame-2Cboardgameexpansion_7ce024e973.xml new file mode 100644 index 0000000..cf2ba6f --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=Joking-Hazard-type=boardgame-2Cboardgameexpansion_7ce024e973.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=PATCH-WORK-type=boardgame-2Cboardgameexpansion_398fbd77a5.xml b/tests/fixtures/bgg_cache/search_query=PATCH-WORK-type=boardgame-2Cboardgameexpansion_398fbd77a5.xml new file mode 100644 index 0000000..f177ea4 --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=PATCH-WORK-type=boardgame-2Cboardgameexpansion_398fbd77a5.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=ROYALS-type=boardgame-2Cboardgameexpansion_1113df3dae.xml b/tests/fixtures/bgg_cache/search_query=ROYALS-type=boardgame-2Cboardgameexpansion_1113df3dae.xml new file mode 100644 index 0000000..f1c4a55 --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=ROYALS-type=boardgame-2Cboardgameexpansion_1113df3dae.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=SANTORINI-type=boardgame-2Cboardgameexpansion_7c9b71b031.xml b/tests/fixtures/bgg_cache/search_query=SANTORINI-type=boardgame-2Cboardgameexpansion_7c9b71b031.xml new file mode 100644 index 0000000..faeec09 --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=SANTORINI-type=boardgame-2Cboardgameexpansion_7c9b71b031.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=SCRAWL-type=boardgame-2Cboardgameexpansion_9de3a82a7b.xml b/tests/fixtures/bgg_cache/search_query=SCRAWL-type=boardgame-2Cboardgameexpansion_9de3a82a7b.xml new file mode 100644 index 0000000..a336e78 --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=SCRAWL-type=boardgame-2Cboardgameexpansion_9de3a82a7b.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=SHERIFF-OF-NOTTINGHAM-type=boardgame-2Cboardgameexpansion_e8b9feea5d.xml b/tests/fixtures/bgg_cache/search_query=SHERIFF-OF-NOTTINGHAM-type=boardgame-2Cboardgameexpansion_e8b9feea5d.xml new file mode 100644 index 0000000..28db624 --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=SHERIFF-OF-NOTTINGHAM-type=boardgame-2Cboardgameexpansion_e8b9feea5d.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=SKIP-BO-type=boardgame-2Cboardgameexpansion_2403c9a3c0.xml b/tests/fixtures/bgg_cache/search_query=SKIP-BO-type=boardgame-2Cboardgameexpansion_2403c9a3c0.xml new file mode 100644 index 0000000..7b8de8c --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=SKIP-BO-type=boardgame-2Cboardgameexpansion_2403c9a3c0.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=SORCERER-The-Game-of-Magical-Conflict-type=boardgame-2Cboardgameexpansion_0be5b731c6.xml b/tests/fixtures/bgg_cache/search_query=SORCERER-The-Game-of-Magical-Conflict-type=boardgame-2Cboardgameexpansion_0be5b731c6.xml new file mode 100644 index 0000000..ba791c3 --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=SORCERER-The-Game-of-Magical-Conflict-type=boardgame-2Cboardgameexpansion_0be5b731c6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=SORCERER-type=boardgame-2Cboardgameexpansion_1548147928.xml b/tests/fixtures/bgg_cache/search_query=SORCERER-type=boardgame-2Cboardgameexpansion_1548147928.xml new file mode 100644 index 0000000..9dbaf0f --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=SORCERER-type=boardgame-2Cboardgameexpansion_1548147928.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=STARFORCE-ALPHA-CENTAURI-Interstellar-Conflict-in-the-25th-Century-type=bo_d1ea14fbd7.xml b/tests/fixtures/bgg_cache/search_query=STARFORCE-ALPHA-CENTAURI-Interstellar-Conflict-in-the-25th-Century-type=bo_d1ea14fbd7.xml new file mode 100644 index 0000000..ba791c3 --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=STARFORCE-ALPHA-CENTAURI-Interstellar-Conflict-in-the-25th-Century-type=bo_d1ea14fbd7.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=STARFORCE-ALPHA-type=boardgame-2Cboardgameexpansion_e4d139c3af.xml b/tests/fixtures/bgg_cache/search_query=STARFORCE-ALPHA-type=boardgame-2Cboardgameexpansion_e4d139c3af.xml new file mode 100644 index 0000000..bb68a9d --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=STARFORCE-ALPHA-type=boardgame-2Cboardgameexpansion_e4d139c3af.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=Utter-Nonsense-21-type=boardgame-2Cboardgameexpansion_d3e090d859.xml b/tests/fixtures/bgg_cache/search_query=Utter-Nonsense-21-type=boardgame-2Cboardgameexpansion_d3e090d859.xml new file mode 100644 index 0000000..e968537 --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=Utter-Nonsense-21-type=boardgame-2Cboardgameexpansion_d3e090d859.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=Wiz-War-type=boardgame-2Cboardgameexpansion_5e60175c58.xml b/tests/fixtures/bgg_cache/search_query=Wiz-War-type=boardgame-2Cboardgameexpansion_5e60175c58.xml new file mode 100644 index 0000000..a1c3e2e --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=Wiz-War-type=boardgame-2Cboardgameexpansion_5e60175c58.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/search_query=a-Gentle-Rain-type=boardgame-2Cboardgameexpansion_2c8b74ea84.xml b/tests/fixtures/bgg_cache/search_query=a-Gentle-Rain-type=boardgame-2Cboardgameexpansion_2c8b74ea84.xml new file mode 100644 index 0000000..58285bb --- /dev/null +++ b/tests/fixtures/bgg_cache/search_query=a-Gentle-Rain-type=boardgame-2Cboardgameexpansion_2c8b74ea84.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/thing_id=1218-2C104710-stats=1_9ac6609f5e.xml b/tests/fixtures/bgg_cache/thing_id=1218-2C104710-stats=1_9ac6609f5e.xml new file mode 100644 index 0000000..9fa319f --- /dev/null +++ b/tests/fixtures/bgg_cache/thing_id=1218-2C104710-stats=1_9ac6609f5e.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/thing_id=1339-versions=1_76fffe61e6.xml b/tests/fixtures/bgg_cache/thing_id=1339-versions=1_76fffe61e6.xml new file mode 100644 index 0000000..3e6a42a --- /dev/null +++ b/tests/fixtures/bgg_cache/thing_id=1339-versions=1_76fffe61e6.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/thing_id=177-versions=1_a50b6534c2.xml b/tests/fixtures/bgg_cache/thing_id=177-versions=1_a50b6534c2.xml new file mode 100644 index 0000000..ebb23c6 --- /dev/null +++ b/tests/fixtures/bgg_cache/thing_id=177-versions=1_a50b6534c2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/thing_id=193621-versions=1_b0b8e177ce.xml b/tests/fixtures/bgg_cache/thing_id=193621-versions=1_b0b8e177ce.xml new file mode 100644 index 0000000..7b06bda --- /dev/null +++ b/tests/fixtures/bgg_cache/thing_id=193621-versions=1_b0b8e177ce.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/thing_id=224-versions=1_0965f5986e.xml b/tests/fixtures/bgg_cache/thing_id=224-versions=1_0965f5986e.xml new file mode 100644 index 0000000..369b103 --- /dev/null +++ b/tests/fixtures/bgg_cache/thing_id=224-versions=1_0965f5986e.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/thing_id=235096-versions=1_6971fd8efc.xml b/tests/fixtures/bgg_cache/thing_id=235096-versions=1_6971fd8efc.xml new file mode 100644 index 0000000..9d8f086 --- /dev/null +++ b/tests/fixtures/bgg_cache/thing_id=235096-versions=1_6971fd8efc.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/thing_id=240-versions=1_720245041a.xml b/tests/fixtures/bgg_cache/thing_id=240-versions=1_720245041a.xml new file mode 100644 index 0000000..10952de --- /dev/null +++ b/tests/fixtures/bgg_cache/thing_id=240-versions=1_720245041a.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/thing_id=2524-versions=1_a36c20def8.xml b/tests/fixtures/bgg_cache/thing_id=2524-versions=1_a36c20def8.xml new file mode 100644 index 0000000..9d18a1a --- /dev/null +++ b/tests/fixtures/bgg_cache/thing_id=2524-versions=1_a36c20def8.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/thing_id=2529-versions=1_ae4f4b0f0f.xml b/tests/fixtures/bgg_cache/thing_id=2529-versions=1_ae4f4b0f0f.xml new file mode 100644 index 0000000..8d0a1ef --- /dev/null +++ b/tests/fixtures/bgg_cache/thing_id=2529-versions=1_ae4f4b0f0f.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/thing_id=26-versions=1_3d488157bf.xml b/tests/fixtures/bgg_cache/thing_id=26-versions=1_3d488157bf.xml new file mode 100644 index 0000000..e30e60b --- /dev/null +++ b/tests/fixtures/bgg_cache/thing_id=26-versions=1_3d488157bf.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/thing_id=268163-versions=1_73358308e2.xml b/tests/fixtures/bgg_cache/thing_id=268163-versions=1_73358308e2.xml new file mode 100644 index 0000000..64be42c --- /dev/null +++ b/tests/fixtures/bgg_cache/thing_id=268163-versions=1_73358308e2.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/thing_id=3090-versions=1_c1e6ddabda.xml b/tests/fixtures/bgg_cache/thing_id=3090-versions=1_c1e6ddabda.xml new file mode 100644 index 0000000..ee33c40 --- /dev/null +++ b/tests/fixtures/bgg_cache/thing_id=3090-versions=1_c1e6ddabda.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/thing_id=3585-2C244115-stats=1_f1c50911dc.xml b/tests/fixtures/bgg_cache/thing_id=3585-2C244115-stats=1_f1c50911dc.xml new file mode 100644 index 0000000..66a1c13 --- /dev/null +++ b/tests/fixtures/bgg_cache/thing_id=3585-2C244115-stats=1_f1c50911dc.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/thing_id=3585-versions=1_48ead3ba60.xml b/tests/fixtures/bgg_cache/thing_id=3585-versions=1_48ead3ba60.xml new file mode 100644 index 0000000..7610e3d --- /dev/null +++ b/tests/fixtures/bgg_cache/thing_id=3585-versions=1_48ead3ba60.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/thing_id=39-2C40529-stats=1_7fb40b9d38.xml b/tests/fixtures/bgg_cache/thing_id=39-2C40529-stats=1_7fb40b9d38.xml new file mode 100644 index 0000000..4b9cb69 --- /dev/null +++ b/tests/fixtures/bgg_cache/thing_id=39-2C40529-stats=1_7fb40b9d38.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/thing_id=483-versions=1_795d325a85.xml b/tests/fixtures/bgg_cache/thing_id=483-versions=1_795d325a85.xml new file mode 100644 index 0000000..4e19eaf --- /dev/null +++ b/tests/fixtures/bgg_cache/thing_id=483-versions=1_795d325a85.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/bgg_cache/thing_id=71-versions=1_19169a34ed.xml b/tests/fixtures/bgg_cache/thing_id=71-versions=1_19169a34ed.xml new file mode 100644 index 0000000..3565a0d --- /dev/null +++ b/tests/fixtures/bgg_cache/thing_id=71-versions=1_19169a34ed.xml @@ -0,0 +1 @@ + \ No newline at end of file