feat: Bank ueber alle Laender suchen
Unter "Deutschland" liessen sich N26 und Revolut nicht finden – und bei Revolut kann das gar nicht klappen: Die Bank vergibt deutsche IBANs, ist aber die Revolut Bank UAB in Litauen. Das Sitzland einer Bank steht nicht in der IBAN, also ist die Laenderauswahl der falsche Einstieg. Jetzt ein Suchfeld, das ohne Land ueber alle sucht; das Land ist nur noch ein optionaler Filter. Der Treffer zeigt sein Land mit an, und verbunden wird mit dem Land der BANK statt dem des Filters – sonst schluege die Autorisierung fehl, sobald ohne Land gesucht wurde. Ohne Land UND ohne Begriff wird abgelehnt: Sonst kaemen alle Banken Europas ins Formular. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -45,8 +45,12 @@ class FakeBank:
|
||||
self.jwt = (headers or {}).get("Authorization", "")[7:]
|
||||
self.aufrufe.append(f"{methode} {pfad.split('?')[0]}")
|
||||
if pfad.startswith("/aspsps"):
|
||||
return 200, {"aspsps": [{"name": "N26", "country": "DE"},
|
||||
{"name": "Revolut", "country": "LT"}]}
|
||||
alle = [{"name": "N26", "country": "DE"},
|
||||
{"name": "Revolut", "country": "LT"}]
|
||||
if "country=" in pfad:
|
||||
land = pfad.split("country=")[1].split("&")[0]
|
||||
alle = [b for b in alle if b["country"] == land]
|
||||
return 200, {"aspsps": alle}
|
||||
if pfad == "/auth":
|
||||
return 200, {"url": "https://bank.example/authorize?x=1",
|
||||
"authorization_id": "auth-1"}
|
||||
@@ -182,11 +186,12 @@ def test_unbrauchbarer_schluessel_meldet_sich_verstaendlich():
|
||||
|
||||
|
||||
def test_banken_eines_landes_abrufen(admin, fake_bank):
|
||||
"""Ein Land liefert nur dessen Banken – Revolut sitzt in Litauen."""
|
||||
_app(admin)
|
||||
fake_bank()
|
||||
r = admin.get("/api/bank/banks?country=DE")
|
||||
assert r.status_code == 200, r.text
|
||||
assert [b["name"] for b in r.json()] == ["N26", "Revolut"]
|
||||
assert [b["name"] for b in r.json()] == ["N26"]
|
||||
|
||||
|
||||
def test_verbinden_und_konten_finden(admin, fake_bank):
|
||||
@@ -358,3 +363,33 @@ def test_ablauf_der_zustimmung_wird_gemeldet(admin, fake_bank):
|
||||
|
||||
liste = [c for c in admin.get("/api/bank/connections").json() if c["id"] == verbindung]
|
||||
assert liste[0]["expires_soon"] is True
|
||||
|
||||
|
||||
def test_suche_findet_ueber_alle_laender(admin, fake_bank):
|
||||
"""Das Sitzland steht nicht in der IBAN.
|
||||
|
||||
Revolut vergibt deutsche IBANs, ist aber in Litauen ansässig. Wer unter
|
||||
„Deutschland" sucht, findet es dort nie – deshalb muss ohne Land gesucht
|
||||
werden können.
|
||||
"""
|
||||
_app(admin)
|
||||
fake_bank()
|
||||
|
||||
alle = admin.get("/api/bank/banks?search=revolut")
|
||||
assert alle.status_code == 200, alle.text
|
||||
treffer = alle.json()
|
||||
assert [b["name"] for b in treffer] == ["Revolut"]
|
||||
assert treffer[0]["country"] == "LT"
|
||||
|
||||
# Unter Deutschland gesucht liefert dieselbe Bank NICHT.
|
||||
nur_de = admin.get("/api/bank/banks?country=DE&search=revolut").json()
|
||||
assert nur_de == []
|
||||
|
||||
|
||||
def test_suche_ohne_land_und_ohne_begriff_wird_abgelehnt(admin, fake_bank):
|
||||
"""Sonst käme die vollständige Liste aller Banken Europas ins Formular."""
|
||||
_app(admin)
|
||||
fake_bank()
|
||||
r = admin.get("/api/bank/banks")
|
||||
assert r.status_code == 400
|
||||
assert "Suchbegriff" in r.json()["detail"]
|
||||
|
||||
Reference in New Issue
Block a user