fix: "Nicht in Auswertungen einrechnen" galt fuer Sparen nicht
Wer den Haken an einer Kategorie setzt, sagt damit ausdruecklich: nicht ins Budget, nicht ins Dashboard, nicht in die Statistik. Die Sparen-Auswertung las ihn nicht – das Geld stand danach im Ringdiagramm, obwohl der Nutzer genau das abbestellt hatte. Beide Uebertrags-Wege halten sich jetzt daran, der am Stueck wie der aus zwei verknuepften Buchungen. Der Haken an der Kategorie gewinnt; ein Sparziel am Konto darf ihn nicht stillschweigend aushebeln. Und weil beides zusammen keinen Sinn ergibt, sagt es das Konto-Formular jetzt auch: Waehlt man dort eine Kategorie mit Haken, steht darunter, dass so nichts im Budget erscheinen wird. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
e0688ab95e
commit
b69c383a72
@@ -195,3 +195,61 @@ def test_sparziel_laesst_sich_wieder_loesen(admin):
|
||||
r = admin.patch(f"/api/accounts/{konto['id']}", json={"savings_category_id": None})
|
||||
assert r.status_code == 200, r.text
|
||||
assert r.json()["savings_category_id"] is None
|
||||
|
||||
|
||||
def _neutral_setzen(admin, kategorie_id, wert=True):
|
||||
r = admin.patch(f"/api/categories/{kategorie_id}",
|
||||
json={"excluded_from_stats": wert})
|
||||
assert r.status_code == 200, r.text
|
||||
return r.json()
|
||||
|
||||
|
||||
def test_nicht_in_auswertungen_schlaegt_das_sparziel(admin):
|
||||
"""Der Haken an der Kategorie ist eine ausdrueckliche Ansage. Ein Sparziel
|
||||
am Konto darf sie nicht stillschweigend aushebeln – sonst stuende das Geld
|
||||
in Budget und Ringdiagramm, obwohl der Nutzer genau das abbestellt hat."""
|
||||
sparen = _kategorie(admin, "Sparen & Investments")
|
||||
try:
|
||||
# Der Haken MUSS vor dem Ablesen sitzen: Er nimmt auch das Sparen der
|
||||
# Nachbartests aus der Auswertung, und die Testdatenbank lebt ueber den
|
||||
# ganzen Lauf.
|
||||
_neutral_setzen(admin, sparen, True)
|
||||
vorher = _ist(admin, sparen)
|
||||
s = _sparen_szenario(admin)
|
||||
assert _ist(admin, s["sparen"]) == vorher, "trotz Haken in der Auswertung"
|
||||
finally:
|
||||
_neutral_setzen(admin, sparen, False)
|
||||
|
||||
|
||||
def test_ohne_haken_zaehlt_dasselbe_konto_wieder(admin):
|
||||
"""Die Gegenprobe: Es liegt WIRKLICH am Haken und nicht daran, dass der
|
||||
Uebertrag ohnehin nicht gefunden wurde."""
|
||||
sparen = _kategorie(admin, "Sparen & Investments")
|
||||
_neutral_setzen(admin, sparen, False)
|
||||
ohne_haken = _ist(admin, sparen) # Stand vor dem Szenario, ohne Haken
|
||||
_neutral_setzen(admin, sparen, True)
|
||||
mit_haken = _ist(admin, sparen)
|
||||
|
||||
s = _sparen_szenario(admin, betrag=33300)
|
||||
assert _ist(admin, s["sparen"]) == mit_haken, "mit Haken doch gezaehlt"
|
||||
|
||||
_neutral_setzen(admin, sparen, False)
|
||||
assert _ist(admin, s["sparen"]) == ohne_haken + 33300, "ohne Haken nicht gezaehlt"
|
||||
|
||||
|
||||
def test_uebertrag_am_stueck_haelt_sich_auch_daran(admin):
|
||||
"""Dieselbe Regel fuer die andere Form des Uebertrags."""
|
||||
admin.put("/api/settings/budget_start_day", params={"value": "1"})
|
||||
sparen = _kategorie(admin, "Sparen & Investments")
|
||||
try:
|
||||
_neutral_setzen(admin, sparen, True)
|
||||
vorher = _ist(admin, sparen)
|
||||
giro = _konto(admin, "Giro Stueck neutral")
|
||||
pocket = _konto(admin, "Pocket Stueck neutral", savings_category_id=sparen)
|
||||
r = admin.post("/api/transactions", json={
|
||||
"type": "transfer", "date": str(date.today()), "account_id": giro["id"],
|
||||
"to_account_id": pocket["id"], "amount_cents": 9900})
|
||||
assert r.status_code == 201, r.text
|
||||
assert _ist(admin, sparen) == vorher
|
||||
finally:
|
||||
_neutral_setzen(admin, sparen, False)
|
||||
|
||||
Reference in New Issue
Block a user