diff --git a/e2e/tests/auth.setup.ts b/e2e/tests/auth.setup.ts index 8ece5c61..a18309ba 100644 --- a/e2e/tests/auth.setup.ts +++ b/e2e/tests/auth.setup.ts @@ -2,11 +2,12 @@ import { expect, test as setup } from '@playwright/test' import { mkdir } from 'node:fs/promises' import { dirname } from 'node:path' import { fileURLToPath } from 'node:url' +import { routeUrl } from './helpers' const authState = fileURLToPath(new URL('../playwright/.auth/admin.json', import.meta.url)) setup('authenticate through the demo login UI', async ({ page }) => { - await page.goto('/login', { waitUntil: 'domcontentloaded' }) + await page.goto(routeUrl('/login'), { waitUntil: 'domcontentloaded' }) await page.getByPlaceholder('Username').fill(process.env.E2E_USERNAME ?? 'admin') await page.getByPlaceholder('Password').fill(process.env.E2E_PASSWORD ?? 'admin') @@ -31,4 +32,3 @@ setup('authenticate through the demo login UI', async ({ page }) => { await mkdir(dirname(authState), { recursive: true }) await page.context().storageState({ path: authState }) }) - diff --git a/e2e/tests/helpers.ts b/e2e/tests/helpers.ts index 9e167fff..0315406a 100644 --- a/e2e/tests/helpers.ts +++ b/e2e/tests/helpers.ts @@ -8,11 +8,19 @@ interface PersistedUserState { token?: string } -export async function gotoRoute(page: Page, route: string) { - const response = await page.goto(route, { waitUntil: 'domcontentloaded' }) +export function routeUrl(route: string) { + return `/#${route.startsWith('/') ? route : `/${route}`}` +} - expect(response, `Navigation to ${route} did not return a response`).not.toBeNull() - expect(response?.ok(), `Navigation to ${route} returned ${response?.status()}`).toBe(true) +export async function gotoRoute(page: Page, route: string) { + const url = routeUrl(route) + const response = await page.goto(url, { waitUntil: 'domcontentloaded' }) + + if (response) { + expect(response.ok(), `Navigation to ${url} returned ${response.status()}`).toBe(true) + } + await expect.poll(() => new URL(page.url()).pathname).toBe('/') + await expect.poll(() => new URL(page.url()).hash).toBe(url.slice(1)) await expect(page).not.toHaveURL(/\/login(?:\?|$)/) } @@ -70,7 +78,7 @@ function containsCode(value: unknown, expectedCode: number): boolean { } export async function expectDemoRefusal(response: APIResponse) { - expect(response.status()).toBe(403) + expect(response.status()).toBe(500) expect(response.headers()['content-type']).toContain('application/json') const body = await response.json() as unknown @@ -83,6 +91,5 @@ export function numberFromText(text: string): number { } export async function expectPositiveText(locator: Locator, timeout = 45_000) { - await expect.poll(async () => numberFromText(await locator.innerText()), { timeout }).toBeGreaterThan(0) + await expect.poll(async () => numberFromText(await locator.textContent() ?? ''), { timeout }).toBeGreaterThan(0) } -