43 lines
1.7 KiB
TypeScript
43 lines
1.7 KiB
TypeScript
import { expect, test } from '@playwright/test'
|
|
|
|
test.beforeEach(async ({ page }) => {
|
|
await page.goto('/')
|
|
})
|
|
|
|
test('shows an error for invalid credentials', async ({ page }) => {
|
|
await page.getByLabel('Username').fill('admin')
|
|
await page.getByRole('textbox', { name: 'Password', exact: true }).fill('wrong-password')
|
|
await page.getByRole('button', { name: 'Sign in' }).click()
|
|
|
|
await expect(page.getByRole('alert')).toHaveText('Invalid username or password')
|
|
})
|
|
|
|
test('logs in with the initialized admin user', async ({ page }) => {
|
|
await page.getByLabel('Username').fill('admin')
|
|
await page.getByRole('textbox', { name: 'Password', exact: true }).fill('admin')
|
|
await page.getByRole('button', { name: 'Sign in' }).click()
|
|
|
|
await expect(page).toHaveURL('/users')
|
|
await expect(page.getByRole('heading', { name: 'User Management' })).toBeVisible()
|
|
const adminRow = page.getByRole('row').filter({ hasText: 'admin' })
|
|
await expect(adminRow).toContainText('admin')
|
|
await expect(page.getByRole('button', { name: 'Sign out' })).toBeVisible()
|
|
|
|
const token = await page.evaluate(() => {
|
|
const session = JSON.parse(sessionStorage.getItem('bolts-session')!) as { token: string }
|
|
return session.token
|
|
})
|
|
const signOutRequest = page.waitForRequest(request =>
|
|
request.url().endsWith('/api/signout') && request.method() === 'POST',
|
|
)
|
|
await page.getByRole('button', { name: 'Sign out' }).click()
|
|
await signOutRequest
|
|
|
|
await expect(page).toHaveURL('/')
|
|
await expect(page.getByRole('button', { name: 'Sign in' })).toBeVisible()
|
|
const response = await page.request.get('/api/users', {
|
|
headers: { Authorization: `Bearer ${token}` },
|
|
})
|
|
expect(response.status()).toBe(403)
|
|
})
|