31 lines
1.1 KiB
TypeScript
31 lines
1.1 KiB
TypeScript
import { test, expect } from '@playwright/test'
|
|
|
|
test.describe('admin page access control', () => {
|
|
test('admin page redirects or shows forbidden without auth', async ({ page }) => {
|
|
const criticalErrors: string[] = []
|
|
page.on('pageerror', err => {
|
|
if (err.message.includes('ReferenceError') || err.message.includes('SyntaxError')) {
|
|
criticalErrors.push(err.message)
|
|
}
|
|
})
|
|
|
|
await page.goto('/admin')
|
|
await page.waitForTimeout(2000)
|
|
|
|
// Should not crash
|
|
expect(criticalErrors).toHaveLength(0)
|
|
|
|
// Should either show forbidden/unauthorized message or redirect away
|
|
const url = page.url()
|
|
const content = await page.textContent('body')
|
|
|
|
// Valid outcomes: redirected to login/home, or shows forbidden
|
|
const isRedirected = !url.includes('/admin')
|
|
const showsForbidden = content?.match(/forbidden|unauthorized|not authorized|403|login/i) !== null
|
|
const isEmptyAdmin = content?.trim().length === 0 || content?.includes('Loading')
|
|
|
|
// At least one of these should be true
|
|
expect(isRedirected || showsForbidden || isEmptyAdmin).toBe(true)
|
|
})
|
|
})
|