feat: Grafana-Panel Planung nach Kategorie inkl. Kreditraten (A11-T3)
Neue Tabelle planning_monthly (Monatssummen je Kategorie aus wiederkehrenden Posten, Einmalposten und allen Kreditraten), Service planning_chart mit refresh_planning_chart (Advisory-Lock, komplette Neuschreibung), GUI-Hooks in index/planung_page ueber _safe_refresh, neues Barchart-Panel im Grafana-Dashboard (Panel 5). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -565,3 +565,22 @@ def test_v_projection_zeigt_ist_serie_und_keine_alten_punkte():
|
||||
assert "p.day > CURRENT_DATE" in body
|
||||
names = list(VIEWS)
|
||||
assert names.index("v_balance_total") < names.index("v_projection")
|
||||
|
||||
|
||||
def test_planung_seite_befuellt_planungs_diagramm(client, db):
|
||||
from app.models.tables import PlanningMonthly
|
||||
client.post("/login", data={"username": "admin", "password": "geheim"})
|
||||
db.add(PlannedItem(name="Kauf", amount=Decimal("-10.00"),
|
||||
due=date.today() + timedelta(days=3)))
|
||||
db.commit()
|
||||
assert client.get("/planung").status_code == 200
|
||||
assert db.query(PlanningMonthly).count() == 1
|
||||
|
||||
|
||||
def test_planungs_refresh_fehler_bricht_seiten_nicht(client, monkeypatch):
|
||||
def kaputt(session, today):
|
||||
raise RuntimeError("absichtlich kaputt")
|
||||
monkeypatch.setattr("app.routers.gui.refresh_planning_chart", kaputt)
|
||||
client.post("/login", data={"username": "admin", "password": "geheim"})
|
||||
for path in ("/", "/planung"):
|
||||
assert client.get(path).status_code == 200, path
|
||||
|
||||
Reference in New Issue
Block a user