39 lines
1.3 KiB
JavaScript
39 lines
1.3 KiB
JavaScript
/**
|
|
* Authentication utilities for E2E tests.
|
|
*/
|
|
|
|
/**
|
|
* Login as admin user via API and then navigate so the session cookie is in context.
|
|
* More reliable than form submit + redirect for E2E.
|
|
* @param {import('@playwright/test').Page} page
|
|
* @param {string} identifier - Username (default test-admin)
|
|
* @param {string} password - Password (default test-admin-password)
|
|
* @returns {Promise<void>}
|
|
*/
|
|
export async function loginAsAdmin(page, identifier = 'test-admin', password = 'test-admin-password') {
|
|
// Login via API so the session cookie is set in the browser context
|
|
const response = await page.request.post('/api/auth/login', {
|
|
data: { identifier, password },
|
|
})
|
|
|
|
if (!response.ok()) {
|
|
const body = await response.body().catch(() => Buffer.from(''))
|
|
throw new Error(`Login API failed ${response.status()}: ${body.toString()}`)
|
|
}
|
|
|
|
// Navigate to home so the app sees the session
|
|
await page.goto('/')
|
|
await page.waitForLoadState('domcontentloaded')
|
|
}
|
|
|
|
/**
|
|
* Get session cookie from page context.
|
|
* @param {import('@playwright/test').BrowserContext} context
|
|
* @returns {Promise<string | null>} Session ID cookie value
|
|
*/
|
|
export async function getSessionCookie(context) {
|
|
const cookies = await context.cookies()
|
|
const sessionCookie = cookies.find(c => c.name === 'session_id')
|
|
return sessionCookie?.value || null
|
|
}
|