64 lines
3.1 KiB
Bash
Executable file
64 lines
3.1 KiB
Bash
Executable file
#!/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
|