fix: Die Budget-Vorlage nennt wieder Betriebsart und Zuschlag

GET /api/budget/template gab je Zeile nur planned_cents heraus, obwohl das
Modell modus und zuschlag_cents fuehrt und PUT sie zurueckgibt. Wer die
Vorlage so liest, haelt eine berechnete Zeile fuer eine feste - und schreibt
sie beim naechsten Speichern auch als feste zurueck.

Die Weboberflaeche traf es nicht, weil sie die Betriebsart aus der
Monatsansicht nimmt. Die iOS-App bietet beide Richtungen an und haette den
Fehler sichtbar gemacht.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Guido
2026-10-21 20:10:21 +02:00
co-authored by Claude Opus 5
parent 1649c84f6a
commit 82edc29dfe
2 changed files with 43 additions and 1 deletions
+30
View File
@@ -369,3 +369,33 @@ def test_aufstellung_zeigt_eine_verschobene_buchung_im_neuen_monat(admin):
assert not any(r["id"] == tx["id"] for r in auf["rows"])
karte2 = admin.get("/api/dashboard/expense-share?group_by=category").json()
assert auf["total"] == next(r for r in karte2["rows"] if r["name"] == "Lebensmittel")["amount"]
def test_vorlage_nennt_betriebsart_und_zuschlag(admin):
"""Die Vorlage gab bisher nur planned_cents heraus.
Wer sie so liest, haelt eine berechnete Zeile fuer eine feste - und
schreibt sie beim naechsten Speichern auch als feste zurueck. PUT und die
Monatsansicht nennen beide Felder laengst; hier fehlten sie schlicht.
Eine eigene Kategorie statt Lebensmittel: Die Testdatenbank lebt ueber den
ganzen Lauf, und eine Vorlagenzeile auf "berechnet" umzustellen wuerde die
Nachbartests treffen.
"""
import secrets
gruppe = next(g for g in admin.get("/api/categories").json()
if g["kind"] == "expense")
kat = admin.post("/api/categories", json={
"group_id": gruppe["id"], "name": f"Vorlagenart {secrets.token_hex(3)}"}).json()
r = admin.put(f"/api/budget/template/category/{kat['id']}",
params={"planned_cents": 12000, "modus": "berechnet",
"zuschlag_cents": 2500})
assert r.status_code == 200, r.text
zeile = next(l for l in admin.get("/api/budget/template").json()["lines"]
if l["category_id"] == kat["id"])
assert zeile["planned_cents"] == 12000
assert zeile["modus"] == "berechnet"
assert zeile["zuschlag_cents"] == 2500