All checks were successful
Premier test E2E : welcome -> categories -> produit -> ajout panier -> panier -> paiement -> confirmation. Tourne headless dans le conteneur Playwright officiel, contre une stack JETABLE isolee (tests/e2e/run.sh : `-p wakdoe2e`, override container_name + sans port hote, jointe par --add-host). Zero dependance Node/browser sur l'hote, ne touche aucune stack existante. - playwright.config.js (CJS), tests/e2e/borne.spec.js, tests/e2e/run.sh, tests/e2e/docker-compose.e2e.yml (override jetable). - @playwright/test en devDep ; le job CI js-tests skip le download des browsers (PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1, validee : npm ci + 7 tests JS verts). - Hostnames de test en .test (Chromium resout *.localhost en dur vers 127.0.0.1). Etape 1 de l'initiative E2E (lance a la main). Suite : parcours admin, puis job CI.
59 lines
2.4 KiB
Bash
Executable file
59 lines
2.4 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
#
|
|
# E2E borne : monte une stack JETABLE isolee, lance Playwright (conteneur officiel,
|
|
# headless) contre elle, puis demonte tout. Ne touche a aucune stack existante.
|
|
#
|
|
# tests/e2e/run.sh
|
|
#
|
|
# Pre-requis : Docker. Aucune dependance Node/Playwright sur l'hote (tout en conteneur).
|
|
#
|
|
set -euo pipefail
|
|
|
|
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
cd "$ROOT"
|
|
|
|
PROJECT=wakdoe2e
|
|
PW_VERSION=1.49.1 # doit matcher devDependencies["@playwright/test"] de package.json
|
|
NET="${PROJECT}_wakdo_internal"
|
|
|
|
ENVFILE="$(mktemp)"
|
|
cp .env.example "$ENVFILE" # template local-first : marche tel quel (valeurs dev)
|
|
# Hostnames de TEST en .test (pas .localhost) : Chromium/curl resolvent *.localhost en
|
|
# dur vers 127.0.0.1 (RFC 6761) et ignorent --add-host. .test n'est pas special -> joignable.
|
|
perl -pi -e 's/^APP_HOST_KIOSK=.*/APP_HOST_KIOSK=kiosk.wakdo.test/; s/^APP_HOST_ADMIN=.*/APP_HOST_ADMIN=admin.wakdo.test/;' "$ENVFILE"
|
|
COMPOSE="docker compose -p $PROJECT --env-file $ENVFILE -f docker-compose.yml -f tests/e2e/docker-compose.e2e.yml"
|
|
|
|
cleanup() { echo "[e2e] teardown"; $COMPOSE down -v >/dev/null 2>&1 || true; rm -f "$ENVFILE"; }
|
|
trap cleanup EXIT
|
|
|
|
echo "[e2e] build + up stack jetable ($PROJECT)"
|
|
$COMPOSE up -d --build
|
|
|
|
echo "[e2e] attente migrate (completion)"
|
|
for _ in $(seq 1 40); do
|
|
st="$(docker inspect -f '{{.State.Status}}' wakdoe2e-migrate 2>/dev/null || echo NA)"
|
|
code="$(docker inspect -f '{{.State.ExitCode}}' wakdoe2e-migrate 2>/dev/null || echo NA)"
|
|
[ "$st" = "exited" ] && [ "$code" = "0" ] && { echo "[e2e] migrate OK"; break; }
|
|
[ "$st" = "exited" ] && [ "$code" != "0" ] && { echo "[e2e] migrate ECHEC ($code)"; docker logs wakdoe2e-migrate; exit 1; }
|
|
sleep 2
|
|
done
|
|
|
|
echo "[e2e] attente web healthy"
|
|
for _ in $(seq 1 40); do
|
|
[ "$(docker inspect -f '{{.State.Health.Status}}' wakdoe2e-web 2>/dev/null || echo NA)" = "healthy" ] && break
|
|
sleep 2
|
|
done
|
|
|
|
WEB_IP="$(docker inspect -f "{{(index .NetworkSettings.Networks \"$NET\").IPAddress}}" wakdoe2e-web)"
|
|
echo "[e2e] web @ $WEB_IP ($NET)"
|
|
|
|
echo "[e2e] Playwright (conteneur officiel v$PW_VERSION)"
|
|
docker run --rm \
|
|
--network "$NET" \
|
|
--add-host "kiosk.wakdo.test:$WEB_IP" \
|
|
--add-host "admin.wakdo.test:$WEB_IP" \
|
|
-v "$ROOT":/work -w /work \
|
|
-e BASE_URL="http://kiosk.wakdo.test" \
|
|
-e CI=1 \
|
|
"mcr.microsoft.com/playwright:v${PW_VERSION}-jammy" \
|
|
bash -c "npm install --no-audit --no-fund --silent && npx playwright test"
|