|
|
@@ -0,0 +1,343 @@
|
|
|
+import { test, expect } from '../../utils/test-setup';
|
|
|
+
|
|
|
+test.describe('公司管理状态功能验证', () => {
|
|
|
+ test.beforeEach(async ({ adminLoginPage, companyManagementPage }) => {
|
|
|
+ // 以管理员身份登录后台
|
|
|
+ await adminLoginPage.goto();
|
|
|
+ await adminLoginPage.login('admin', 'admin123');
|
|
|
+ await adminLoginPage.expectLoginSuccess();
|
|
|
+ await companyManagementPage.goto();
|
|
|
+ });
|
|
|
+
|
|
|
+ test.describe('创建公司表单状态控件验证', () => {
|
|
|
+ test('验证创建公司表单中有状态选择控件', async ({ companyManagementPage, page }) => {
|
|
|
+ // 打开创建公司对话框
|
|
|
+ await companyManagementPage.openCreateDialog();
|
|
|
+
|
|
|
+ // 截图:创建公司表单
|
|
|
+ await page.screenshot({ path: 'test-results/company-create-form.png', fullPage: true });
|
|
|
+
|
|
|
+ // 检查状态选择控件是否存在
|
|
|
+ const statusSelect = page.locator('[data-testid="create-company-status-select"]');
|
|
|
+ await expect(statusSelect).toBeVisible();
|
|
|
+
|
|
|
+ // 点击状态选择器
|
|
|
+ await statusSelect.click();
|
|
|
+ await page.waitForTimeout(500);
|
|
|
+
|
|
|
+ // 截图:状态选择器展开
|
|
|
+ await page.screenshot({ path: 'test-results/company-status-dropdown.png', fullPage: true });
|
|
|
+
|
|
|
+ // 验证启用选项存在
|
|
|
+ const enabledOption = page.locator('[data-testid="create-company-status-enabled"]');
|
|
|
+ await expect(enabledOption).toBeVisible();
|
|
|
+ await expect(enabledOption).toHaveText('启用');
|
|
|
+
|
|
|
+ // 验证禁用选项存在
|
|
|
+ const disabledOption = page.locator('[data-testid="create-company-status-disabled"]');
|
|
|
+ await expect(disabledOption).toBeVisible();
|
|
|
+ await expect(disabledOption).toHaveText('禁用');
|
|
|
+
|
|
|
+ // 取消操作
|
|
|
+ await companyManagementPage.cancelDialog();
|
|
|
+ });
|
|
|
+
|
|
|
+ test('验证默认状态是启用', async ({ companyManagementPage, page }) => {
|
|
|
+ // 打开创建公司对话框
|
|
|
+ await companyManagementPage.openCreateDialog();
|
|
|
+
|
|
|
+ // 点击状态选择器查看当前值
|
|
|
+ const statusSelect = page.locator('[data-testid="create-company-status-select"]');
|
|
|
+ await statusSelect.click();
|
|
|
+ await page.waitForTimeout(500);
|
|
|
+
|
|
|
+ // 截图:查看默认状态
|
|
|
+ await page.screenshot({ path: 'test-results/company-status-default.png', fullPage: true });
|
|
|
+
|
|
|
+ // 验证启用选项是默认选中的(通过检查选中的选项)
|
|
|
+ // 注意:Radix Select 的实现可能不同,这里我们只验证选项存在
|
|
|
+
|
|
|
+ // 取消操作
|
|
|
+ await companyManagementPage.cancelDialog();
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ test.describe('编辑公司表单状态控件验证', () => {
|
|
|
+ test('验证编辑公司表单中有状态选择控件', async ({ companyManagementPage, page }) => {
|
|
|
+ // 先创建一个测试公司
|
|
|
+ const timestamp = Date.now();
|
|
|
+ const companyName = `状态测试公司_${timestamp}`;
|
|
|
+ await companyManagementPage.createCompany({
|
|
|
+ companyName,
|
|
|
+ contactPerson: '测试联系人',
|
|
|
+ contactPhone: '13800138000',
|
|
|
+ });
|
|
|
+ await page.waitForTimeout(1000);
|
|
|
+
|
|
|
+ // 打开编辑对话框
|
|
|
+ await companyManagementPage.openEditDialog(companyName);
|
|
|
+ await page.waitForTimeout(500);
|
|
|
+
|
|
|
+ // 截图:编辑公司表单
|
|
|
+ await page.screenshot({ path: 'test-results/company-edit-form.png', fullPage: true });
|
|
|
+
|
|
|
+ // 检查状态选择控件是否存在
|
|
|
+ const statusSelect = page.locator('[data-testid="edit-company-status-select"]');
|
|
|
+ await expect(statusSelect).toBeVisible();
|
|
|
+
|
|
|
+ // 点击状态选择器
|
|
|
+ await statusSelect.click();
|
|
|
+ await page.waitForTimeout(500);
|
|
|
+
|
|
|
+ // 截图:编辑状态选择器展开
|
|
|
+ await page.screenshot({ path: 'test-results/company-edit-status-dropdown.png', fullPage: true });
|
|
|
+
|
|
|
+ // 验证启用选项存在
|
|
|
+ const enabledOption = page.locator('[data-testid="edit-company-status-enabled"]');
|
|
|
+ await expect(enabledOption).toBeVisible();
|
|
|
+
|
|
|
+ // 验证禁用选项存在
|
|
|
+ const disabledOption = page.locator('[data-testid="edit-company-status-disabled"]');
|
|
|
+ await expect(disabledOption).toBeVisible();
|
|
|
+
|
|
|
+ // 取消操作
|
|
|
+ await companyManagementPage.cancelDialog();
|
|
|
+
|
|
|
+ // 清理测试数据
|
|
|
+ await companyManagementPage.deleteCompany(companyName);
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ test.describe('创建禁用状态的公司测试', () => {
|
|
|
+ test('创建禁用状态的公司并验证保存', async ({ companyManagementPage, page }) => {
|
|
|
+ const timestamp = Date.now();
|
|
|
+ const companyName = `禁用测试公司_${timestamp}`;
|
|
|
+
|
|
|
+ // 打开创建对话框
|
|
|
+ await companyManagementPage.openCreateDialog();
|
|
|
+
|
|
|
+ // 截图:创建表单打开
|
|
|
+ await page.screenshot({ path: 'test-results/company-create-disabled-step1.png', fullPage: true });
|
|
|
+
|
|
|
+ // 填写表单
|
|
|
+ await companyManagementPage.companyNameInput.fill(companyName);
|
|
|
+ await companyManagementPage.contactPersonInput.fill('测试联系人');
|
|
|
+ await companyManagementPage.contactPhoneInput.fill('13800138000');
|
|
|
+
|
|
|
+ // 选择禁用状态
|
|
|
+ const statusSelect = page.locator('[data-testid="create-company-status-select"]');
|
|
|
+ await statusSelect.click();
|
|
|
+ await page.waitForTimeout(500);
|
|
|
+
|
|
|
+ // 截图:状态选择器展开
|
|
|
+ await page.screenshot({ path: 'test-results/company-create-disabled-step2.png', fullPage: true });
|
|
|
+
|
|
|
+ // 点击禁用选项
|
|
|
+ const disabledOption = page.locator('[data-testid="create-company-status-disabled"]');
|
|
|
+ await disabledOption.click();
|
|
|
+ await page.waitForTimeout(500);
|
|
|
+
|
|
|
+ // 截图:选择禁用状态后
|
|
|
+ await page.screenshot({ path: 'test-results/company-create-disabled-step3.png', fullPage: true });
|
|
|
+
|
|
|
+ // 提交表单
|
|
|
+ const result = await companyManagementPage.submitForm();
|
|
|
+ await companyManagementPage.waitForDialogClosed();
|
|
|
+
|
|
|
+ // 截图:提交后的页面
|
|
|
+ await page.screenshot({ path: 'test-results/company-create-disabled-step4.png', fullPage: true });
|
|
|
+
|
|
|
+ // 验证创建成功
|
|
|
+ expect(result.hasSuccess || result.success).toBe(true);
|
|
|
+
|
|
|
+ // 验证公司出现在列表中
|
|
|
+ await page.waitForTimeout(1000);
|
|
|
+ const exists = await companyManagementPage.companyExists(companyName);
|
|
|
+ expect(exists).toBe(true);
|
|
|
+
|
|
|
+ // 验证状态显示为"禁用"
|
|
|
+ const companyRow = companyManagementPage.companyTable.locator('tbody tr').filter({ hasText: companyName });
|
|
|
+ const statusCell = companyRow.locator('td').filter({ hasText: '禁用' });
|
|
|
+ await expect(statusCell).toBeVisible();
|
|
|
+
|
|
|
+ // 截图:禁用公司显示在列表中
|
|
|
+ await page.screenshot({ path: 'test-results/company-create-disabled-final.png', fullPage: true });
|
|
|
+
|
|
|
+ // 清理测试数据
|
|
|
+ await companyManagementPage.deleteCompany(companyName);
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ test.describe('修改公司状态测试', () => {
|
|
|
+ test('将启用状态的公司改为禁用状态', async ({ companyManagementPage, page }) => {
|
|
|
+ const timestamp = Date.now();
|
|
|
+ const companyName = `状态修改测试公司_${timestamp}`;
|
|
|
+
|
|
|
+ // 先创建一个启用状态的公司(默认)
|
|
|
+ await companyManagementPage.createCompany({
|
|
|
+ companyName,
|
|
|
+ contactPerson: '测试联系人',
|
|
|
+ contactPhone: '13800138000',
|
|
|
+ });
|
|
|
+ await page.waitForTimeout(1000);
|
|
|
+
|
|
|
+ // 截图:创建后的公司
|
|
|
+ await page.screenshot({ path: 'test-results/company-edit-status-step1.png', fullPage: true });
|
|
|
+
|
|
|
+ // 打开编辑对话框
|
|
|
+ await companyManagementPage.openEditDialog(companyName);
|
|
|
+ await page.waitForTimeout(500);
|
|
|
+
|
|
|
+ // 截图:编辑对话框打开
|
|
|
+ await page.screenshot({ path: 'test-results/company-edit-status-step2.png', fullPage: true });
|
|
|
+
|
|
|
+ // 点击状态选择器
|
|
|
+ const statusSelect = page.locator('[data-testid="edit-company-status-select"]');
|
|
|
+ await statusSelect.click();
|
|
|
+ await page.waitForTimeout(500);
|
|
|
+
|
|
|
+ // 截图:状态选择器展开
|
|
|
+ await page.screenshot({ path: 'test-results/company-edit-status-step3.png', fullPage: true });
|
|
|
+
|
|
|
+ // 选择禁用状态
|
|
|
+ const disabledOption = page.locator('[data-testid="edit-company-status-disabled"]');
|
|
|
+ await disabledOption.click();
|
|
|
+ await page.waitForTimeout(500);
|
|
|
+
|
|
|
+ // 截图:选择禁用状态后
|
|
|
+ await page.screenshot({ path: 'test-results/company-edit-status-step4.png', fullPage: true });
|
|
|
+
|
|
|
+ // 提交更改
|
|
|
+ const result = await companyManagementPage.submitForm();
|
|
|
+ await companyManagementPage.waitForDialogClosed();
|
|
|
+
|
|
|
+ // 截图:提交后的页面
|
|
|
+ await page.screenshot({ path: 'test-results/company-edit-status-step5.png', fullPage: true });
|
|
|
+
|
|
|
+ // 验证更新成功
|
|
|
+ expect(result.hasSuccess || result.success).toBe(true);
|
|
|
+
|
|
|
+ // 验证状态已更新为"禁用"
|
|
|
+ await page.waitForTimeout(1000);
|
|
|
+ const companyRow = companyManagementPage.companyTable.locator('tbody tr').filter({ hasText: companyName });
|
|
|
+ const statusCell = companyRow.locator('td').filter({ hasText: '禁用' });
|
|
|
+ await expect(statusCell).toBeVisible();
|
|
|
+
|
|
|
+ // 截图:最终状态
|
|
|
+ await page.screenshot({ path: 'test-results/company-edit-status-final.png', fullPage: true });
|
|
|
+
|
|
|
+ // 清理测试数据
|
|
|
+ await companyManagementPage.deleteCompany(companyName);
|
|
|
+ });
|
|
|
+
|
|
|
+ test('将禁用状态的公司改为启用状态', async ({ companyManagementPage, page }) => {
|
|
|
+ const timestamp = Date.now();
|
|
|
+ const companyName = `反向状态修改测试_${timestamp}`;
|
|
|
+
|
|
|
+ // 先创建一个禁用状态的公司
|
|
|
+ await companyManagementPage.openCreateDialog();
|
|
|
+ await companyManagementPage.companyNameInput.fill(companyName);
|
|
|
+ await companyManagementPage.contactPersonInput.fill('测试联系人');
|
|
|
+ await companyManagementPage.contactPhoneInput.fill('13800138000');
|
|
|
+
|
|
|
+ // 选择禁用状态
|
|
|
+ const statusSelect = page.locator('[data-testid="create-company-status-select"]');
|
|
|
+ await statusSelect.click();
|
|
|
+ await page.waitForTimeout(500);
|
|
|
+ await page.locator('[data-testid="create-company-status-disabled"]').click();
|
|
|
+ await page.waitForTimeout(500);
|
|
|
+
|
|
|
+ // 提交表单
|
|
|
+ await companyManagementPage.submitForm();
|
|
|
+ await companyManagementPage.waitForDialogClosed();
|
|
|
+ await page.waitForTimeout(1000);
|
|
|
+
|
|
|
+ // 截图:禁用公司创建成功
|
|
|
+ await page.screenshot({ path: 'test-results/company-reverse-status-step1.png', fullPage: true });
|
|
|
+
|
|
|
+ // 验证初始状态是禁用
|
|
|
+ const companyRow = companyManagementPage.companyTable.locator('tbody tr').filter({ hasText: companyName });
|
|
|
+ const disabledStatusCell = companyRow.locator('td').filter({ hasText: '禁用' });
|
|
|
+ await expect(disabledStatusCell).toBeVisible();
|
|
|
+
|
|
|
+ // 打开编辑对话框
|
|
|
+ await companyManagementPage.openEditDialog(companyName);
|
|
|
+ await page.waitForTimeout(500);
|
|
|
+
|
|
|
+ // 截图:编辑禁用公司
|
|
|
+ await page.screenshot({ path: 'test-results/company-reverse-status-step2.png', fullPage: true });
|
|
|
+
|
|
|
+ // 选择启用状态
|
|
|
+ const editStatusSelect = page.locator('[data-testid="edit-company-status-select"]');
|
|
|
+ await editStatusSelect.click();
|
|
|
+ await page.waitForTimeout(500);
|
|
|
+ await page.locator('[data-testid="edit-company-status-enabled"]').click();
|
|
|
+ await page.waitForTimeout(500);
|
|
|
+
|
|
|
+ // 截图:选择启用状态
|
|
|
+ await page.screenshot({ path: 'test-results/company-reverse-status-step3.png', fullPage: true });
|
|
|
+
|
|
|
+ // 提交更改
|
|
|
+ await companyManagementPage.submitForm();
|
|
|
+ await companyManagementPage.waitForDialogClosed();
|
|
|
+ await page.waitForTimeout(1000);
|
|
|
+
|
|
|
+ // 截图:更新后的页面
|
|
|
+ await page.screenshot({ path: 'test-results/company-reverse-status-final.png', fullPage: true });
|
|
|
+
|
|
|
+ // 验证状态已更新为"启用"
|
|
|
+ const enabledStatusCell = companyRow.locator('td').filter({ hasText: '启用' });
|
|
|
+ await expect(enabledStatusCell).toBeVisible();
|
|
|
+
|
|
|
+ // 清理测试数据
|
|
|
+ await companyManagementPage.deleteCompany(companyName);
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ test.describe('禁用状态公司显示验证', () => {
|
|
|
+ test('验证禁用状态的公司仍然显示在列表中(但删除按钮禁用)', async ({ companyManagementPage, page }) => {
|
|
|
+ const timestamp = Date.now();
|
|
|
+ const companyName = `禁用显示测试公司_${timestamp}`;
|
|
|
+
|
|
|
+ // 创建一个禁用状态的公司
|
|
|
+ await companyManagementPage.openCreateDialog();
|
|
|
+ await companyManagementPage.companyNameInput.fill(companyName);
|
|
|
+ await companyManagementPage.contactPersonInput.fill('测试联系人');
|
|
|
+ await companyManagementPage.contactPhoneInput.fill('13800138000');
|
|
|
+
|
|
|
+ // 选择禁用状态
|
|
|
+ const statusSelect = page.locator('[data-testid="create-company-status-select"]');
|
|
|
+ await statusSelect.click();
|
|
|
+ await page.waitForTimeout(500);
|
|
|
+ await page.locator('[data-testid="create-company-status-disabled"]').click();
|
|
|
+ await page.waitForTimeout(500);
|
|
|
+
|
|
|
+ // 提交表单
|
|
|
+ await companyManagementPage.submitForm();
|
|
|
+ await companyManagementPage.waitForDialogClosed();
|
|
|
+ await page.waitForTimeout(1000);
|
|
|
+
|
|
|
+ // 截图:禁用公司创建成功
|
|
|
+ await page.screenshot({ path: 'test-results/company-disabled-showing-step1.png', fullPage: true });
|
|
|
+
|
|
|
+ // 验证禁用公司确实显示在列表中
|
|
|
+ const exists = await companyManagementPage.companyExists(companyName);
|
|
|
+ expect(exists).toBe(true);
|
|
|
+
|
|
|
+ // 验证状态显示为"禁用"
|
|
|
+ const companyRow = companyManagementPage.companyTable.locator('tbody tr').filter({ hasText: companyName });
|
|
|
+ const statusCell = companyRow.locator('td').filter({ hasText: '禁用' });
|
|
|
+ await expect(statusCell).toBeVisible();
|
|
|
+
|
|
|
+ // 验证删除按钮是禁用的
|
|
|
+ const deleteButton = companyRow.locator('[data-testid^="delete-company-button-"]');
|
|
|
+ await expect(deleteButton).toBeDisabled();
|
|
|
+
|
|
|
+ // 截图:禁用公司的删除按钮被禁用
|
|
|
+ await page.screenshot({ path: 'test-results/company-disabled-showing-final.png', fullPage: true });
|
|
|
+
|
|
|
+ // 清理测试数据(禁用状态的公司也可以删除,只是 UI 按钮被禁用)
|
|
|
+ await companyManagementPage.deleteCompany(companyName);
|
|
|
+ });
|
|
|
+ });
|
|
|
+});
|