|
@@ -1,6 +1,8 @@
|
|
|
import { TIMEOUTS } from '../../utils/timeouts';
|
|
import { TIMEOUTS } from '../../utils/timeouts';
|
|
|
import { test, expect } from '../../utils/test-setup';
|
|
import { test, expect } from '../../utils/test-setup';
|
|
|
import { EnterpriseMiniPage } from '../../pages/mini/enterprise-mini.page';
|
|
import { EnterpriseMiniPage } from '../../pages/mini/enterprise-mini.page';
|
|
|
|
|
+import { AdminLoginPage } from '../../pages/admin/login.page';
|
|
|
|
|
+import { ORDER_STATUS } from '../../pages/admin/order-management.page';
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 订单列表页完整验证 E2E 测试 (Story 13.8)
|
|
* 订单列表页完整验证 E2E 测试 (Story 13.8)
|
|
@@ -25,27 +27,7 @@ import { EnterpriseMiniPage } from '../../pages/mini/enterprise-mini.page';
|
|
|
|
|
|
|
|
// 测试常量
|
|
// 测试常量
|
|
|
const TEST_USER_PHONE = '13800001111'; // 小程序登录手机号
|
|
const TEST_USER_PHONE = '13800001111'; // 小程序登录手机号
|
|
|
-const TEST_USER_PASSWORD = 'password123'; // 小程序登录密码
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 订单卡片数据结构(基于实际探索)
|
|
|
|
|
- */
|
|
|
|
|
-interface OrderCardInfo {
|
|
|
|
|
- /** 订单名称 */
|
|
|
|
|
- orderName: string;
|
|
|
|
|
- /** 创建日期 */
|
|
|
|
|
- createdAt: string;
|
|
|
|
|
- /** 订单状态 */
|
|
|
|
|
- orderStatus: string;
|
|
|
|
|
- /** 预计人数 */
|
|
|
|
|
- expectedPersonCount: string;
|
|
|
|
|
- /** 实际人数 */
|
|
|
|
|
- actualPersonCount: string;
|
|
|
|
|
- /** 开始日期 */
|
|
|
|
|
- expectedStartDate: string;
|
|
|
|
|
- /** 预计结束 */
|
|
|
|
|
- expectedEndDate: string;
|
|
|
|
|
-}
|
|
|
|
|
|
|
+const TEST_USER_PASSWORD = process.env.TEST_ENTERPRISE_PASSWORD || 'password123'; // 小程序登录密码
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 订单列表页常量(基于 Playwright MCP 探索)
|
|
* 订单列表页常量(基于 Playwright MCP 探索)
|
|
@@ -293,7 +275,7 @@ test.describe('订单列表页完整验证 - Story 13.8', () => {
|
|
|
console.debug('[筛选] 所有筛选标签可见');
|
|
console.debug('[筛选] 所有筛选标签可见');
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
- test('应该可以点击筛选标签', async ({ enterpriseMiniPage: miniPage }) => {
|
|
|
|
|
|
|
+ test('应该可以按订单状态筛选 - 进行中', async ({ enterpriseMiniPage: miniPage }) => {
|
|
|
// 1. 登录并导航到订单列表
|
|
// 1. 登录并导航到订单列表
|
|
|
await miniPage.goto();
|
|
await miniPage.goto();
|
|
|
await miniPage.login(TEST_USER_PHONE, TEST_USER_PASSWORD);
|
|
await miniPage.login(TEST_USER_PHONE, TEST_USER_PASSWORD);
|
|
@@ -312,11 +294,34 @@ test.describe('订单列表页完整验证 - Story 13.8', () => {
|
|
|
}
|
|
}
|
|
|
}, ORDER_LIST_SELECTORS.filterTabs.inProgress);
|
|
}, ORDER_LIST_SELECTORS.filterTabs.inProgress);
|
|
|
|
|
|
|
|
- await miniPage.page.waitForTimeout(TIMEOUTS.SHORT);
|
|
|
|
|
|
|
+ await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 验证筛选结果:检查页面包含"进行中"状态
|
|
|
|
|
+ const pageText = await miniPage.page.textContent('body');
|
|
|
|
|
+ const hasInProgressStatus = pageText?.includes('进行中');
|
|
|
|
|
+ expect(hasInProgressStatus).toBe(true);
|
|
|
|
|
+
|
|
|
|
|
+ // 4. 验证筛选后的订单列表
|
|
|
|
|
+ const filteredCards = miniPage.page.locator(ORDER_LIST_SELECTORS.orderCard);
|
|
|
|
|
+ const filteredCount = await filteredCards.count();
|
|
|
|
|
+
|
|
|
|
|
+ // 验证筛选后有订单显示(至少有进行中状态的订单)
|
|
|
|
|
+ expect(filteredCount).toBeGreaterThan(0);
|
|
|
|
|
+ console.debug(`[筛选] 筛选后订单数量: ${filteredCount}`);
|
|
|
|
|
+
|
|
|
|
|
+ // 5. 进一步验证:检查筛选结果确实包含"进行中"状态的订单
|
|
|
|
|
+ let foundMatchingOrder = false;
|
|
|
|
|
+ for (let i = 0; i < Math.min(filteredCount, 3); i++) {
|
|
|
|
|
+ const cardText = await filteredCards.nth(i).textContent();
|
|
|
|
|
+ if (cardText?.includes('进行中')) {
|
|
|
|
|
+ foundMatchingOrder = true;
|
|
|
|
|
+ console.debug(`[筛选] 订单 ${i + 1} 包含"进行中"状态`);
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ expect(foundMatchingOrder).toBe(true);
|
|
|
|
|
|
|
|
- // 3. 验证点击成功(检查是否有响应)
|
|
|
|
|
- // 注意:由于小程序可能没有实际筛选逻辑,这里只验证可以点击
|
|
|
|
|
- console.debug('[筛选] 筛选标签点击成功');
|
|
|
|
|
|
|
+ console.debug('[筛选] 筛选功能验证通过');
|
|
|
});
|
|
});
|
|
|
});
|
|
});
|
|
|
|
|
|
|
@@ -346,7 +351,7 @@ test.describe('订单列表页完整验证 - Story 13.8', () => {
|
|
|
console.debug('[搜索] 搜索框和搜索按钮可见');
|
|
console.debug('[搜索] 搜索框和搜索按钮可见');
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
- test('应该可以输入搜索关键词', async ({ enterpriseMiniPage: miniPage }) => {
|
|
|
|
|
|
|
+ test('应该可以按订单名称搜索并显示筛选结果', async ({ enterpriseMiniPage: miniPage }) => {
|
|
|
// 1. 登录并导航到订单列表
|
|
// 1. 登录并导航到订单列表
|
|
|
await miniPage.goto();
|
|
await miniPage.goto();
|
|
|
await miniPage.login(TEST_USER_PHONE, TEST_USER_PASSWORD);
|
|
await miniPage.login(TEST_USER_PHONE, TEST_USER_PASSWORD);
|
|
@@ -354,16 +359,312 @@ test.describe('订单列表页完整验证 - Story 13.8', () => {
|
|
|
await miniPage.page.goto(`http://localhost:8080${ORDER_LIST_SELECTORS.pageUrl}`);
|
|
await miniPage.page.goto(`http://localhost:8080${ORDER_LIST_SELECTORS.pageUrl}`);
|
|
|
await miniPage.page.waitForTimeout(TIMEOUTS.LONG);
|
|
await miniPage.page.waitForTimeout(TIMEOUTS.LONG);
|
|
|
|
|
|
|
|
- // 2. 在搜索框输入关键词
|
|
|
|
|
- // taro-input-core 不是标准 input,使用 type() 而非 fill()
|
|
|
|
|
|
|
+ // 2. 记录初始订单数量
|
|
|
|
|
+ const initialCards = miniPage.page.locator(ORDER_LIST_SELECTORS.orderCard);
|
|
|
|
|
+ const initialCount = await initialCards.count();
|
|
|
|
|
+ console.debug(`[搜索] 初始订单数量: ${initialCount}`);
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 在搜索框输入已知存在的订单关键词
|
|
|
|
|
+ // 基于实际探索:搜索 "Epic13" 应该能找到匹配的订单
|
|
|
const searchInput = miniPage.page.getByPlaceholder(ORDER_LIST_SELECTORS.searchPlaceholder).first();
|
|
const searchInput = miniPage.page.getByPlaceholder(ORDER_LIST_SELECTORS.searchPlaceholder).first();
|
|
|
- await searchInput.type('测试');
|
|
|
|
|
|
|
+ const searchKeyword = 'Epic13';
|
|
|
|
|
+ await searchInput.type(searchKeyword);
|
|
|
|
|
|
|
|
- // 3. 验证输入成功(检查元素的 value 属性)
|
|
|
|
|
|
|
+ // 4. 等待搜索自动触发(基于探索:搜索是自动触发的)
|
|
|
|
|
+ await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);
|
|
|
|
|
+
|
|
|
|
|
+ // 5. 验证搜索输入成功
|
|
|
const inputValue = await searchInput.evaluate((el: any) => el.value || el.textContent);
|
|
const inputValue = await searchInput.evaluate((el: any) => el.value || el.textContent);
|
|
|
- expect(inputValue).toContain('测试');
|
|
|
|
|
|
|
+ expect(inputValue).toContain(searchKeyword);
|
|
|
|
|
+ console.debug(`[搜索] 搜索关键词已输入: ${searchKeyword}`);
|
|
|
|
|
+
|
|
|
|
|
+ // 6. 验证搜索结果:检查页面包含搜索关键词
|
|
|
|
|
+ const pageText = await miniPage.page.textContent('body');
|
|
|
|
|
+ const hasKeyword = pageText?.includes(searchKeyword);
|
|
|
|
|
+ expect(hasKeyword).toBe(true);
|
|
|
|
|
+
|
|
|
|
|
+ // 7. 验证搜索结果只包含匹配的订单
|
|
|
|
|
+ const searchResults = miniPage.page.locator(ORDER_LIST_SELECTORS.orderCard);
|
|
|
|
|
+ const resultCount = await searchResults.count();
|
|
|
|
|
+
|
|
|
|
|
+ // 验证有搜索结果
|
|
|
|
|
+ expect(resultCount).toBeGreaterThan(0);
|
|
|
|
|
+ console.debug(`[搜索] 搜索结果数量: ${resultCount}`);
|
|
|
|
|
+
|
|
|
|
|
+ // 8. 验证搜索结果确实包含搜索关键词
|
|
|
|
|
+ let foundMatchingResult = false;
|
|
|
|
|
+ for (let i = 0; i < Math.min(resultCount, 3); i++) {
|
|
|
|
|
+ const cardText = await searchResults.nth(i).textContent();
|
|
|
|
|
+ if (cardText?.includes(searchKeyword)) {
|
|
|
|
|
+ foundMatchingResult = true;
|
|
|
|
|
+ console.debug(`[搜索] 搜索结果 ${i + 1} 包含关键词 "${searchKeyword}"`);
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ expect(foundMatchingResult).toBe(true);
|
|
|
|
|
+
|
|
|
|
|
+ console.debug('[搜索] 搜索功能验证通过');
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 测试场景:后台编辑后订单列表同步验证 (AC3, AC5)
|
|
|
|
|
+ *
|
|
|
|
|
+ * 测试流程:
|
|
|
|
|
+ * 1. 后台登录并创建/编辑订单
|
|
|
|
|
+ * 2. 小程序验证订单信息同步
|
|
|
|
|
+ * 3. 验证数据同步时间(≤ 10 秒)
|
|
|
|
|
+ */
|
|
|
|
|
+ test.describe.serial('后台编辑后订单列表同步测试 (AC3, AC5)', () => {
|
|
|
|
|
+ test.use({ storageState: undefined });
|
|
|
|
|
+
|
|
|
|
|
+ // 管理员登录凭据
|
|
|
|
|
+ const ADMIN_USERNAME = 'admin';
|
|
|
|
|
+ const ADMIN_PASSWORD = process.env.TEST_ADMIN_PASSWORD || 'admin123';
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 辅助函数:执行管理员登录
|
|
|
|
|
+ * @param adminLoginPage 管理员登录页面对象
|
|
|
|
|
+ */
|
|
|
|
|
+ async function adminLogin(adminLoginPage: AdminLoginPage): Promise<void> {
|
|
|
|
|
+ await adminLoginPage.goto();
|
|
|
|
|
+ await adminLoginPage.login(ADMIN_USERNAME, ADMIN_PASSWORD);
|
|
|
|
|
+ // 验证登录成功
|
|
|
|
|
+ await adminLoginPage.page.waitForURL('/admin/dashboard', { timeout: TIMEOUTS.PAGE_LOAD });
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 辅助函数:等待订单在小程序列表中更新
|
|
|
|
|
+ * @param miniPage 小程序页面
|
|
|
|
|
+ * @param orderName 订单名称
|
|
|
|
|
+ * @param timeout 超时时间(毫秒)
|
|
|
|
|
+ * @returns 是否在超时时间内检测到更新
|
|
|
|
|
+ */
|
|
|
|
|
+ async function waitForOrderUpdate(miniPage: EnterpriseMiniPage, orderName: string, timeout: number = 10000): Promise<boolean> {
|
|
|
|
|
+ const startTime = Date.now();
|
|
|
|
|
+ while (Date.now() - startTime < timeout) {
|
|
|
|
|
+ // 刷新页面
|
|
|
|
|
+ await miniPage.page.reload({ waitUntil: 'domcontentloaded', timeout: TIMEOUTS.PAGE_LOAD });
|
|
|
|
|
+ await miniPage.page.waitForTimeout(TIMEOUTS.SHORT);
|
|
|
|
|
+
|
|
|
|
|
+ // 检查订单是否出现
|
|
|
|
|
+ const pageText = await miniPage.page.textContent('body');
|
|
|
|
|
+ if (pageText && pageText.includes(orderName)) {
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ await miniPage.page.waitForTimeout(500);
|
|
|
|
|
+ }
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 辅助函数:在小程序订单列表中查找订单
|
|
|
|
|
+ * @param miniPage 小程序页面
|
|
|
|
|
+ * @param orderName 订单名称
|
|
|
|
|
+ * @returns 是否找到订单
|
|
|
|
|
+ */
|
|
|
|
|
+ async function findOrderInList(miniPage: EnterpriseMiniPage, orderName: string): Promise<boolean> {
|
|
|
|
|
+ const pageText = await miniPage.page.textContent('body');
|
|
|
|
|
+ if (!pageText) return false;
|
|
|
|
|
+
|
|
|
|
|
+ // 检查是否包含订单名称
|
|
|
|
|
+ const hasOrderName = pageText.includes(orderName);
|
|
|
|
|
+ return hasOrderName;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ test('后台修改订单名称后小程序同步', async ({ enterpriseMiniPage: miniPage, orderManagementPage: adminPage, adminLoginPage }) => {
|
|
|
|
|
+ // 测试数据
|
|
|
|
|
+ const originalName = `E2E测试_名称同步_${Date.now()}`;
|
|
|
|
|
+ const updatedName = `${originalName}_已更新`;
|
|
|
|
|
+
|
|
|
|
|
+ // 1. 后台登录并创建订单(关联到测试公司)
|
|
|
|
|
+ await adminLogin(adminLoginPage);
|
|
|
|
|
+ await adminPage.goto();
|
|
|
|
|
+ const createResult = await adminPage.createOrder({
|
|
|
|
|
+ name: originalName,
|
|
|
|
|
+ companyName: '测试公司', // 关联到测试公司,确保小程序能显示
|
|
|
|
|
+ expectedStartDate: '2026-02-01',
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ expect(createResult.success).toBe(true);
|
|
|
|
|
+ console.debug(`[跨端同步] 后台创建订单成功: ${originalName}`);
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 小程序验证订单显示
|
|
|
|
|
+ await miniPage.goto();
|
|
|
|
|
+ await miniPage.login(TEST_USER_PHONE, TEST_USER_PASSWORD);
|
|
|
|
|
+ await miniPage.expectLoginSuccess();
|
|
|
|
|
+ await miniPage.navigateToOrderList();
|
|
|
|
|
+
|
|
|
|
|
+ // 等待订单出现
|
|
|
|
|
+ const found = await waitForOrderUpdate(miniPage, originalName, TIMEOUTS.OPERATION);
|
|
|
|
|
+ expect(found).toBe(true);
|
|
|
|
|
+ console.debug(`[跨端同步] 小程序显示订单: ${originalName}`);
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 后台修改订单名称
|
|
|
|
|
+ await adminLogin(adminLoginPage);
|
|
|
|
|
+ await adminPage.goto();
|
|
|
|
|
+ const editResult = await adminPage.editOrder(originalName, {
|
|
|
|
|
+ name: updatedName, // 编辑时需要提供 name
|
|
|
|
|
+ companyName: '测试公司',
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ expect(editResult.success).toBe(true);
|
|
|
|
|
+ console.debug(`[跨端同步] 后台修改订单名称: ${originalName} → ${updatedName}`);
|
|
|
|
|
+
|
|
|
|
|
+ // 4. 小程序验证订单名称更新
|
|
|
|
|
+ await miniPage.navigateToOrderList();
|
|
|
|
|
+ const updated = await waitForOrderUpdate(miniPage, updatedName, TIMEOUTS.OPERATION);
|
|
|
|
|
+ expect(updated).toBe(true);
|
|
|
|
|
+
|
|
|
|
|
+ // 验证旧名称不再存在
|
|
|
|
|
+ const oldNameExists = await findOrderInList(miniPage, originalName);
|
|
|
|
|
+ expect(oldNameExists).toBe(false);
|
|
|
|
|
+
|
|
|
|
|
+ console.debug(`[跨端同步] 小程序订单名称已更新: ${updatedName}`);
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ test('后台修改订单状态后小程序同步', async ({ enterpriseMiniPage: miniPage, orderManagementPage: adminPage, adminLoginPage }) => {
|
|
|
|
|
+ // 测试数据
|
|
|
|
|
+ const orderName = `E2E测试_状态同步_${Date.now()}`;
|
|
|
|
|
+
|
|
|
|
|
+ // 1. 后台登录并创建订单(默认草稿状态)
|
|
|
|
|
+ await adminLogin(adminLoginPage);
|
|
|
|
|
+ await adminPage.goto();
|
|
|
|
|
+ const createResult = await adminPage.createOrder({
|
|
|
|
|
+ name: orderName,
|
|
|
|
|
+ status: ORDER_STATUS.DRAFT,
|
|
|
|
|
+ companyName: '测试公司',
|
|
|
|
|
+ expectedStartDate: '2026-02-01',
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ expect(createResult.success).toBe(true);
|
|
|
|
|
+ console.debug(`[跨端同步] 后台创建订单: ${orderName}, 状态: 草稿`);
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 小程序验证订单显示
|
|
|
|
|
+ await miniPage.goto();
|
|
|
|
|
+ await miniPage.login(TEST_USER_PHONE, TEST_USER_PASSWORD);
|
|
|
|
|
+ await miniPage.expectLoginSuccess();
|
|
|
|
|
+ await miniPage.navigateToOrderList();
|
|
|
|
|
+
|
|
|
|
|
+ const found = await waitForOrderUpdate(miniPage, orderName, TIMEOUTS.OPERATION);
|
|
|
|
|
+ expect(found).toBe(true);
|
|
|
|
|
+ console.debug(`[跨端同步] 小程序显示订单: ${orderName}`);
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 后台修改订单状态为"进行中"
|
|
|
|
|
+ await adminLogin(adminLoginPage);
|
|
|
|
|
+ await adminPage.goto();
|
|
|
|
|
+ const editResult = await adminPage.editOrder(orderName, {
|
|
|
|
|
+ name: orderName, // 编辑时需要提供 name
|
|
|
|
|
+ companyName: '测试公司',
|
|
|
|
|
+ status: ORDER_STATUS.IN_PROGRESS,
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ expect(editResult.success).toBe(true);
|
|
|
|
|
+ console.debug(`[跨端同步] 后台修改订单状态: 草稿 → 进行中`);
|
|
|
|
|
+
|
|
|
|
|
+ // 4. 小程序验证订单状态更新
|
|
|
|
|
+ await miniPage.navigateToOrderList();
|
|
|
|
|
+ await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);
|
|
|
|
|
+
|
|
|
|
|
+ // 检查页面包含"进行中"状态
|
|
|
|
|
+ const pageText = await miniPage.page.textContent('body');
|
|
|
|
|
+ expect(pageText).toContain('进行中');
|
|
|
|
|
+
|
|
|
|
|
+ console.debug(`[跨端同步] 小程序订单状态已更新: 进行中`);
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ test('后台修改日期后小程序同步', async ({ enterpriseMiniPage: miniPage, orderManagementPage: adminPage, adminLoginPage }) => {
|
|
|
|
|
+ // 测试数据
|
|
|
|
|
+ const orderName = `E2E测试_日期同步_${Date.now()}`;
|
|
|
|
|
+ const originalDate = '2026-02-01';
|
|
|
|
|
+ const updatedDate = '2026-03-15';
|
|
|
|
|
+
|
|
|
|
|
+ // 1. 后台登录并创建订单
|
|
|
|
|
+ await adminLogin(adminLoginPage);
|
|
|
|
|
+ await adminPage.goto();
|
|
|
|
|
+ const createResult = await adminPage.createOrder({
|
|
|
|
|
+ name: orderName,
|
|
|
|
|
+ companyName: '测试公司',
|
|
|
|
|
+ expectedStartDate: originalDate,
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ expect(createResult.success).toBe(true);
|
|
|
|
|
+ console.debug(`[跨端同步] 后台创建订单: ${orderName}, 开始日期: ${originalDate}`);
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 小程序验证订单显示
|
|
|
|
|
+ await miniPage.goto();
|
|
|
|
|
+ await miniPage.login(TEST_USER_PHONE, TEST_USER_PASSWORD);
|
|
|
|
|
+ await miniPage.expectLoginSuccess();
|
|
|
|
|
+ await miniPage.navigateToOrderList();
|
|
|
|
|
+
|
|
|
|
|
+ const found = await waitForOrderUpdate(miniPage, orderName, TIMEOUTS.OPERATION);
|
|
|
|
|
+ expect(found).toBe(true);
|
|
|
|
|
+
|
|
|
|
|
+ // 验证日期显示
|
|
|
|
|
+ const initialPageText = await miniPage.page.textContent('body');
|
|
|
|
|
+ expect(initialPageText).toContain(originalDate);
|
|
|
|
|
+ console.debug(`[跨端同步] 小程序显示日期: ${originalDate}`);
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 后台修改预计开始日期
|
|
|
|
|
+ await adminLogin(adminLoginPage);
|
|
|
|
|
+ await adminPage.goto();
|
|
|
|
|
+ const editResult = await adminPage.editOrder(orderName, {
|
|
|
|
|
+ name: orderName, // 编辑时需要提供 name
|
|
|
|
|
+ companyName: '测试公司',
|
|
|
|
|
+ expectedStartDate: updatedDate,
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ expect(editResult.success).toBe(true);
|
|
|
|
|
+ console.debug(`[跨端同步] 后台修改日期: ${originalDate} → ${updatedDate}`);
|
|
|
|
|
+
|
|
|
|
|
+ // 4. 小程序验证日期更新
|
|
|
|
|
+ await miniPage.navigateToOrderList();
|
|
|
|
|
+ await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);
|
|
|
|
|
+
|
|
|
|
|
+ // 检查更新后的日期
|
|
|
|
|
+ const updatedPageText = await miniPage.page.textContent('body');
|
|
|
|
|
+ expect(updatedPageText).toContain(updatedDate);
|
|
|
|
|
+
|
|
|
|
|
+ console.debug(`[跨端同步] 小程序日期已更新: ${updatedDate}`);
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ test('验证数据同步时间(≤ 10 秒)', async ({ enterpriseMiniPage: miniPage, orderManagementPage: adminPage, adminLoginPage }) => {
|
|
|
|
|
+ // 测试数据
|
|
|
|
|
+ const orderName = `E2E测试_同步时间_${Date.now()}`;
|
|
|
|
|
+ const SYNC_TIMEOUT = 10000; // 10 秒
|
|
|
|
|
+
|
|
|
|
|
+ // 1. 后台登录并创建订单
|
|
|
|
|
+ await adminLogin(adminLoginPage);
|
|
|
|
|
+ await adminPage.goto();
|
|
|
|
|
+ const createResult = await adminPage.createOrder({
|
|
|
|
|
+ name: orderName,
|
|
|
|
|
+ companyName: '测试公司',
|
|
|
|
|
+ expectedStartDate: '2026-02-01',
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ expect(createResult.success).toBe(true);
|
|
|
|
|
+ console.debug(`[跨端同步] 后台创建订单: ${orderName}`);
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 记录开始时间并等待小程序显示
|
|
|
|
|
+ const startTime = Date.now();
|
|
|
|
|
+
|
|
|
|
|
+ await miniPage.goto();
|
|
|
|
|
+ await miniPage.login(TEST_USER_PHONE, TEST_USER_PASSWORD);
|
|
|
|
|
+ await miniPage.expectLoginSuccess();
|
|
|
|
|
+ await miniPage.navigateToOrderList();
|
|
|
|
|
+
|
|
|
|
|
+ // 等待订单出现,最多等待 10 秒
|
|
|
|
|
+ const found = await waitForOrderUpdate(miniPage, orderName, SYNC_TIMEOUT);
|
|
|
|
|
+
|
|
|
|
|
+ const syncTime = Date.now() - startTime;
|
|
|
|
|
+ console.debug(`[跨端同步] 数据同步耗时: ${syncTime}ms`);
|
|
|
|
|
+
|
|
|
|
|
+ // 验证订单在 10 秒内同步
|
|
|
|
|
+ expect(found).toBe(true);
|
|
|
|
|
+ expect(syncTime).toBeLessThanOrEqual(SYNC_TIMEOUT);
|
|
|
|
|
|
|
|
- console.debug('[搜索] 搜索框输入成功');
|
|
|
|
|
|
|
+ console.debug(`[跨端同步] 数据同步时间验证通过: ${syncTime}ms ≤ ${SYNC_TIMEOUT}ms`);
|
|
|
});
|
|
});
|
|
|
});
|
|
});
|
|
|
|
|
|