diff --git a/backend/app/routers/budgets.py b/backend/app/routers/budgets.py index 65c0181..145b452 100644 --- a/backend/app/routers/budgets.py +++ b/backend/app/routers/budgets.py @@ -46,7 +46,19 @@ def get_template(db: Session = Depends(get_db), user: User = Depends(get_current .all() ) return { - "lines": [{"category_id": ln.category_id, "planned_cents": ln.planned_cents} for ln in lines], + # Betriebsart und Zuschlag gehören dazu: PUT gibt sie zurück und die + # Monatsansicht liefert sie ohnehin. Ohne sie zeigt ein Client eine + # berechnete Zeile als feste an und schreibt sie beim nächsten + # Speichern auch als feste zurück. + "lines": [ + { + "category_id": ln.category_id, + "planned_cents": ln.planned_cents, + "modus": ln.modus, + "zuschlag_cents": ln.zuschlag_cents, + } + for ln in lines + ], "income": [PlannedIncomeOut.model_validate(i).model_dump() for i in income], } diff --git a/backend/tests/test_budget.py b/backend/tests/test_budget.py index f29a999..e2ac360 100644 --- a/backend/tests/test_budget.py +++ b/backend/tests/test_budget.py @@ -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