make test-frontend runs against a stack of its own

The suite creates and deletes flows, dashboards and users, and ran against
whatever stack was up, which is the dev instance's data. make test-stack starts
the compose project fluksio-test (compose.test.yml over the local stack's
files) with its own containers, volumes and image tags, served by the local
Traefik on app.test.localhost and api.test.localhost, and leaves it running.
The hostname is fixed, so it no longer comes off the running dev stack, and a
LAN stack makes no difference. The suite's default origin is the test stack.
This commit is contained in:
2026-10-15 16:15:32 +02:00
parent 70677dcc20
commit fbd886f7a7
7 changed files with 82 additions and 40 deletions
+1 -1
View File
@@ -28,7 +28,7 @@ export default defineConfig({
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
use: {
/* Base URL to use in actions like `await page.goto('/')`. Defaults to the
integrated stack (`make dev`), the only origin the API allows CORS from.
suite's own stack (`make test-stack`), never the dev instance's data.
Point PLAYWRIGHT_BASE_URL elsewhere to test another running server; the
API origin follows it (see tests/config.ts). */
baseURL: appUrl,
+2 -1
View File
@@ -29,7 +29,8 @@ export const firstSuperuserPassword = getEnvVar("FIRST_SUPERUSER_PASSWORD")
* instance. Both origins come from the same place instead: whatever the browser
* is pointed at is what teardown may write to.
*/
export const appUrl = process.env.PLAYWRIGHT_BASE_URL || "http://app.localhost"
export const appUrl =
process.env.PLAYWRIGHT_BASE_URL || "http://app.test.localhost"
export const apiUrl = process.env.PLAYWRIGHT_API_URL || apiOrigin(appUrl)
+3 -3
View File
@@ -11,9 +11,9 @@ import { apiUrl, firstSuperuser, firstSuperuserPassword } from "./config.ts"
* rather than after one is what makes this work at all: it happens even when
* the run that made the mess died.
*
* The suite runs against whatever stack is up, which is somebody's own
* instance with real flows in it, so the predicate has to be incapable of
* matching one. A name qualifies only if it has the shape every fixture has —
* `make test-frontend` runs against a stack of its own, but the suite can be
* pointed at any (PLAYWRIGHT_BASE_URL), and that may be somebody's own instance
* with real flows in it, so the predicate has to be incapable of matching one. A name qualifies only if it has the shape every fixture has —
* `test_<spec>_<base36 Date.now()>`, plus an optional `_<suffix>` for a second
* artefact of the same spec — and only if the timestamp it carries is an hour
* old, which nothing the run now starting is about to create can be.