settings.spec.ts 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. import { test, expect } from '../../utils/test-setup';
  2. import testUsers from '../../fixtures/test-users.json' with { type: 'json' };
  3. test.describe('系统设置管理', () => {
  4. test.beforeEach(async ({ loginPage, page }) => {
  5. // 以管理员身份登录
  6. await loginPage.goto();
  7. await loginPage.login(testUsers.admin.username, testUsers.admin.password);
  8. // 导航到系统设置页面
  9. await page.goto('/admin/settings');
  10. await page.waitForLoadState('networkidle');
  11. });
  12. test('系统设置页面加载', async ({ page }) => {
  13. await expect(page.getByRole('heading', { name: /系统设置|设置/i })).toBeVisible();
  14. await expect(page.getByText('基本设置')).toBeVisible();
  15. await expect(page.getByText('安全设置')).toBeVisible();
  16. });
  17. test('查看基本设置', async ({ page }) => {
  18. // 切换到基本设置标签页
  19. const basicSettingsTab = page.getByRole('tab', { name: '基本设置' });
  20. await basicSettingsTab.click();
  21. // 验证基本设置表单元素
  22. await expect(page.getByLabel('站点名称')).toBeVisible();
  23. await expect(page.getByLabel('站点描述')).toBeVisible();
  24. await expect(page.getByLabel('管理员邮箱')).toBeVisible();
  25. });
  26. test('更新基本设置', async ({ page }) => {
  27. const basicSettingsTab = page.getByRole('tab', { name: '基本设置' });
  28. await basicSettingsTab.click();
  29. // 更新站点名称
  30. const siteNameInput = page.getByLabel('站点名称');
  31. const newSiteName = `测试站点_${Date.now()}`;
  32. await siteNameInput.fill(newSiteName);
  33. // 保存设置
  34. const saveButton = page.getByRole('button', { name: '保存设置' });
  35. await saveButton.click();
  36. // 验证保存成功
  37. await expect(page.locator('text=设置保存成功')).toBeVisible();
  38. // 验证设置已更新
  39. await expect(siteNameInput).toHaveValue(newSiteName);
  40. });
  41. test('查看安全设置', async ({ page }) => {
  42. // 切换到安全设置标签页
  43. const securitySettingsTab = page.getByRole('tab', { name: '安全设置' });
  44. await securitySettingsTab.click();
  45. // 验证安全设置选项
  46. await expect(page.getByLabel('启用双因素认证')).toBeVisible();
  47. await expect(page.getByLabel('密码强度要求')).toBeVisible();
  48. await expect(page.getByLabel('会话超时时间')).toBeVisible();
  49. });
  50. test('更新安全设置', async ({ page }) => {
  51. const securitySettingsTab = page.getByRole('tab', { name: '安全设置' });
  52. await securitySettingsTab.click();
  53. // 启用双因素认证
  54. const twoFactorToggle = page.getByLabel('启用双因素认证');
  55. await twoFactorToggle.check();
  56. // 设置密码强度
  57. const passwordStrengthSelect = page.getByLabel('密码强度要求');
  58. await passwordStrengthSelect.selectOption('high');
  59. // 保存设置
  60. const saveButton = page.getByRole('button', { name: '保存设置' });
  61. await saveButton.click();
  62. // 验证保存成功
  63. await expect(page.locator('text=安全设置已更新')).toBeVisible();
  64. });
  65. test('设置验证 - 必填字段', async ({ page }) => {
  66. const basicSettingsTab = page.getByRole('tab', { name: '基本设置' });
  67. await basicSettingsTab.click();
  68. // 清空必填字段
  69. const siteNameInput = page.getByLabel('站点名称');
  70. await siteNameInput.fill('');
  71. // 尝试保存
  72. const saveButton = page.getByRole('button', { name: '保存设置' });
  73. await saveButton.click();
  74. // 验证错误提示
  75. await expect(page.locator('text=站点名称不能为空')).toBeVisible();
  76. });
  77. test('设置回滚功能', async ({ page }) => {
  78. const basicSettingsTab = page.getByRole('tab', { name: '基本设置' });
  79. await basicSettingsTab.click();
  80. // 获取当前设置值
  81. const siteNameInput = page.getByLabel('站点名称');
  82. const originalValue = await siteNameInput.inputValue();
  83. // 修改设置
  84. await siteNameInput.fill('临时测试值');
  85. // 点击重置按钮
  86. const resetButton = page.getByRole('button', { name: '重置' });
  87. await resetButton.click();
  88. // 验证设置已恢复
  89. await expect(siteNameInput).toHaveValue(originalValue);
  90. });
  91. test('设置导出功能', async ({ page }) => {
  92. const basicSettingsTab = page.getByRole('tab', { name: '基本设置' });
  93. await basicSettingsTab.click();
  94. // 点击导出按钮
  95. const exportButton = page.getByRole('button', { name: '导出设置' });
  96. // 监听下载事件
  97. const downloadPromise = page.waitForEvent('download');
  98. await exportButton.click();
  99. const download = await downloadPromise;
  100. // 验证下载文件
  101. expect(download.suggestedFilename()).toMatch(/\.json$/);
  102. });
  103. test('设置导入功能', async ({ page }) => {
  104. const basicSettingsTab = page.getByRole('tab', { name: '基本设置' });
  105. await basicSettingsTab.click();
  106. // 点击导入按钮
  107. const importButton = page.getByRole('button', { name: '导入设置' });
  108. await importButton.click();
  109. // 验证导入对话框
  110. await expect(page.getByText('导入设置文件')).toBeVisible();
  111. await expect(page.getByLabel('选择设置文件')).toBeVisible();
  112. });
  113. test('权限验证 - 非管理员访问', async ({ loginPage, page }) => {
  114. // 先登出
  115. await page.goto('/logout');
  116. // 以普通用户身份登录
  117. await loginPage.goto();
  118. await loginPage.login(testUsers.regularUser.username, testUsers.regularUser.password);
  119. // 尝试访问系统设置
  120. await page.goto('/admin/settings');
  121. // 验证权限不足错误
  122. await expect(page.getByText(/权限不足|拒绝访问/i)).toBeVisible();
  123. });
  124. });