forked from mirror/crumbs-original
Every test in the `app` project submitted the login form through the authenticatedPage fixture: a page load, an Argon2 verification on the server, a redirect and a networkidle wait. Over 137 tests that was roughly half of the median test's 1.8s. A new `login-state` setup project (tests/e2e/auth.setup.ts) authenticates once after auth.spec has created the account and saves the session cookie to data/test-storage-state.json. The `app` project loads it into every context, so setupAndLogin takes its "session still valid" path and the fixture is reduced to a page load. pwa.spec and mcp.spec describe anonymous visitors and opt out with an empty storageState so their baseline is unchanged. Local run, 4 workers: summed test time 276s -> 256s, median 1.8s -> 1.6s. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
25 lines
979 B
TypeScript
25 lines
979 B
TypeScript
import { writeFileSync } from 'fs';
|
|
import { randomUUID } from 'crypto';
|
|
|
|
export const TEST_CREDENTIALS_FILE = './data/test-credentials.json';
|
|
/** Admin session cookie captured by auth.setup.ts and shared by the `app` project. */
|
|
export const STORAGE_STATE_FILE = './data/test-storage-state.json';
|
|
|
|
export default function globalSetup() {
|
|
// The test database is wiped before the webServer starts (see the
|
|
// webServer.command in playwright.config.ts), NOT here: Playwright brings
|
|
// the webServer up before globalSetup runs, so deleting the SQLite files
|
|
// here would orphan the server's open database onto a deleted inode and
|
|
// tests that read the database file directly would see an empty schema.
|
|
|
|
// Generate random passwords for this test run, shared across all workers
|
|
writeFileSync(
|
|
TEST_CREDENTIALS_FILE,
|
|
JSON.stringify({
|
|
testPassword: `test-${randomUUID()}`,
|
|
collabPassword: `collab-${randomUUID()}`,
|
|
userPassword: `user-${randomUUID()}`
|
|
})
|
|
);
|
|
}
|