fix: Ein Uebertragsvorschlag erscheint nur noch einmal
Jedes Paar steht in der Kandidatenliste zweimal, einmal je Richtung. Was verknuepft wird, faellt ueber "verbraucht" heraus - ein blosser Vorschlag aber nicht. Also bot /uebertraege/vorschlaege dieselbe Zahlung zweimal zum Verbinden an, und wer das zweite anklickte, bekam "bereits verknuepft" fuer etwas, das er gerade selbst verknuepft hatte. Betrifft auch die Weboberflaeche: Uebertragsvorschlaege.jsx zeigt die Liste unveraendert an und hatte denselben Doppeleintrag. Gefunden beim Bauen der Arbeitsliste fuer die iOS-App - die Pruefdatei brachte den Vorschlag doppelt zurueck. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -354,3 +354,30 @@ def test_vorschlag_auch_wenn_die_gegenseite_tage_spaeter_steht(admin):
|
||||
# Bestaetigen kann der Nutzer es trotzdem.
|
||||
assert admin.post("/api/uebertraege/verbinden",
|
||||
json={"a_id": raus["id"], "b_id": rein["id"]}).status_code == 200
|
||||
|
||||
|
||||
def test_ein_paar_wird_nur_einmal_vorgeschlagen(admin):
|
||||
"""Jedes Paar steht intern zweimal, einmal je Richtung.
|
||||
|
||||
Ohne Entdopplung saehe der Nutzer dieselbe Zahlung zweimal zum Verbinden
|
||||
angeboten - und wer das zweite anklickt, bekaeme den Fehler "bereits
|
||||
verknuepft" fuer etwas, das er gerade selbst verknuepft hat.
|
||||
"""
|
||||
import secrets
|
||||
|
||||
betrag = 100000 + secrets.randbelow(800000)
|
||||
a = admin.post("/api/accounts", json={
|
||||
"name": f"A {secrets.token_hex(3)}", "currency": "EUR"}).json()
|
||||
b = admin.post("/api/accounts", json={
|
||||
"name": f"B {secrets.token_hex(3)}", "currency": "EUR"}).json()
|
||||
raus = admin.post("/api/transactions", json={
|
||||
"type": "expense", "date": "2026-07-14", "account_id": a["id"],
|
||||
"amount_cents": betrag, "payee": "Umbuchung"}).json()
|
||||
rein = admin.post("/api/transactions", json={
|
||||
"type": "income", "date": "2026-07-14", "account_id": b["id"],
|
||||
"amount_cents": betrag, "payee": "Umbuchung"}).json()
|
||||
|
||||
paare = admin.get("/api/uebertraege/vorschlaege").json()["vorschlaege"]
|
||||
meins = [p for p in paare
|
||||
if {p["a"]["id"], p["b"]["id"]} == {raus["id"], rein["id"]}]
|
||||
assert len(meins) == 1, f"einmal vorschlagen, nicht {len(meins)}-mal"
|
||||
|
||||
Reference in New Issue
Block a user