feat: Buchen-Knopf auch unter der Prüfliste + Verlauf aufräumen

- Bei mehreren hundert Zeilen ist der Knopf oben längst aus dem Bild gescrollt;
  unter der Liste steht jetzt derselbe.
- Rückgängig gemachte Importe lassen sich aus dem Verlauf entfernen. Nur diese:
  solange ein Import steht, ist sein Eintrag die einzige Möglichkeit, seine
  Buchungen wieder loszuwerden – der Server lehnt das sonst ab.

Test für beide Fälle des neuen Endpunkts; 92 grün.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Guido
2026-08-21 09:20:29 +02:00
co-authored by Claude Opus 4.8
parent ab5410ca6f
commit 8d767e728a
7 changed files with 82 additions and 5 deletions
+20
View File
@@ -519,3 +519,23 @@ def test_reconciliation_flags_rows_waiting_for_target(admin):
assert rec["difference_cents"] == 9200
assert rec["first_mismatch"]["expected_cents"] == 9200
assert rec["first_mismatch"]["actual_cents"] == 0
def test_remove_undone_batch_from_history(admin):
"""Rückgängig gemachte Importe lassen sich aus dem Verlauf entfernen –
laufende nicht, sonst verlöre man die Möglichkeit, sie zurückzunehmen."""
giro = _account(admin, name="Verlauf", currency="EUR")
_account(admin, name="Spar Verlauf", type="sparkonto", currency="EUR",
identifiers=[{"kind": "iban", "value": "CH93 0076 2011 6238 5295 7"}])
rows = _preview(admin, giro["id"]).json()["rows"]
batch = admin.post("/api/imports/commit",
json={"account_id": giro["id"], "filename": "v.csv", "rows": rows}).json()
# Solange der Import steht, bleibt der Eintrag bestehen.
r = admin.delete(f"/api/imports/batches/{batch['id']}/record")
assert r.status_code == 400
assert any(b["id"] == batch["id"] for b in admin.get("/api/imports/batches").json())
admin.delete(f"/api/imports/batches/{batch['id']}") # rückgängig machen
assert admin.delete(f"/api/imports/batches/{batch['id']}/record").status_code == 204
assert not any(b["id"] == batch["id"] for b in admin.get("/api/imports/batches").json())