diff --git a/backend/scripts/erzeuge_ios_fixture.py b/backend/scripts/erzeuge_ios_fixture.py index 1bb3639..d0ea17d 100644 --- a/backend/scripts/erzeuge_ios_fixture.py +++ b/backend/scripts/erzeuge_ios_fixture.py @@ -40,7 +40,7 @@ from app.main import app # noqa: E402 ZIEL = Path(__file__).resolve().parents[2] / "ios" / "Tests" / "Fixtures" / "antworten.json" -def _seed(c: TestClient) -> None: +def _seed(c: TestClient) -> dict: """Genug Daten, dass jedes Feld einmal belegt ist. Leere Listen pruefen nichts: Ein falscher Feldname in einer Zeile faellt @@ -122,27 +122,44 @@ def _seed(c: TestClient) -> None: "type": "income", "date": heute, "account_id": zweitgiro["id"], "amount_cents": 7500, "payee": "Dauerauftrag"}) + # --- Nebenraeume ------------------------------------------------------ + # Ein Schlagwort, damit die Liste nicht leer ist. Die Markierung + # ("wird oft korrigiert") entsteht erst nach fuenf Anwendungen und laesst + # sich hier nicht erzwingen - dort bleibt die Liste leer. + c.post(f"/api/categories/{ausgabe['id']}/keywords", json={"word": "supermarkt"}) -PFADE = { - "version": "/api/version", - "ichSelbst": "/api/auth/me", - "einstellungen": "/api/settings", - "konten": "/api/accounts", - "kategoriegruppen": "/api/categories", - "schlagwoerter": "/api/tags", - "buchungen": "/api/transactions", - "uebertragsverknuepfungen": "/api/transactions/links", - "budget": "/api/budget/current", - "budgetvorlage": "/api/budget/template", - "abos": "/api/subscriptions", - "kontostaende": "/api/dashboard/balances", - "budgetfortschritt": "/api/dashboard/budget-progress", - "einnahmenAusgaben": "/api/dashboard/income-expense", - "letzteBuchungen": "/api/dashboard/recent", - "eingang": "/api/inbox", - "dubletten": "/api/transactions/dubletten", - "uebertragsvorschlaege": "/api/uebertraege/vorschlaege", -} + return {"kategorie": ausgabe["id"]} + + +def pfade(ids: dict) -> dict[str, str]: + """Welche Antwort unter welchem Namen in die Pruefdatei kommt.""" + return { + "version": "/api/version", + "ichSelbst": "/api/auth/me", + "einstellungen": "/api/settings", + "konten": "/api/accounts", + "kategoriegruppen": "/api/categories", + "schlagwoerter": "/api/tags", + "buchungen": "/api/transactions", + "uebertragsverknuepfungen": "/api/transactions/links", + "budget": "/api/budget/current", + "budgetvorlage": "/api/budget/template", + "abos": "/api/subscriptions", + "kontostaende": "/api/dashboard/balances", + "budgetfortschritt": "/api/dashboard/budget-progress", + "einnahmenAusgaben": "/api/dashboard/income-expense", + "letzteBuchungen": "/api/dashboard/recent", + "eingang": "/api/inbox", + "dubletten": "/api/transactions/dubletten", + "uebertragsvorschlaege": "/api/uebertraege/vorschlaege", + "schlagwoerter_der_kategorie": f"/api/categories/{ids['kategorie']}/keywords", + "markierteSchlagwoerter": "/api/categories/keywords/flagged", + "zweiterFaktor": "/api/auth/2fa/status", + # Bleibt leer: Eine Bankanbindung laesst sich ohne echten Anbieter nicht + # herstellen. Der Test prueft hier nur, dass sich die leere Liste lesen + # laesst - die Felder von BankConnectionOut deckt er nicht ab. + "bankverbindungen": "/api/bank/connections", + } def main() -> int: @@ -152,10 +169,10 @@ def main() -> int: if r.status_code != 200: print("Anmeldung fehlgeschlagen:", r.text) return 1 - _seed(c) + ids = _seed(c) heraus = {} - for name, pfad in PFADE.items(): + for name, pfad in pfade(ids).items(): antwort = c.get(pfad) if antwort.status_code != 200: print(f"{pfad} antwortet {antwort.status_code}: {antwort.text[:200]}") diff --git a/ios/Tests/Fixtures/antworten.json b/ios/Tests/Fixtures/antworten.json index 8b81610..3bd57f2 100644 --- a/ios/Tests/Fixtures/antworten.json +++ b/ios/Tests/Fixtures/antworten.json @@ -13,7 +13,7 @@ "must_change_password": false, "must_change_password_reason": null, "totp_enabled": false, - "created_at": "2026-10-21T19:21:28.289884", + "created_at": "2026-10-21T19:57:08.443998", "mfa_setup_required": false }, "einstellungen": [ @@ -129,7 +129,7 @@ "is_archived": false, "excluded_from_stats": false, "spending_is_good": false, - "keyword_count": 0 + "keyword_count": 1 }, { "id": 2, @@ -1339,7 +1339,7 @@ "fx_rate": null, "counter_amount_cents": null, "counter_currency": null, - "created_at": "2026-10-21T19:21:28.451708" + "created_at": "2026-10-21T19:57:08.586391" } ], "dubletten": { @@ -1400,5 +1400,19 @@ } } ] - } + }, + "schlagwoerter_der_kategorie": [ + { + "id": 1, + "category_id": 1, + "word": "supermarkt", + "amount_cents": null + } + ], + "markierteSchlagwoerter": [], + "zweiterFaktor": { + "enabled": false, + "recovery_codes_left": 0 + }, + "bankverbindungen": [] }