feat(admin): 添加用户管理相关文件
添加用户管理视图、API和状态管理文件
This commit is contained in:
@@ -0,0 +1,317 @@
|
||||
import { test, expect } from '../fixtures/test-fixtures';
|
||||
|
||||
test.describe('Admin用户管理功能测试', () => {
|
||||
test.beforeEach(async ({ page, testConfig, testLogger }) => {
|
||||
testLogger.startTest('Admin用户管理功能测试');
|
||||
await page.goto(testConfig.getEnvironment().baseURL);
|
||||
|
||||
testLogger.startStep('前置步骤: 登录系统');
|
||||
|
||||
await page.fill('input[name="username"], input[placeholder*="用户名"]', 'admin');
|
||||
await page.fill('input[name="password"], input[placeholder*="密码"]', 'admin123');
|
||||
await page.click('button[type="submit"]');
|
||||
await page.waitForURL('**/dashboard');
|
||||
|
||||
testLogger.endStep('前置步骤: 登录系统', 'passed');
|
||||
});
|
||||
|
||||
test.afterEach(async ({ testLogger }) => {
|
||||
testLogger.endTest('Admin用户管理功能测试', 'passed');
|
||||
});
|
||||
|
||||
test('TC-ADMIN-USER-001: 创建用户', async ({
|
||||
page,
|
||||
testDataManager,
|
||||
formHelper,
|
||||
tableHelper,
|
||||
assertionHelper,
|
||||
testLogger,
|
||||
screenshotHelper
|
||||
}) => {
|
||||
testLogger.startStep('步骤1: 导航到用户管理页面');
|
||||
|
||||
await page.click('.menu-item:has-text("系统管理")');
|
||||
await page.click('.menu-item:has-text("用户管理")');
|
||||
await page.waitForURL('**/user-management');
|
||||
|
||||
testLogger.endStep('步骤1: 导航到用户管理页面', 'passed');
|
||||
|
||||
testLogger.startStep('步骤2: 创建测试用户数据');
|
||||
|
||||
const testUser = await testDataManager.createTestUser({
|
||||
realName: 'Admin测试用户001',
|
||||
email: 'admin_test_001@example.com'
|
||||
});
|
||||
|
||||
testLogger.endStep('步骤2: 创建测试用户数据', 'passed');
|
||||
|
||||
testLogger.startStep('步骤3: 点击新增按钮');
|
||||
|
||||
await page.click('button:has-text("新增")');
|
||||
await assertionHelper.assertModalVisible(page, '新增用户对话框应该显示');
|
||||
|
||||
testLogger.endStep('步骤3: 点击新增按钮', 'passed');
|
||||
|
||||
testLogger.startStep('步骤4: 填写用户表单');
|
||||
|
||||
await formHelper.fillForm({
|
||||
'input[name="username"]': { value: testUser.username },
|
||||
'input[name="realName"]': { value: testUser.realName || '' },
|
||||
'input[name="email"]': { value: testUser.email || '' },
|
||||
'input[name="phone"]': { value: testUser.phone || '' }
|
||||
});
|
||||
|
||||
await screenshotHelper.takeScreenshot('admin-user-form-filled');
|
||||
|
||||
testLogger.endStep('步骤4: 填写用户表单', 'passed');
|
||||
|
||||
testLogger.startStep('步骤5: 提交表单');
|
||||
|
||||
await formHelper.submitForm('button[type="submit"]');
|
||||
await assertionHelper.assertSuccessMessage(page, '用户创建成功消息应该显示');
|
||||
|
||||
testLogger.endStep('步骤5: 提交表单', 'passed');
|
||||
|
||||
testLogger.startStep('步骤6: 验证用户已创建');
|
||||
|
||||
await tableHelper.waitForTableLoad('.user-table', 1);
|
||||
const matchingRows = await tableHelper.findRowsByCellText('.user-table', testUser.username);
|
||||
|
||||
expect(matchingRows.length).toBeGreaterThan(0);
|
||||
|
||||
testLogger.endStep('步骤6: 验证用户已创建', 'passed');
|
||||
|
||||
await screenshotHelper.takeScreenshotOnSuccess('admin-create-user');
|
||||
});
|
||||
|
||||
test('TC-ADMIN-USER-002: 编辑用户', async ({
|
||||
page,
|
||||
testDataManager,
|
||||
formHelper,
|
||||
tableHelper,
|
||||
assertionHelper,
|
||||
testLogger,
|
||||
screenshotHelper
|
||||
}) => {
|
||||
testLogger.startStep('步骤1: 创建测试用户');
|
||||
|
||||
const testUser = await testDataManager.createTestUser({
|
||||
realName: 'Admin测试用户002',
|
||||
email: 'admin_test_002@example.com'
|
||||
});
|
||||
|
||||
testLogger.endStep('步骤1: 创建测试用户', 'passed');
|
||||
|
||||
testLogger.startStep('步骤2: 导航到用户管理页面');
|
||||
|
||||
await page.click('.menu-item:has-text("系统管理")');
|
||||
await page.click('.menu-item:has-text("用户管理")');
|
||||
await page.waitForURL('**/user-management');
|
||||
|
||||
testLogger.endStep('步骤2: 导航到用户管理页面', 'passed');
|
||||
|
||||
testLogger.startStep('步骤3: 搜索用户');
|
||||
|
||||
await page.fill('input[placeholder*="搜索"], .search-input', testUser.username);
|
||||
await page.click('button:has-text("搜索")');
|
||||
await tableHelper.waitForTableLoad('.user-table', 1);
|
||||
|
||||
testLogger.endStep('步骤3: 搜索用户', 'passed');
|
||||
|
||||
testLogger.startStep('步骤4: 点击编辑按钮');
|
||||
|
||||
await page.click('button:has-text("编辑")');
|
||||
await assertionHelper.assertModalVisible(page, '编辑用户对话框应该显示');
|
||||
|
||||
testLogger.endStep('步骤4: 点击编辑按钮', 'passed');
|
||||
|
||||
testLogger.startStep('步骤5: 修改用户信息');
|
||||
|
||||
await formHelper.clearField('input[name="realName"]');
|
||||
await formHelper.fillField('input[name="realName"]', '修改后的用户名');
|
||||
|
||||
testLogger.endStep('步骤5: 修改用户信息', 'passed');
|
||||
|
||||
testLogger.startStep('步骤6: 保存修改');
|
||||
|
||||
await formHelper.submitForm('button[type="submit"]');
|
||||
await assertionHelper.assertSuccessMessage(page, '用户更新成功消息应该显示');
|
||||
|
||||
testLogger.endStep('步骤6: 保存修改', 'passed');
|
||||
|
||||
testLogger.startStep('步骤7: 验证修改已保存');
|
||||
|
||||
await page.fill('input[placeholder*="搜索"], .search-input', testUser.username);
|
||||
await page.click('button:has-text("搜索")');
|
||||
|
||||
const rowText = await tableHelper.getRowText('.user-table', 1);
|
||||
expect(rowText).toContain('修改后的用户名');
|
||||
|
||||
testLogger.endStep('步骤7: 验证修改已保存', 'passed');
|
||||
|
||||
await screenshotHelper.takeScreenshotOnSuccess('admin-edit-user');
|
||||
});
|
||||
|
||||
test('TC-ADMIN-USER-003: 删除用户', async ({
|
||||
page,
|
||||
testDataManager,
|
||||
tableHelper,
|
||||
assertionHelper,
|
||||
testLogger,
|
||||
screenshotHelper
|
||||
}) => {
|
||||
testLogger.startStep('步骤1: 创建测试用户');
|
||||
|
||||
const testUser = await testDataManager.createTestUser({
|
||||
realName: 'Admin测试用户003',
|
||||
email: 'admin_test_003@example.com'
|
||||
});
|
||||
|
||||
testLogger.endStep('步骤1: 创建测试用户', 'passed');
|
||||
|
||||
testLogger.startStep('步骤2: 导航到用户管理页面');
|
||||
|
||||
await page.click('.menu-item:has-text("系统管理")');
|
||||
await page.click('.menu-item:has-text("用户管理")');
|
||||
await page.waitForURL('**/user-management');
|
||||
|
||||
testLogger.endStep('步骤2: 导航到用户管理页面', 'passed');
|
||||
|
||||
testLogger.startStep('步骤3: 搜索用户');
|
||||
|
||||
await page.fill('input[placeholder*="搜索"], .search-input', testUser.username);
|
||||
await page.click('button:has-text("搜索")');
|
||||
|
||||
testLogger.endStep('步骤3: 搜索用户', 'passed');
|
||||
|
||||
testLogger.startStep('步骤4: 点击删除按钮');
|
||||
|
||||
await page.click('button:has-text("删除")');
|
||||
await assertionHelper.assertModalVisible(page, '确认删除对话框应该显示');
|
||||
|
||||
testLogger.endStep('步骤4: 点击删除按钮', 'passed');
|
||||
|
||||
testLogger.startStep('步骤5: 确认删除');
|
||||
|
||||
await page.click('button:has-text("确认")');
|
||||
await assertionHelper.assertSuccessMessage(page, '用户删除成功消息应该显示');
|
||||
|
||||
testLogger.endStep('步骤5: 确认删除', 'passed');
|
||||
|
||||
testLogger.startStep('步骤6: 验证用户已删除');
|
||||
|
||||
await page.fill('input[placeholder*="搜索"], .search-input', testUser.username);
|
||||
await page.click('button:has-text("搜索")');
|
||||
|
||||
const rowCount = await tableHelper.getRowCount('.user-table');
|
||||
expect(rowCount).toBe(0);
|
||||
|
||||
testLogger.endStep('步骤6: 验证用户已删除', 'passed');
|
||||
|
||||
await screenshotHelper.takeScreenshotOnSuccess('admin-delete-user');
|
||||
});
|
||||
|
||||
test('TC-ADMIN-USER-004: 批量删除用户', async ({
|
||||
page,
|
||||
testDataManager,
|
||||
tableHelper,
|
||||
assertionHelper,
|
||||
testLogger,
|
||||
screenshotHelper
|
||||
}) => {
|
||||
testLogger.startStep('步骤1: 创建多个测试用户');
|
||||
|
||||
const user1 = await testDataManager.createTestUser({
|
||||
realName: '批量删除用户1',
|
||||
email: 'batch_delete_1@example.com'
|
||||
});
|
||||
|
||||
const user2 = await testDataManager.createTestUser({
|
||||
realName: '批量删除用户2',
|
||||
email: 'batch_delete_2@example.com'
|
||||
});
|
||||
|
||||
testLogger.endStep('步骤1: 创建多个测试用户', 'passed');
|
||||
|
||||
testLogger.startStep('步骤2: 导航到用户管理页面');
|
||||
|
||||
await page.click('.menu-item:has-text("系统管理")');
|
||||
await page.click('.menu-item:has-text("用户管理")');
|
||||
await page.waitForURL('**/user-management');
|
||||
|
||||
testLogger.endStep('步骤2: 导航到用户管理页面', 'passed');
|
||||
|
||||
testLogger.startStep('步骤3: 搜索用户');
|
||||
|
||||
await page.fill('input[placeholder*="搜索"], .search-input', '批量删除用户');
|
||||
await page.click('button:has-text("搜索")');
|
||||
|
||||
testLogger.endStep('步骤3: 搜索用户', 'passed');
|
||||
|
||||
testLogger.startStep('步骤4: 选择所有用户');
|
||||
|
||||
await tableHelper.selectAllRows('.user-table');
|
||||
|
||||
testLogger.endStep('步骤4: 选择所有用户', 'passed');
|
||||
|
||||
testLogger.startStep('步骤5: 点击批量删除按钮');
|
||||
|
||||
await page.click('button:has-text("批量删除")');
|
||||
await assertionHelper.assertModalVisible(page, '确认批量删除对话框应该显示');
|
||||
|
||||
testLogger.endStep('步骤5: 点击批量删除按钮', 'passed');
|
||||
|
||||
testLogger.startStep('步骤6: 确认删除');
|
||||
|
||||
await page.click('button:has-text("确认")');
|
||||
await assertionHelper.assertSuccessMessage(page, '批量删除成功消息应该显示');
|
||||
|
||||
testLogger.endStep('步骤6: 确认删除', 'passed');
|
||||
|
||||
testLogger.startStep('步骤7: 验证用户已删除');
|
||||
|
||||
const rowCount = await tableHelper.getRowCount('.user-table');
|
||||
expect(rowCount).toBe(0);
|
||||
|
||||
testLogger.endStep('步骤7: 验证用户已删除', 'passed');
|
||||
|
||||
await screenshotHelper.takeScreenshotOnSuccess('admin-batch-delete-user');
|
||||
});
|
||||
|
||||
test('TC-ADMIN-USER-005: 用户导出功能', async ({
|
||||
page,
|
||||
tableHelper,
|
||||
testLogger,
|
||||
screenshotHelper
|
||||
}) => {
|
||||
testLogger.startStep('步骤1: 导航到用户管理页面');
|
||||
|
||||
await page.click('.menu-item:has-text("系统管理")');
|
||||
await page.click('.menu-item:has-text("用户管理")');
|
||||
await page.waitForURL('**/user-management');
|
||||
|
||||
testLogger.endStep('步骤1: 导航到用户管理页面', 'passed');
|
||||
|
||||
testLogger.startStep('步骤2: 等待表格加载');
|
||||
|
||||
await tableHelper.waitForTableLoad('.user-table', 1);
|
||||
|
||||
testLogger.endStep('步骤2: 等待表格加载', 'passed');
|
||||
|
||||
testLogger.startStep('步骤3: 点击导出按钮');
|
||||
|
||||
const downloadPromise = page.waitForEvent('download');
|
||||
await page.click('button:has-text("导出")');
|
||||
|
||||
testLogger.endStep('步骤3: 点击导出按钮', 'passed');
|
||||
|
||||
testLogger.startStep('步骤4: 验证文件下载');
|
||||
|
||||
const download = await downloadPromise;
|
||||
expect(download.suggestedFilename()).toMatch(/\.(xlsx|csv)$/);
|
||||
|
||||
testLogger.endStep('步骤4: 验证文件下载', 'passed');
|
||||
|
||||
await screenshotHelper.takeScreenshotOnSuccess('admin-export-user');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user