Adds a Playwright suite (App/tests/staging/) that logs into the running staging instance (ppms-staging, :3200) and verifies each closed portal issue is actually fixed — feature level, driving the real UI, one spec per issue. To make credential login possible against the prod-mirror pelagia_test (which only holds real, mostly SSO-only users), prisma/seed-test-users.ts idempotently seeds one known-password @pelagia.local user per role, and automation/refresh-test-db.sh runs it after every daily refresh so the logins persist on staging. Result against staging: 41 passed, 1 skipped (#10 — no attachment data on staging). Two closed issues were found NOT fixed and are recorded as documented test.fail(): - #13 Accounts "payments completed this month" card is absent. - #24/#40 logout tooltip still reads "Sign out" (pipeline test issues). Docs/TESTING.md documents the suite, the seeded users, how to run it against staging, and the full issue -> script mapping. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
43 lines
1.7 KiB
TypeScript
43 lines
1.7 KiB
TypeScript
import { defineConfig, devices } from "@playwright/test";
|
|
|
|
/**
|
|
* Playwright config for verifying closed issues against a RUNNING staging instance
|
|
* (pm2 `ppms-staging`, port 3200 on pms1), reached over an SSH tunnel:
|
|
*
|
|
* ssh -N -L 3200:localhost:3200 shad0w@<pms1>
|
|
* PLAYWRIGHT_BASE_URL=http://localhost:3200 \
|
|
* pnpm exec playwright test --config playwright.staging.config.ts
|
|
*
|
|
* Unlike playwright.config.ts this does NOT start a local dev server — it drives the
|
|
* already-deployed staging build. Login uses the seeded `@pelagia.local` test users
|
|
* (prisma/seed-test-users.ts), so no production credentials are required.
|
|
*
|
|
* Staging runs `next dev`, so the first hit on a route compiles on demand and can be
|
|
* slow — timeouts are deliberately generous and workers default to 1 to keep the
|
|
* shared staging DB state predictable across specs.
|
|
*/
|
|
export default defineConfig({
|
|
testDir: "./tests/staging",
|
|
fullyParallel: false,
|
|
forbidOnly: !!process.env.CI,
|
|
retries: 1,
|
|
workers: 1,
|
|
reporter: [["list"], ["html", { open: "never", outputFolder: "playwright-report-staging" }]],
|
|
timeout: 90_000,
|
|
expect: { timeout: 20_000 },
|
|
use: {
|
|
baseURL: process.env.PLAYWRIGHT_BASE_URL ?? "http://localhost:3200",
|
|
trace: "retain-on-failure",
|
|
navigationTimeout: 45_000,
|
|
actionTimeout: 20_000,
|
|
},
|
|
projects: [
|
|
{
|
|
name: "chromium",
|
|
// Use a system browser channel (Google Chrome) so the suite does not depend on
|
|
// the bundled chrome-headless-shell download. Override with PW_CHANNEL=msedge
|
|
// if Chrome is unavailable. Both ship on a standard Windows install.
|
|
use: { ...devices["Desktop Chrome"], channel: process.env.PW_CHANNEL ?? "chrome" },
|
|
},
|
|
],
|
|
});
|