Files
张翔 08ea5fbe98 feat(admin): 添加用户管理相关文件
添加用户管理视图、API和状态管理文件
2026-03-28 14:37:29 +08:00

202 lines
5.8 KiB
TypeScript

import { test as base, Page, BrowserContext, APIRequestContext } from '@playwright/test';
import { testConfig, TestEnvironment } from './core/test-config';
import { testDataGenerator, UserData, RoleData, MenuData, PermissionData } from './core/test-data';
import { testLogger } from './core/test-logger';
import { testReporter } from './core/test-reporter';
import { ActuatorMonitor } from './core/actuator-monitor';
import { TestDataManager } from './core/test-data-manager';
import { DataStrategyManager, dataStrategyManager } from './core/data-strategy-manager';
import { BasePage } from './pages/base-page';
import { LoginPage } from './pages/login-page';
import { DashboardPage } from './pages/dashboard-page';
import { UserManagementPage } from './pages/user-management-page';
import { RoleManagementPage } from './pages/role-management-page';
import { MenuManagementPage } from './pages/menu-management-page';
import { ScreenshotHelper } from './helpers/screenshot-helper';
import { FormHelper } from './helpers/form-helper';
import { TableHelper } from './helpers/table-helper';
import { AssertionHelper } from './helpers/assertion-helper';
import { APIHelper } from './helpers/api-helper';
import { MockManager, MockConfig } from './mock-manager';
export interface TestFixtures {
page: Page;
context: BrowserContext;
request: APIRequestContext;
testConfig: TestEnvironment;
testDataGenerator: typeof testDataGenerator;
testLogger: typeof testLogger;
testReporter: typeof testReporter;
actuatorMonitor: ActuatorMonitor;
testDataManager: TestDataManager;
dataStrategyManager: DataStrategyManager;
pageObjects: {
basePage: BasePage;
loginPage: LoginPage;
dashboardPage: DashboardPage;
userManagementPage: UserManagementPage;
roleManagementPage: RoleManagementPage;
menuManagementPage: MenuManagementPage;
};
helpers: {
screenshot: ScreenshotHelper;
form: FormHelper;
table: TableHelper;
assertion: AssertionHelper;
api: APIHelper;
};
mockManager: MockManager;
testData: {
user: UserData;
admin: UserData;
role: RoleData;
menu: MenuData;
permission: PermissionData;
};
}
export const test = base.extend<TestFixtures>({
page: async ({ page }, use) => {
await use(page);
},
context: async ({ context }, use) => {
await context.addInitScript(() => {
localStorage.setItem('E2E_TEST', 'true');
});
await use(context);
},
request: async ({ request }, use) => {
await use(request);
},
actuatorMonitor: async ({ request }, use) => {
const apiBaseURL = process.env.API_BASE_URL || 'http://localhost:8080';
const authToken = process.env.E2E_AUTH_TOKEN;
const monitor = new ActuatorMonitor(request, apiBaseURL, authToken);
await use(monitor);
},
testDataManager: async ({ request, testConfig }, use) => {
const manager = new TestDataManager(request, testConfig.apiBaseURL);
await use(manager);
await manager.cleanup();
},
dataStrategyManager: async ({}, use) => {
await use(dataStrategyManager);
},
testConfig: async ({}, use) => {
const config = testConfig.getEnvironment();
await use(config);
},
testDataGenerator: async ({}, use) => {
await use(testDataGenerator);
},
testLogger: async ({}, use) => {
await use(testLogger);
},
testReporter: async ({}, use) => {
await use(testReporter);
},
pageObjects: async ({ page, testConfig }, use) => {
const baseURL = testConfig.baseURL;
const pageObjects = {
basePage: new BasePage(page),
loginPage: new LoginPage(page, testLogger, baseURL),
dashboardPage: new DashboardPage(page),
userManagementPage: new UserManagementPage(page),
roleManagementPage: new RoleManagementPage(page),
menuManagementPage: new MenuManagementPage(page)
};
await use(pageObjects);
},
helpers: async ({ page, request, testConfig }, use) => {
const apiHelper = new APIHelper(request, testConfig.apiBaseURL);
const helpers = {
screenshot: new ScreenshotHelper(page),
form: new FormHelper(page),
table: new TableHelper(page),
assertion: new AssertionHelper(),
api: apiHelper
};
await use(helpers);
},
mockManager: async ({ page }, use) => {
const mockConfig: MockConfig = {
enabled: process.env.E2E_MOCK_ENABLED === 'true',
mode: (process.env.E2E_MOCK_MODE as 'full' | 'partial' | 'none') || 'none',
mockPaths: [],
delay: 0,
logCalls: true,
validateResponses: true,
dataSource: 'memory'
};
const mockManager = new MockManager(mockConfig);
await mockManager.interceptAPIRequest(page);
await use(mockManager);
},
testData: async ({}, use) => {
const testData = {
user: testDataGenerator.generateUserData({
username: 'testuser',
email: 'test@example.com',
status: 'active'
}),
admin: testDataGenerator.generateUserData({
username: 'admin',
password: 'admin123456',
email: 'admin@example.com',
status: 'active',
roleIds: [1]
}),
role: testDataGenerator.generateRoleData({
name: '测试角色',
code: 'test_role',
status: 'active'
}),
menu: testDataGenerator.generateMenuData({
name: '测试菜单',
path: '/test',
status: 'active'
}),
permission: testDataGenerator.generatePermissionData({
name: '测试权限',
code: 'test:permission',
type: 'button'
})
};
await use(testData);
}
});
export const expect = test.expect;
export type PageObjects = TestFixtures['pageObjects'];
export type Helpers = TestFixtures['helpers'];
export type TestData = TestFixtures['testData'];