The e2e suite names its own origins, and refuses a live instance
`tests/utils/api.ts` took the API origin from `VITE_API_URL`, which `tests/config.ts` loads out of `app/.env`. In a checkout configured for a deployment that names the deployment — so the browser went to the local stack while every setup and teardown call, `deleteAll` included, went to the live one. `privateApi.ts` had the same reading, and it creates users. Both origins now come from one place: `PLAYWRIGHT_BASE_URL`, with the API derived from it (`app.<domain>` → `api.<domain>`) or named outright by `PLAYWRIGHT_API_URL`, which is what CI and the compose service set. Nothing in the suite reads `VITE_API_URL` any more. Belt and braces, since a stack served under a real domain answers to the same names its production instance does: a global setup resolves both origins and refuses anything that is not loopback or a private range, before a test runs. `PLAYWRIGHT_ALLOW_PUBLIC=1` says you meant it. `make test-frontend` is now that safe run — the Playwright image on the proxy network with both names mapped onto Traefik by address, as the host user so it does not leave root-owned results behind. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NUb8YpL2s3gmN9WTACTt4q
This commit is contained in:
@@ -123,8 +123,30 @@ DB_HOST = $(shell docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAdd
|
||||
test-backend: ## Run backend tests (pytest + coverage)
|
||||
cd backend && $(if $(DB_HOST),POSTGRES_SERVER=$(DB_HOST)) uv run bash scripts/tests-start.sh
|
||||
|
||||
test-frontend: ## Run frontend tests (Playwright e2e)
|
||||
cd frontend && bunx playwright test
|
||||
# The hostname the stack is served under. A checkout configured for a
|
||||
# deployment carries the deployment's domain, and *.fluksio.com resolves to the
|
||||
# live instance from here — which is why the run below maps both names onto the
|
||||
# local Traefik by address and never lets DNS decide.
|
||||
DOMAIN = $(shell sed -n 's/^DOMAIN=//p' $(COMPOSE_ROOT)/.env | head -1)
|
||||
PW_VERSION = $(shell sed -n 's/.*"@playwright\/test": "[^0-9]*\([0-9.]*\)".*/\1/p' frontend/package.json | head -1)
|
||||
|
||||
test-frontend: ## Run frontend tests (Playwright e2e) against the local stack
|
||||
@ip=$$(docker network inspect proxy \
|
||||
--format '{{range .Containers}}{{if eq .Name "fluksio-app-proxy-1"}}{{.IPv4Address}}{{end}}{{end}}' \
|
||||
2>/dev/null | cut -d/ -f1); \
|
||||
[ -n "$$ip" ] || { echo " ✗ proxy network or Traefik container not found — is the stack up?"; exit 1; }; \
|
||||
docker run --rm --network proxy --ipc=host \
|
||||
--user $$(id -u):$$(id -g) -e HOME=/tmp \
|
||||
--add-host app.$(DOMAIN):$$ip --add-host api.$(DOMAIN):$$ip \
|
||||
-v $(COMPOSE_ROOT):/app -w /app/frontend \
|
||||
-e PLAYWRIGHT_BASE_URL=http://app.$(DOMAIN) \
|
||||
-e PLAYWRIGHT_API_URL=http://api.$(DOMAIN) \
|
||||
-e HOST_RESOLVER_RULES="MAP app.$(DOMAIN) $$ip, MAP api.$(DOMAIN) $$ip" \
|
||||
-e CI=$${CI:-1} \
|
||||
-e FIRST_SUPERUSER="$$(sed -n 's/^FIRST_SUPERUSER=//p' $(COMPOSE_ROOT)/.env | head -1)" \
|
||||
-e FIRST_SUPERUSER_PASSWORD="$$(sed -n 's/^FIRST_SUPERUSER_PASSWORD=//p' $(COMPOSE_ROOT)/.env | head -1)" \
|
||||
mcr.microsoft.com/playwright:v$(PW_VERSION)-noble \
|
||||
npx playwright test $(PLAYWRIGHT_ARGS)
|
||||
|
||||
# Load and chaos against a *running* stack, never part of `make test`: it
|
||||
# restarts this stack's containers. `SOAK_ARGS="--dry-run"` only looks.
|
||||
|
||||
Reference in New Issue
Block a user