Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 

87 linhas
4.1 KiB

  1. import { captureScreenshot, expect, test } from './fixtures'
  2. import {
  3. adminCredentials,
  4. login,
  5. missingLoginOrganizationEnvironment,
  6. selectLoginOrganization,
  7. } from './helpers'
  8. test('管理员可以登录并安全退出', async ({ page }, testInfo) => {
  9. await page.goto('/login')
  10. const loginHeading = page.getByRole('heading', { name: '登录数字车间', includeHidden: true })
  11. await expect(loginHeading).toBeAttached()
  12. await expect(page.locator('.login-card > header')).toHaveCSS('position', 'absolute')
  13. await expect(page.locator('.login-card > header')).toHaveCSS('clip-path', 'inset(50%)')
  14. await expect(page.locator('.login-role-options > button')).toHaveCount(4)
  15. await expect(page.getByRole('button', { name: /登录系统/ })).toBeDisabled()
  16. await captureScreenshot(page, testInfo, 'login-page')
  17. const credentials = adminCredentials()
  18. await page.locator('input[name="username"]').fill('__ute2e_missing_account__')
  19. await page.locator('input[name="password"]').fill('Uae2e-Invalid-Only')
  20. await page.getByRole('button', { name: /登录系统/ }).click()
  21. await expect(page.locator('.login-error')).toContainText('账号、密码或登录身份不匹配')
  22. await login(page, adminCredentials())
  23. await expect(page).toHaveURL(/\/dashboard(?:\?|$)/)
  24. await captureScreenshot(page, testInfo, 'login-success')
  25. await page.locator('.user-entry').click()
  26. await page.getByText('退出登录', { exact: true }).click()
  27. await expect(page).toHaveURL(/\/login(?:\?|$)/)
  28. const returnedLoginHeading = page.getByRole('heading', { name: '登录数字车间', includeHidden: true })
  29. await expect(returnedLoginHeading).toBeAttached()
  30. await expect(page.locator('.login-card > header')).toHaveCSS('position', 'absolute')
  31. await expect(page.locator('.login-card > header')).toHaveCSS('clip-path', 'inset(50%)')
  32. })
  33. test('强制改密账号首次登录后必须设置新密码', async ({ page }, testInfo) => {
  34. const username = process.env.E2E_FORCE_CHANGE_USERNAME?.trim()
  35. const password = process.env.E2E_FORCE_CHANGE_PASSWORD?.trim()
  36. const newPassword = process.env.E2E_FORCE_CHANGE_NEW_PASSWORD?.trim()
  37. const roleCode = (process.env.E2E_FORCE_CHANGE_ROLE_CODE?.trim() || 'teacher') as 'admin' | 'administrative' | 'teacher' | 'student'
  38. const missingOrganizationEnvironment = missingLoginOrganizationEnvironment(roleCode)
  39. test.skip(!username || !password || !newPassword, '未配置独立强制改密账号,按约定跳过该条件用例。')
  40. test.skip(username === process.env.E2E_ADMIN_USERNAME, '强制改密用例禁止复用管理员账号。')
  41. test.skip(
  42. missingOrganizationEnvironment.length > 0,
  43. `当前登录身份缺少组织配置:${missingOrganizationEnvironment.join('、')}。`,
  44. )
  45. await page.goto('/login')
  46. await page.locator(`[data-role-code="${roleCode}"]`).click()
  47. await selectLoginOrganization(page, roleCode)
  48. await page.locator('input[name="username"]').fill(username!)
  49. await page.locator('input[name="password"]').fill(password!)
  50. await page.getByRole('button', { name: /登录系统/ }).click()
  51. const surface = page.locator('.el-dialog:visible, .force-password-page, main').filter({ hasText: /修改密码|首次登录/ }).last()
  52. await expect(surface).toBeVisible()
  53. const currentPasswordInput = surface
  54. .locator('.el-form-item')
  55. .filter({ hasText: /当前密码/ })
  56. .locator('input')
  57. .first()
  58. const newPasswordInput = surface
  59. .locator('.el-form-item')
  60. .filter({ hasText: /新密码/ })
  61. .locator('input')
  62. .first()
  63. const confirmationInput = surface
  64. .locator('.el-form-item')
  65. .filter({ hasText: /确认密码|再次输入/ })
  66. .locator('input')
  67. .first()
  68. await currentPasswordInput.fill(password!)
  69. await newPasswordInput.fill(newPassword!)
  70. await confirmationInput.fill(newPassword!)
  71. await surface.getByRole('button', { name: /确认修改|修改密码|保存/ }).last().click()
  72. await expect(page).toHaveURL(/\/login(?:\?|$)/)
  73. await login(page, { username: username!, password: newPassword!, roleCode })
  74. await expect(page).toHaveURL(/\/dashboard(?:\?|$)/)
  75. await captureScreenshot(page, testInfo, 'forced-password-change-success')
  76. })