Files
triqura-ecd/tests/playwright/auth.setup.ts
colinislit 9195eb9fed test: Cypress en Playwright e2e-suites voor login, agenda, cortex en verpleegrapportage
Configs voor beide runners, login via session caching, AI-chat
mocks (SSE) voor deterministische Cortex-tests. Supabase local
config toegevoegd. Auth-state en reports zijn gitignored.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 23:16:17 +02:00

50 lines
1.7 KiB
TypeScript

import { test as setup } from '@playwright/test';
import path from 'path';
const authFile = path.join(process.cwd(), 'tests/playwright/.auth/user.json');
const DEMO_EMAIL = process.env.TEST_EMAIL ?? 'demo@mini-ecd.demo';
const DEMO_PASSWORD = process.env.TEST_PASSWORD ?? 'Demo2024!';
const SUPABASE_URL = process.env.NEXT_PUBLIC_SUPABASE_URL!;
const SUPABASE_ANON_KEY = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!;
setup('authenticate as demo user', async ({ page, request }) => {
// Authenticate via Supabase REST API - faster and more reliable than UI form
const response = await request.post(`${SUPABASE_URL}/auth/v1/token?grant_type=password`, {
headers: {
apikey: SUPABASE_ANON_KEY,
'Content-Type': 'application/json',
},
data: { email: DEMO_EMAIL, password: DEMO_PASSWORD },
});
if (!response.ok()) {
throw new Error(`Supabase auth failed: ${response.status()} ${await response.text()}`);
}
const tokenData = await response.json();
// Build Supabase auth cookie (format: base64-<base64 encoded JSON>)
const projectRef = SUPABASE_URL.replace('https://', '').split('.')[0];
const cookieName = `sb-${projectRef}-auth-token`;
const cookieValue = `base64-${Buffer.from(JSON.stringify(tokenData)).toString('base64')}`;
await page.context().addCookies([
{
name: cookieName,
value: cookieValue,
domain: 'localhost',
path: '/',
httpOnly: false,
secure: false,
sameSite: 'Lax',
},
]);
// Verify the session works by navigating to a protected route
await page.goto('/epd/cortex');
await page.waitForURL(/\/epd\//, { timeout: 15_000 });
await page.context().storageState({ path: authFile });
});