diff --git a/backend/tests/test_neutral_category.py b/backend/tests/test_neutral_category.py index e3aec8b..da6a70f 100644 --- a/backend/tests/test_neutral_category.py +++ b/backend/tests/test_neutral_category.py @@ -99,3 +99,44 @@ def test_neutral_keyword_matches_both_directions(admin): assert rows[0]["category_id"] == uebertrag["id"], "Ausgabe-Richtung" assert rows[1]["category_id"] == uebertrag["id"], "Einnahme-Richtung ebenso" + + +def _einnahmen(admin): + return admin.get("/api/dashboard/income-expense").json()["income"] + + +def test_neutrale_kategorie_gilt_auch_fuer_einnahmen(admin): + """Die Gegenseite eines Kontoübertrags ist eine Einnahme – und darf ebenso + wenig in die Statistik einfliessen wie die Ausgabe. + + Seit der Import keine Konten mehr verbindet, wird aus jedem Übertrag ein + Paar: Ausgabe beim einen Konto, Einnahme beim anderen. Zählte nur die + Ausgabe nicht, stünde das Geld als Einnahme in der Auswertung und die + Bilanz des Monats wäre um den vollen Betrag zu gut. + """ + acc = admin.post("/api/accounts", json={ + "name": "Giro Neutral Einnahme", "type": "girokonto", "currency": "EUR", + "opening_balance_cents": 0, + }).json() + # Neutrale Kategorie liegt in einer AUSGABEN-Gruppe – sie muss trotzdem + # für eine Einnahme verwendbar sein. + uebertrag, = _expense_cats(admin, 1) + admin.patch(f"/api/categories/{uebertrag['id']}", json={"excluded_from_stats": True}) + + vorher = _einnahmen(admin) + heute = str(datetime.date.today()) + r = admin.post("/api/transactions", json={ + "type": "income", "date": heute, "account_id": acc["id"], + "amount_cents": 25000, "category_id": uebertrag["id"], + }) + assert r.status_code == 201, r.text + + # Der Kontostand steigt ... + assert admin.get(f"/api/accounts/{acc['id']}").json()["balance_cents"] == 25000 + # ... die Einnahmen der Auswertung nicht. + assert _einnahmen(admin) == vorher + + # Ohne die Markierung zählt dieselbe Buchung wieder mit. + admin.patch(f"/api/categories/{uebertrag['id']}", json={"excluded_from_stats": False}) + assert _einnahmen(admin) == vorher + 25000 + admin.patch(f"/api/categories/{uebertrag['id']}", json={"excluded_from_stats": True})