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:
@@ -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],
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user