Fix: dedup BGG-Client nutzt Token; Sync-Filter Jahr+deutscher Titel; Defaults für deutsche Neuerscheinungen

This commit is contained in:
Flo Hartmann
2026-08-25 17:28:35 +00:00
parent d91402881a
commit 929cea1887
10 changed files with 202 additions and 19 deletions

View File

@@ -94,7 +94,9 @@ def test_sync_legt_eintraege_an(session_factory):
suchergebnisse={"catan": [SuchTreffer(13, "Catan", 1995)]},
details_pro_id={13: _spiel()},
)
service = SyncService(session_factory, client)
service = SyncService(
session_factory, client, jahr_filter=False, deutscher_titel_filter=False
)
ergebnis = service.synchronisiere(["catan"])
@@ -117,7 +119,9 @@ def test_sync_aktualisiert_bestehende_eintraege_statt_duplikate(session_factory)
suchergebnisse={"catan": [SuchTreffer(13, "Catan", 1995)]},
details_pro_id={13: _spiel()},
)
service = SyncService(session_factory, client)
service = SyncService(
session_factory, client, jahr_filter=False, deutscher_titel_filter=False
)
service.synchronisiere(["catan"])
@@ -142,7 +146,9 @@ def test_sync_veraenderter_titel_gleiche_bgg_id_kein_duplikat(session_factory):
suchergebnisse={"catan": [SuchTreffer(13, "Catan", 1995)]},
details_pro_id={13: _spiel()},
)
service = SyncService(session_factory, client)
service = SyncService(
session_factory, client, jahr_filter=False, deutscher_titel_filter=False
)
service.synchronisiere(["catan"])
client.details_pro_id[13] = _spiel(titel="Catan (Neuausgabe)")
@@ -176,7 +182,9 @@ def test_sync_filtert_erweiterungen(session_factory):
55: _spiel(55, "Catan: Erweiterung", typ="boardgameexpansion"),
},
)
service = SyncService(session_factory, client)
service = SyncService(
session_factory, client, jahr_filter=False, deutscher_titel_filter=False
)
ergebnis = service.synchronisiere(["catan"])
@@ -200,7 +208,9 @@ def test_sync_filtert_prototypen(session_factory):
78: _spiel(78, "My Prototype Game"),
},
)
service = SyncService(session_factory, client)
service = SyncService(
session_factory, client, jahr_filter=False, deutscher_titel_filter=False
)
ergebnis = service.synchronisiere(["essen"])
@@ -216,6 +226,61 @@ def test_prototyp_heuristik():
assert not ist_moeglicher_prototyp("Die Burgen von Burgund")
# ---------- Filter: Jahr und deutscher Titel ----------
def test_sync_filtert_nach_jahr_und_deutschem_titel(session_factory):
aktuelles = 2026
client = FakeBggClient(
suchergebnisse={
"mix": [
SuchTreffer(13, "Catan", aktuelles - 1),
SuchTreffer(42, "Die neuen Siedler", aktuelles),
SuchTreffer(99, "Future Game", aktuelles + 1),
SuchTreffer(88, "The Old English Game", aktuelles),
]
},
details_pro_id={
13: _spiel(13, "Catan", erscheinungsjahr=aktuelles - 1),
42: _spiel(42, "Die neuen Siedler", erscheinungsjahr=aktuelles),
99: _spiel(99, "Future Game", erscheinungsjahr=aktuelles + 1),
88: _spiel(88, "The Old English Game", erscheinungsjahr=aktuelles),
},
)
service = SyncService(session_factory, client)
service._min_jahr = aktuelles
ergebnis = service.synchronisiere(["mix"])
assert ergebnis.neu == 1 # nur "Die neuen Siedler" überlebt beide Filter
assert ergebnis.gefiltert == 3 # 1 zu alt + 1 zukünftig aber englisch + 1 aktuell aber englisch
eintraege = _alle_eintraege(session_factory)
assert [e.bgg_id for e in eintraege] == [42]
def test_sync_ohne_filter_behält_alle_jahre_und_sprachen(session_factory):
client = FakeBggClient(
suchergebnisse={
"mix": [
SuchTreffer(13, "Catan", 1995),
SuchTreffer(88, "The English Game", 2026),
]
},
details_pro_id={
13: _spiel(13, "Catan", erscheinungsjahr=1995),
88: _spiel(88, "The English Game", erscheinungsjahr=2026),
},
)
service = SyncService(
session_factory, client, jahr_filter=False, deutscher_titel_filter=False
)
ergebnis = service.synchronisiere(["mix"])
assert ergebnis.neu == 2
assert ergebnis.gefiltert == 0
# ---------- Robustheit ----------
@@ -233,7 +298,9 @@ def test_401_bricht_sync_ab_mit_klarer_meldung(session_factory):
suchergebnisse={"gut": [SuchTreffer(13, "Catan", 1995)]},
details_pro_id={13: _spiel()},
)
service = SyncService(session_factory, client)
service = SyncService(
session_factory, client, jahr_filter=False, deutscher_titel_filter=False
)
ergebnis = service.synchronisiere(["gut", "abgelehnt", "dritter"])
@@ -255,7 +322,9 @@ def test_fehler_bei_einem_suchbegriff_bricht_lauf_nicht_ab(session_factory):
suchergebnisse={"gut": [SuchTreffer(13, "Catan", 1995)]},
details_pro_id={13: _spiel()},
)
service = SyncService(session_factory, client)
service = SyncService(
session_factory, client, jahr_filter=False, deutscher_titel_filter=False
)
ergebnis = service.synchronisiere(["kaputt", "gut"])