feat: 接入两端用户名登录和独立学习空间 (#2)
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
import { expect, test } from '@playwright/test'
|
||||
|
||||
test('username login, private empty space, logout and history protection', async ({ page }) => {
|
||||
const user = { id: 42, username: 'fictional-reader', role: 'learner' }
|
||||
await page.route('**/api/v1/**', async route => {
|
||||
const path = new URL(route.request().url()).pathname
|
||||
let data: unknown = null
|
||||
if (path.endsWith('/login')) {
|
||||
expect(route.request().postDataJSON()).toEqual({ username: user.username, password: 'fictional-password' })
|
||||
data = { token: 'fictional-session', user }
|
||||
} else if (path.endsWith('/me')) data = user
|
||||
else if (path.endsWith('/space')) data = { ownerId: user.id, language: 'en' }
|
||||
await route.fulfill({ json: { code: 200, data } })
|
||||
})
|
||||
await page.goto('/')
|
||||
await expect(page.getByRole('heading', { name: '欢迎回来' })).toBeVisible()
|
||||
await page.getByLabel('账号').fill(user.username)
|
||||
await page.getByLabel('密码', { exact: true }).fill('fictional-password')
|
||||
await page.getByRole('button', { name: '登录', exact: true }).click()
|
||||
await expect(page.getByRole('heading', { name: '我的书库' })).toBeVisible()
|
||||
await expect(page.getByText('书库还是空的')).toBeVisible()
|
||||
await expect(page.getByText(user.username, { exact: true })).toBeVisible()
|
||||
await page.reload()
|
||||
await expect(page.getByRole('heading', { name: '我的书库' })).toBeVisible()
|
||||
await page.goto('/?history=1')
|
||||
await expect(page.getByRole('heading', { name: '我的书库' })).toBeVisible()
|
||||
await page.getByRole('button', { name: '退出登录' }).click()
|
||||
await expect(page.getByRole('heading', { name: '欢迎回来' })).toBeVisible()
|
||||
await page.goBack()
|
||||
await expect(page.getByText(user.username, { exact: true })).toHaveCount(0)
|
||||
await expect(page.getByRole('heading', { name: '欢迎回来' })).toBeVisible()
|
||||
})
|
||||
|
||||
test('invalid credentials stay on login with accessible feedback', async ({ page }) => {
|
||||
await page.route('**/api/v1/login', route => route.fulfill({ status: 401, json: { code: 401, msg: '账号或密码错误' } }))
|
||||
await page.goto('/login')
|
||||
await page.getByLabel('账号').fill('fictional-reader')
|
||||
await page.getByLabel('密码', { exact: true }).fill('fictional-wrong-password')
|
||||
await page.getByRole('button', { name: '登录', exact: true }).click()
|
||||
await expect(page.getByRole('alert')).toHaveText('账号或密码错误')
|
||||
await expect(page.getByRole('heading', { name: '我的书库' })).toHaveCount(0)
|
||||
})
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"extends": "@tsconfig/node24/tsconfig.json",
|
||||
"include": ["./**/*"]
|
||||
}
|
||||
Reference in New Issue
Block a user