|
- import { captureScreenshot, expect, test } from './fixtures'
- import {
- adminCredentials,
- login,
- missingLoginOrganizationEnvironment,
- selectLoginOrganization,
- } from './helpers'
-
- test('登录页默认选择教员身份', async ({ page }) => {
- await page.goto('/login')
- await expect(page.locator('[data-role-code="teacher"]')).toHaveAttribute('aria-pressed', 'true')
- })
-
- test('管理员可以登录并安全退出', async ({ page }, testInfo) => {
- await page.goto('/login')
- const loginHeading = page.getByRole('heading', { name: '登录数字车间', includeHidden: true })
- await expect(loginHeading).toBeAttached()
- await expect(page.locator('.login-card > header')).toHaveCSS('position', 'absolute')
- await expect(page.locator('.login-card > header')).toHaveCSS('clip-path', 'inset(50%)')
- await expect(page.locator('.login-role-options > button')).toHaveCount(4)
- await expect(page.locator('[data-role-code="teacher"]')).toHaveAttribute('aria-pressed', 'true')
- await expect(page.getByRole('button', { name: /登录系统/ })).toBeDisabled()
- await captureScreenshot(page, testInfo, 'login-page')
-
- const credentials = adminCredentials()
- await page.locator('[data-role-code="admin"]').click()
- await page.locator('input[name="username"]').fill('__ute2e_missing_account__')
- await page.locator('input[name="password"]').fill('Uae2e-Invalid-Only')
- await page.getByRole('button', { name: /登录系统/ }).click()
- await expect(page.locator('.el-message--error')).toContainText('账号、密码或登录身份不匹配')
- await login(page, adminCredentials())
- await expect(page).toHaveURL(/\/dashboard(?:\?|$)/)
- await captureScreenshot(page, testInfo, 'login-success')
-
- await page.locator('.user-entry').click()
- await page.getByText('退出登录', { exact: true }).click()
-
- await expect(page).toHaveURL(/\/login(?:\?|$)/)
- const returnedLoginHeading = page.getByRole('heading', { name: '登录数字车间', includeHidden: true })
- await expect(returnedLoginHeading).toBeAttached()
- await expect(page.locator('.login-card > header')).toHaveCSS('position', 'absolute')
- await expect(page.locator('.login-card > header')).toHaveCSS('clip-path', 'inset(50%)')
- })
-
- test('强制改密账号首次登录后必须设置新密码', async ({ page }, testInfo) => {
- const username = process.env.E2E_FORCE_CHANGE_USERNAME?.trim()
- const password = process.env.E2E_FORCE_CHANGE_PASSWORD?.trim()
- const newPassword = process.env.E2E_FORCE_CHANGE_NEW_PASSWORD?.trim()
- const roleCode = (process.env.E2E_FORCE_CHANGE_ROLE_CODE?.trim() || 'teacher') as 'admin' | 'administrative' | 'teacher' | 'student'
- const missingOrganizationEnvironment = missingLoginOrganizationEnvironment(roleCode)
- test.skip(!username || !password || !newPassword, '未配置独立强制改密账号,按约定跳过该条件用例。')
- test.skip(username === process.env.E2E_ADMIN_USERNAME, '强制改密用例禁止复用管理员账号。')
- test.skip(
- missingOrganizationEnvironment.length > 0,
- `当前登录身份缺少组织配置:${missingOrganizationEnvironment.join('、')}。`,
- )
-
- await page.goto('/login')
- await page.locator(`[data-role-code="${roleCode}"]`).click()
- await selectLoginOrganization(page, roleCode)
- await page.locator('input[name="username"]').fill(username!)
- await page.locator('input[name="password"]').fill(password!)
- await page.getByRole('button', { name: /登录系统/ }).click()
-
- const surface = page.locator('.el-dialog:visible, .force-password-page, main').filter({ hasText: /修改密码|首次登录/ }).last()
- await expect(surface).toBeVisible()
-
- const currentPasswordInput = surface
- .locator('.el-form-item')
- .filter({ hasText: /当前密码/ })
- .locator('input')
- .first()
- const newPasswordInput = surface
- .locator('.el-form-item')
- .filter({ hasText: /新密码/ })
- .locator('input')
- .first()
- const confirmationInput = surface
- .locator('.el-form-item')
- .filter({ hasText: /确认密码|再次输入/ })
- .locator('input')
- .first()
-
- await currentPasswordInput.fill(password!)
- await newPasswordInput.fill(newPassword!)
- await confirmationInput.fill(newPassword!)
- await surface.getByRole('button', { name: /确认修改|修改密码|保存/ }).last().click()
-
- await expect(page).toHaveURL(/\/login(?:\?|$)/)
- await login(page, { username: username!, password: newPassword!, roleCode })
- await expect(page).toHaveURL(/\/dashboard(?:\?|$)/)
- await captureScreenshot(page, testInfo, 'forced-password-change-success')
- })
|