Finanzmanager/tests/e2e/run.sh
fds2610-bot 5695e2e3df Fix n.n.: E2E-Läufe sichern Einstellungen, Kippschalter statt Ankreuzfeldern
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-09-29 11:37:52 +02:00

64 lines
3.1 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
# Die Tests laufen gegen die echte Instanz und speichern dabei Formulare des
# Einstellungsdialogs. Deshalb: Einstellungen sichern, nach dem Lauf – auch nach
# einem Abbruch – wiederherstellen. Bleibt nach einem harten Abbruch (kill -9) eine
# Sicherung liegen, spielt der nächste Lauf sie zuerst ein; sie hält den echten Stand.
PROJEKT=$(CDPATH= cd -- "$TEST_DIR/../.." && pwd)
einstellungen() { (cd "$PROJEKT" && docker compose exec -T -u www-data php php scripts/e2e-einstellungen.php "$1" --still); }
einstellungen wiederherstellen \
|| echo "WARNUNG: Alte Einstellungssicherung nicht einspielbar." >&2
einstellungen sichern \
|| echo "WARNUNG: Einstellungen nicht gesichert — der Lauf kann sie verändern." >&2
trap 'einstellungen wiederherstellen || echo "WARNUNG: Einstellungen nicht wiederhergestellt (scripts/e2e-einstellungen.php wiederherstellen)." >&2' EXIT
trap 'exit 130' INT TERM
# Zugangsdaten des Testnutzers durchreichen; der Runner kennt nur BASE_URL.
cd "$RUNNER_DIR"
TEST_DIR="$TEST_DIR" BASE_URL="$BASE_URL" docker compose run --rm \
${E2E_USER:+-e E2E_USER="$E2E_USER"} \
${E2E_PASSWORD:+-e E2E_PASSWORD="$E2E_PASSWORD"} \
playwright