test(demo): route the e2e suite through the hash router

This commit is contained in:
0xJacky
2026-08-12 15:06:54 +08:00
parent 0ec8ae2eab
commit 324beaab19
2 changed files with 16 additions and 9 deletions

View File

@@ -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 })
})

View File

@@ -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)
}