Finanzmanager/tests/e2e/run.sh
fds2610-bot a81ec1ceba Fix #64: E2E-Datenbestand vor jedem Lauf aufräumen und neu aufbauen
Die Browser-Tests legten ihre Konten, Kategorien und Buchungen bei jedem Lauf
neu an, weggeräumt hat sie niemand: Zuletzt standen über dreitausend Zeilen
Testdaten in der Datenbank – vierzig „E2E Bankprovision …“ hintereinander im
Kategoriefilter, und kein Bildschirmfoto eines fehlgeschlagenen Tests war mehr
zu gebrauchen.

scripts/e2e-aufraeumen.php räumt weg, was am Testnutzer hängt – nicht, was nach
Testdaten aussieht. Ein Namensmuster übersähe die Buchung „Supermarkt“ und träfe
irgendwann etwas Echtes; die Fremdschlüssel dagegen sagen genau, was zu diesem
Nutzer gehört, und nehmen über ihre Kaskaden auch die Zeilen ohne eigene
benutzer_id mit. Der Nutzer selbst bleibt stehen, und er muss den Anzeigenamen
tragen, den scripts/e2e-benutzer.php setzt: Wer E2E_USER versehentlich auf seinen
eigenen Zugang stellt, bekommt einen Abbruch statt eines leeren Datenbestands.

Aufgerufen wird es vor dem Lauf, nicht danach – ein abgebrochener Lauf
hinterlässt sonst einen Bestand, an den niemand mehr denkt, und so bleiben die
Daten des letzten Laufs bis zum nächsten für die Fehlersuche stehen.

Das deckte auf, dass sieben Tests auf den Resten früherer Läufe standen: Die
Auswertungen prüfen, dass ein Bericht eine Tabelle statt eines Platzhalters
zeigt, das Cockpit, dass „Übrige Konten“ eine Ebene tiefer führt – Daten dafür
legte keiner von ihnen an. scripts/e2e-grundbestand.php stellt deshalb einen
festgelegten Bestand her, dessen Zuschnitte an genau diesen Tests hängen: mehr
Konten als Vermoegensentwicklung::SERIEN, Buchungen in jedem Monat des laufenden
Jahres, ein Vorjahr für den Vergleichsbericht, ein Depot mit Wertpapiergeschäft.
Test 41 prüft jede dieser Grenzen einzeln und nennt den Test, der daran hängt.

87 E2E-Tests grün, in 1,3 statt 2,7 Minuten – die Listen rendern keine
Tausenden Altzeilen mehr.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AQ57wQWZ4xKHcKmp26bzgr
2026-09-04 17:36:13 +02:00

50 lines
2.2 KiB
Bash
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/sh
# E2E-Tests über den generischen e2e-runner ausführen.
#
# Die Tests sind OPTIONAL: Fehlt die Infrastruktur (Docker, Runner-Projekt,
# gepulltes Playwright-Image), wird nur gewarnt und mit Exit-Code 0
# übersprungen — es wird nichts nachinstalliert oder gepullt.
set -eu
TEST_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
RUNNER_DIR=${E2E_RUNNER_DIR:-$HOME/projects/e2e-runner}
BASE_URL=${BASE_URL:-http://host.docker.internal:8000}
skip() {
echo "WARNUNG: $1 — E2E-Tests werden übersprungen." >&2
exit 0
}
command -v docker >/dev/null 2>&1 || skip "Docker nicht gefunden"
docker info >/dev/null 2>&1 || skip "Docker-Daemon nicht erreichbar"
[ -f "$RUNNER_DIR/docker-compose.yml" ] || skip "e2e-runner-Projekt nicht gefunden ($RUNNER_DIR)"
IMAGE=$(sed -n 's/^ *image: *//p' "$RUNNER_DIR/docker-compose.yml" | head -n1)
[ -n "$IMAGE" ] || skip "Playwright-Image im Compose-File nicht ermittelbar"
docker image inspect "$IMAGE" >/dev/null 2>&1 \
|| skip "Playwright-Image $IMAGE nicht vorhanden (docker pull $IMAGE)"
# Vor dem Lauf aufräumen, nicht danach: Ein abgebrochener Lauf hinterlässt sonst
# einen Bestand, an den niemand mehr denkt – und bis hierher bleiben die Daten
# des letzten Laufs für die Fehlersuche stehen. E2E_KEIN_AUFRAEUMEN=1 lässt sie
# stehen, wer sie über den nächsten Lauf hinaus braucht.
if [ "${E2E_KEIN_AUFRAEUMEN:-0}" != "1" ]; then
PROJEKT=$(CDPATH= cd -- "$TEST_DIR/../.." && pwd)
fm() { (cd "$PROJEKT" && docker compose exec -T -u www-data php php "$@"); }
# Der Grundbestand nur nach erfolgreichem Aufräumen: Sonst stünde er ein
# zweites Mal neben dem alten und verfälschte, was die Tests vorfinden.
if fm scripts/e2e-aufraeumen.php --still; then
fm scripts/e2e-grundbestand.php --still \
|| echo "WARNUNG: Grundbestand fehlgeschlagen — Tests, die einen Bestand erwarten, fallen aus." >&2
else
echo "WARNUNG: Aufräumen fehlgeschlagen — der Lauf beginnt auf dem alten Bestand." >&2
fi
fi
# Zugangsdaten des Testnutzers durchreichen; der Runner kennt nur BASE_URL.
cd "$RUNNER_DIR"
TEST_DIR="$TEST_DIR" BASE_URL="$BASE_URL" exec docker compose run --rm \
${E2E_USER:+-e E2E_USER="$E2E_USER"} \
${E2E_PASSWORD:+-e E2E_PASSWORD="$E2E_PASSWORD"} \
playwright