feat: Pockets sind erkennbar und zuordenbar
Ein Revolut-Pocket bringt weder eigene IBAN noch eigenen Namen mit. Certain hielt bisher nur uid, IBAN, Name und Waehrung fest – mehrere Konten derselben Bank sahen damit gleich aus, und in der Zeile stand die rohe Kennung. Jetzt werden Produktbezeichnung und die Kennung fuer Konten ohne IBAN mitgefuehrt, der angezeigte Name faellt der Reihe nach auf Name, Details, Produkt, Kennung, IBAN zurueck statt auf die uid, und der uebermittelte Datensatz laesst sich aufklappen – nachsehen statt raten, wenn zwei Konten gleich aussehen. Beim Neuverbinden werden die Merkmale aufgefrischt, ohne die Zuordnung anzutasten. Fehlt ein Konto in der Waehrung des Bankkontos, steht das jetzt dabei; vorher war die Auswahl einfach leer. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -555,3 +555,59 @@ def test_erneutes_verbinden_behaelt_die_kontozuordnung(admin, fake_bank):
|
||||
passende = [c for c in admin.get("/api/bank/connections").json()
|
||||
if c["aspsp_name"] == "Testbank"]
|
||||
assert len(passende) == 1
|
||||
|
||||
|
||||
def test_pocket_ohne_iban_und_namen_bleibt_unterscheidbar(admin, fake_bank):
|
||||
"""Ein Revolut-Pocket bringt weder IBAN noch eigenen Namen mit. Ohne
|
||||
Produktbezeichnung und Ersatzkennung sähen mehrere Konten gleich aus."""
|
||||
_app(admin)
|
||||
haupt = f"acc-{secrets.token_hex(4)}"
|
||||
pocket = f"acc-{secrets.token_hex(4)}"
|
||||
fake_bank(konten=[
|
||||
{"uid": haupt, "name": "Revolut", "currency": "CHF",
|
||||
"account_id": {"iban": "CH9300762011623852957"}, "product": "Current"},
|
||||
# So kommt ein Pocket an: keine IBAN, kein Name, nur Produkt und
|
||||
# eine Kennung unter ``other``.
|
||||
{"uid": pocket, "currency": "CHF", "product": "Steuern",
|
||||
"account_id": {"other": {"identification": "POCKET-7788"}}},
|
||||
])
|
||||
state = admin.post("/api/bank/connect",
|
||||
json={"aspsp_name": "Revolut", "country": "LT"}).json()["state"]
|
||||
r = admin.post(f"/api/bank/callback?state={state}&code=guter-code")
|
||||
assert r.status_code == 200, r.text
|
||||
assert r.json()["konten"] == 2
|
||||
|
||||
links = {v["remote_uid"]: v for v in admin.get("/api/bank/links").json()}
|
||||
p = links[pocket]
|
||||
assert p["product"] == "Steuern"
|
||||
assert p["other_id"] == "POCKET-7788"
|
||||
assert p["iban"] is None
|
||||
# Der Name faellt auf etwas Sprechendes zurueck, nicht auf die uid.
|
||||
assert p["remote_name"] == "Steuern"
|
||||
assert p["remote_name"] != p["remote_uid"]
|
||||
assert p["bank_felder"]["product"] == "Steuern"
|
||||
|
||||
# Und die beiden sind auseinanderzuhalten.
|
||||
assert links[haupt]["remote_name"] != p["remote_name"]
|
||||
|
||||
|
||||
def test_merkmale_werden_beim_neuverbinden_aufgefrischt(admin, fake_bank):
|
||||
"""Sonst muesste man loeschen, um an eine spaetere Produktbezeichnung zu
|
||||
kommen – und verloere dabei die Zuordnung."""
|
||||
_app(admin)
|
||||
uid = f"acc-{secrets.token_hex(4)}"
|
||||
bank = f"Testbank-{secrets.token_hex(3)}"
|
||||
|
||||
def verbinde(konten):
|
||||
fake_bank(konten=konten)
|
||||
state = admin.post("/api/bank/connect",
|
||||
json={"aspsp_name": bank, "country": "DE"}).json()["state"]
|
||||
return admin.post(f"/api/bank/callback?state={state}&code=guter-code")
|
||||
|
||||
verbinde([{"uid": uid, "currency": "EUR"}])
|
||||
assert admin.get("/api/bank/links").json()[-1]["product"] is None
|
||||
|
||||
verbinde([{"uid": uid, "currency": "EUR", "name": "Urlaub", "product": "Savings"}])
|
||||
danach = [v for v in admin.get("/api/bank/links").json() if v["remote_uid"] == uid][0]
|
||||
assert danach["product"] == "Savings"
|
||||
assert danach["remote_name"] == "Urlaub"
|
||||
|
||||
Reference in New Issue
Block a user