feat: Start/Ende fuer Fixposten in der GUI + Datumsvalidierung
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -225,6 +225,18 @@ def test_planning_page_has_all_sections(client):
|
||||
assert heading in r.text
|
||||
|
||||
|
||||
def test_planung_fixposten_zeigt_start_und_ende(client, db):
|
||||
client.post("/login", data={"username": "admin", "password": "geheim"})
|
||||
db.add(RecurringItem(name="Befristet-GUI", amount=Decimal("-5.00"),
|
||||
rhythm="monthly", due_day=1,
|
||||
start_date=date(2026, 1, 1), end_date=date(2026, 12, 31)))
|
||||
db.commit()
|
||||
r = client.get("/planung").text
|
||||
assert "<th>Start</th>" in r and "<th>Ende</th>" in r
|
||||
assert "01.01.2026" in r and "31.12.2026" in r
|
||||
assert 'name="start_date"' in r and 'name="end_date"' in r
|
||||
|
||||
|
||||
def test_planning_page_shows_empty_suggestions_hint(client):
|
||||
# UX-Regel: das "Vorschläge aus Buchungen"-Fieldset ist immer sichtbar,
|
||||
# auch ohne Daten - statt komplett zu verschwinden zeigt es einen Hinweis.
|
||||
|
||||
@@ -87,6 +87,30 @@ def test_suggest_recurring_two_months_no_suggestion(db):
|
||||
assert suggest_recurring(db) == []
|
||||
|
||||
|
||||
def test_recurring_ende_vor_start_wird_abgelehnt(client):
|
||||
r = client.post("/api/recurring", headers=H, json={
|
||||
"name": "Falschrum", "amount": "-10.00", "rhythm": "monthly", "due_day": 1,
|
||||
"start_date": "2026-10-01", "end_date": "2026-09-01"})
|
||||
assert r.status_code == 422
|
||||
|
||||
|
||||
def test_recurring_start_ende_roundtrip_und_patch_validierung(client):
|
||||
r = client.post("/api/recurring", headers=H, json={
|
||||
"name": "Befristet", "amount": "-10.00", "rhythm": "monthly", "due_day": 1,
|
||||
"start_date": "2026-01-01", "end_date": "2026-12-31"})
|
||||
assert r.status_code == 201
|
||||
item = r.json()
|
||||
assert item["start_date"] == "2026-01-01" and item["end_date"] == "2026-12-31"
|
||||
# PATCH, der Ende vor den (bestehenden) Start schieben will -> 422:
|
||||
bad = client.patch(f"/api/recurring/{item['id']}", headers=H,
|
||||
json={"end_date": "2025-06-30"})
|
||||
assert bad.status_code == 422
|
||||
# Datum explizit loeschen (null) ist erlaubt:
|
||||
ok = client.patch(f"/api/recurring/{item['id']}", headers=H,
|
||||
json={"end_date": None})
|
||||
assert ok.status_code == 200 and ok.json()["end_date"] is None
|
||||
|
||||
|
||||
def test_suggest_recurring_excludes_existing_recurring_item(db):
|
||||
acc = Account(bank="dkb", iban="DE01", name="G", type="giro")
|
||||
db.add(acc)
|
||||
|
||||
Reference in New Issue
Block a user