feat: Gleich aussehende Buchungen lassen sich behalten, statt loeschen zu muessen
Die Liste sagt ausdruecklich, dass sie nichts entscheidet: Drei Aufrundungen ueber 1.00 am selben Tag sind echt, drei gleiche Einkaeufe koennen es auch sein – das weiss nur der Nutzer. Dann darf sie aber auch nicht zu einer Entscheidung draengen, und genau das tat sie: Der einzige Knopf war der Papierkorb. Wer die Meldung loswerden wollte, musste eine richtige Buchung wegwerfen. Jetzt steht neben jeder Gruppe "Alle behalten". An den Buchungen aendert sich dabei nichts; es ist ein Haken an der Frage. Der Haken gilt dem, was man gesehen hat – nicht allem, was noch kommt: Eine Gruppe faellt erst weg, wenn ALLE ihre Zeilen ihn tragen. Kommt spaeter eine dritte gleich aussehende Buchung dazu, steht die Frage wieder da, und zwar fuer alle drei. Ein Test haelt das fest. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
6fc2a924d2
commit
b867b272ba
@@ -187,3 +187,70 @@ def test_verschiedene_kennungen_desselben_kontos_gelten_als_geklaert(admin):
|
||||
gruppen = [g for g in admin.get("/api/transactions/dubletten").json()["gruppen"]
|
||||
if g["account_id"] == konto["id"]]
|
||||
assert not gruppen, "die Bank hat sie als verschieden gemeldet"
|
||||
|
||||
|
||||
# --- „Sieht gleich aus, ist aber richtig so." --------------------------------
|
||||
|
||||
def test_dubletten_lassen_sich_behalten_statt_loeschen(admin):
|
||||
"""Ohne diesen Weg blieb nur Loeschen, um die Meldung loszuwerden.
|
||||
|
||||
Die Liste will ausdruecklich nichts entscheiden – dann darf sie auch nicht
|
||||
zu einer Entscheidung draengen.
|
||||
"""
|
||||
konto = admin.post("/api/accounts", json={
|
||||
"name": "Behalten-Konto", "currency": "CHF"}).json()
|
||||
tag = "2026-09-12"
|
||||
|
||||
def buche(text):
|
||||
return admin.post("/api/transactions", json={
|
||||
"type": "expense", "date": tag, "account_id": konto["id"],
|
||||
"amount_cents": 1043, "payee": text}).json()["id"]
|
||||
|
||||
ids = [buche("Migrolino"), buche("Migrolino")]
|
||||
|
||||
def meine():
|
||||
return [g for g in admin.get("/api/transactions/dubletten").json()["gruppen"]
|
||||
if g["account_id"] == konto["id"]]
|
||||
|
||||
assert len(meine()) == 1
|
||||
|
||||
r = admin.post("/api/transactions/dubletten/behalten", json={"ids": ids})
|
||||
assert r.status_code == 204, r.text
|
||||
assert meine() == [], "beantwortet – und damit weg"
|
||||
|
||||
# Und beide Buchungen stehen noch.
|
||||
assert admin.get(f"/api/accounts/{konto['id']}").json()["balance_cents"] == -2086
|
||||
|
||||
|
||||
def test_eine_dritte_gleiche_buchung_stellt_die_frage_neu(admin):
|
||||
"""Der Haken gilt dem, was man gesehen hat – nicht allem, was noch kommt.
|
||||
|
||||
Deshalb faellt eine Gruppe erst weg, wenn ALLE ihre Zeilen ihn tragen.
|
||||
"""
|
||||
konto = admin.post("/api/accounts", json={
|
||||
"name": "Dritte-Konto", "currency": "CHF"}).json()
|
||||
tag = "2026-09-13"
|
||||
|
||||
def buche():
|
||||
return admin.post("/api/transactions", json={
|
||||
"type": "expense", "date": tag, "account_id": konto["id"],
|
||||
"amount_cents": 1077, "payee": "Migrolino"}).json()["id"]
|
||||
|
||||
def meine():
|
||||
return [g for g in admin.get("/api/transactions/dubletten").json()["gruppen"]
|
||||
if g["account_id"] == konto["id"]]
|
||||
|
||||
ids = [buche(), buche()]
|
||||
admin.post("/api/transactions/dubletten/behalten", json={"ids": ids})
|
||||
assert meine() == []
|
||||
|
||||
buche()
|
||||
gruppen = meine()
|
||||
assert len(gruppen) == 1
|
||||
assert len(gruppen[0]["zeilen"]) == 3, "die Frage gilt wieder fuer alle drei"
|
||||
|
||||
|
||||
def test_fremde_buchung_laesst_sich_nicht_behalten(admin, client):
|
||||
r = admin.post("/api/transactions/dubletten/behalten", json={"ids": [999999]})
|
||||
assert r.status_code == 404, r.text
|
||||
assert client
|
||||
|
||||
Reference in New Issue
Block a user