Files
eleith 7802f134c1
ci/woodpecker/pr/calendar Pipeline was successful
ci/woodpecker/pr/cli Pipeline was successful
ci/woodpecker/pr/config Pipeline was successful
ci/woodpecker/pr/db Pipeline was successful
ci/woodpecker/pr/jobs Pipeline was successful
ci/woodpecker/pr/video-chat Pipeline was successful
ci/woodpecker/pr/web Pipeline was successful
ci/woodpecker/pr/worker Pipeline was successful
ci/woodpecker/push/calendar Pipeline was successful
ci/woodpecker/push/cli Pipeline was successful
ci/woodpecker/push/config Pipeline was successful
ci/woodpecker/push/db Pipeline was successful
ci/woodpecker/push/jobs Pipeline was successful
ci/woodpecker/push/video-chat Pipeline was successful
ci/woodpecker/push/web Pipeline was successful
ci/woodpecker/push/worker Pipeline was successful
refactor(web): replace Auth.js with stateless Better Auth
2026-10-29 16:38:37 -07:00

41 lines
1.4 KiB
TypeScript

import type { Cookie, Page } from '@playwright/test';
// Matches auth.credentials in the fixture config.
export const ADMIN = { username: 'admin', password: 'e2e-admin-password' };
// Each worker has its own module state and server. Reuse only stateless auth cookies,
// never a test's theme/timezone preferences or other browser state.
const sessions = new Map<string, Cookie[]>();
const sessionCookie = /^(?:__Secure-)?better-auth\.session_(?:token|data)(?:\.\d+)?$/;
async function submitAdminForm(page: Page): Promise<void> {
await page.getByLabel('Username').fill(ADMIN.username);
await page.getByLabel('Password').fill(ADMIN.password);
await page.getByRole('button', { name: 'Sign in' }).click();
await page.waitForURL('**/admin');
}
// Auth-critical coverage must exercise the real form, even when a session is cached.
export async function signInAsAdminViaForm(page: Page): Promise<void> {
await page.goto('/signin');
await submitAdminForm(page);
}
export async function signInAsAdmin(page: Page): Promise<void> {
await page.goto('/signin');
const origin = new URL(page.url()).origin;
const cached = sessions.get(origin);
if (cached) {
await page.context().addCookies(cached);
await page.goto('/admin');
await page.waitForURL('**/admin');
return;
}
await submitAdminForm(page);
sessions.set(
origin,
(await page.context().cookies(origin)).filter((cookie) => sessionCookie.test(cookie.name))
);
}