Fix: dedup BGG-Client nutzt Token; Sync-Filter Jahr+deutscher Titel; Defaults für deutsche Neuerscheinungen
This commit is contained in:
@@ -389,3 +389,25 @@ def test_bgg_pruefclient_toleroert_fehler():
|
||||
assert client.vorgaenger(99) == []
|
||||
finally:
|
||||
client.schliessen()
|
||||
|
||||
|
||||
def test_bgg_pruefclient_sendet_token_header():
|
||||
from plugins.dedup.bgg import BggPruefClient
|
||||
|
||||
gesehen: list[httpx.Request] = []
|
||||
|
||||
def handler(request: httpx.Request) -> httpx.Response:
|
||||
gesehen.append(request)
|
||||
return httpx.Response(200, content=THING_XML.encode())
|
||||
|
||||
client = BggPruefClient(
|
||||
mindestabstand_sekunden=0.0,
|
||||
token="mein-token",
|
||||
transport=httpx.MockTransport(handler),
|
||||
)
|
||||
try:
|
||||
assert client.alternativen(99) == ["Catan Expansion", "Siedler-Erweiterung"]
|
||||
finally:
|
||||
client.schliessen()
|
||||
assert gesehen
|
||||
assert gesehen[0].headers["Authorization"] == "Bearer mein-token"
|
||||
|
||||
@@ -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"])
|
||||
|
||||
|
||||
@@ -194,6 +194,8 @@ def test_sync_endpunkt_rollen_pruefung(app, settings):
|
||||
def test_manueller_sync_legt_eintraege_an(monkeypatch, settings):
|
||||
from fastapi.testclient import TestClient
|
||||
|
||||
monkeypatch.setenv("SPIELE_BGG_JAHR_FILTER", "0")
|
||||
monkeypatch.setenv("SPIELE_BGG_DEUTSCHE_TITEL_FILTER", "0")
|
||||
fake = FakeBggClient(
|
||||
treffer=[SuchTreffer(13, "Catan", 1995)],
|
||||
spiel_details=[
|
||||
|
||||
Reference in New Issue
Block a user