iloom-flatten/e2e/collaboration-workflow.spec.ts

183 lines
5.9 KiB
TypeScript

import { test, expect } from '@playwright/test';
/**
* 协作流程测试
* 核心路径:采购商创建计划 → 纺织厂确认 → 入库 → 采购商看到库存
*
* 注意:这些测试需要真实的数据库连接和测试账号
* 在实际运行前需要配置测试环境
*/
test.describe('协作流程 - 采购商视角', () => {
test.beforeEach(async ({ page }) => {
// 登录采购商账号(需要配置测试账号)
await page.goto('/login');
// await loginAsPurchaser(page);
});
test('采购商创建新计划', async ({ page }) => {
// 导航到新建计划页面
await page.goto('/purchaser/plans/new');
// 验证页面加载
await expect(page.locator('h1')).toContainText('新建纺织计划');
// 填写计划表单
await page.fill('[name="productName"]', '测试产品');
await page.fill('[name="color"]', '红色');
await page.fill('[name="targetQuantity"]', '1000');
// 添加纱线配比
await page.click('text=添加纱线');
await page.fill('[name="yarnName"]', '测试纱线');
await page.fill('[name="ratio"]', '100');
// 提交表单
// await page.click('button[type="submit"]');
// 验证创建成功
// await expect(page).toHaveURL(/.*purchaser\/plans/);
});
test('采购商查看计划列表', async ({ page }) => {
await page.goto('/purchaser/plans');
// 验证页面加载
await expect(page.locator('h1')).toContainText('计划总览');
// 验证计划列表存在
await expect(page.locator('[data-testid="plan-list"]')).toBeVisible();
});
test('采购商查看库存', async ({ page }) => {
await page.goto('/purchaser/warehouse');
// 验证页面加载
await expect(page.locator('h1')).toContainText('仓库管理');
// 验证库存列表
await expect(page.locator('[data-testid="inventory-list"]')).toBeVisible();
});
});
test.describe('协作流程 - 纺织厂视角', () => {
test.beforeEach(async ({ page }) => {
// 登录纺织厂账号
await page.goto('/login');
// await loginAsTextileFactory(page);
});
test('纺织厂查看计划', async ({ page }) => {
await page.goto('/textile/plans');
// 验证页面加载
await expect(page.locator('h1')).toContainText('计划总览');
// 验证计划列表
await expect(page.locator('[data-testid="plan-list"]')).toBeVisible();
});
test('纺织厂确认流程节点', async ({ page }) => {
await page.goto('/textile/plans');
// 找到待确认的计划
const pendingPlan = page.locator('[data-testid="plan-card"]').first();
await expect(pendingPlan).toBeVisible();
// 展开计划详情
await pendingPlan.click();
// 点击确认按钮
// await page.click('[data-testid="confirm-step-button"]');
// 验证确认成功
// await expect(page.locator('[data-testid="step-completed"]')).toBeVisible();
});
test('纺织厂坯布入库', async ({ page }) => {
await page.goto('/textile/plans');
// 找到进行中的计划
const activePlan = page.locator('[data-testid="plan-card"]').first();
await expect(activePlan).toBeVisible();
// 展开计划
await activePlan.click();
// 填写入库信息
// await page.fill('[data-testid="inbound-quantity"]', '100');
// await page.fill('[data-testid="inbound-rolls"]', '10');
// 提交入库
// await page.click('[data-testid="submit-inbound"]');
// 验证入库成功
// await expect(page.locator('[data-testid="inbound-success"]')).toBeVisible();
});
test('纺织厂查看坯布仓库', async ({ page }) => {
await page.goto('/textile/fabric-warehouse');
// 验证页面加载
await expect(page.locator('h1')).toContainText('原坯布仓库');
// 验证库存列表
await expect(page.locator('[data-testid="fabric-inventory"]')).toBeVisible();
});
});
test.describe('数据同步验证', () => {
test('入库后采购商实时看到库存更新', async ({ page, browser }) => {
// 这个测试需要两个浏览器上下文模拟两个角色
const purchaserContext = await browser.newContext();
const textileContext = await browser.newContext();
const purchaserPage = await purchaserContext.newPage();
const textilePage = await textileContext.newPage();
try {
// 采购商查看初始库存
await purchaserPage.goto('/purchaser/warehouse');
// const initialInventory = await getInventoryCount(purchaserPage);
// 纺织厂执行入库
await textilePage.goto('/textile/plans');
// await textilePage.click('[data-testid="inbound-button"]');
// await textilePage.fill('[data-testid="quantity"]', '100');
// await textilePage.click('[data-testid="submit"]');
// 等待实时同步
await purchaserPage.waitForTimeout(2000);
// 验证采购商看到更新后的库存
// const updatedInventory = await getInventoryCount(purchaserPage);
// expect(updatedInventory).toBe(initialInventory + 100);
} finally {
await purchaserContext.close();
await textileContext.close();
}
});
});
test.describe('分享链接流程', () => {
test('通过分享链接导入计划', async ({ page }) => {
// 访问分享链接
const shareToken = 'test-token';
await page.goto(`/import?token=${shareToken}`);
// 验证导入页面加载
await expect(page.locator('h1')).toContainText('导入计划');
// 验证计划信息展示(不包含敏感信息)
await expect(page.locator('[data-testid="plan-code"]')).toBeVisible();
await expect(page.locator('[data-testid="fabric-code"]')).toBeVisible();
// 确认导入
// await page.click('[data-testid="confirm-import"]');
// 验证导入成功
// await expect(page).toHaveURL(/.*textile\/plans/);
});
});