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>
This commit is contained in:
49
tests/playwright/auth.setup.ts
Normal file
49
tests/playwright/auth.setup.ts
Normal file
@@ -0,0 +1,49 @@
|
||||
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 });
|
||||
});
|
||||
Reference in New Issue
Block a user