修复: 08-07-business-routing-regression-repair 关闭资产创建跳转回归
这个提交包含在:
@@ -492,6 +492,29 @@ async function mockApis(page: Page, options: { roleCodes?: string[] } = {}) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (pathName === "/api/assets" && request.method() === "POST") {
|
||||
const payload = request.postDataJSON() as { name?: string };
|
||||
if (payload.name === "合成失败资产") {
|
||||
await route.fulfill({
|
||||
status: 400,
|
||||
contentType: "application/json",
|
||||
body: JSON.stringify({
|
||||
requestId: "mock-r103-asset-create-failure",
|
||||
error: { code: "VALID_001", message: "资产保存失败,请检查填写内容。" },
|
||||
}),
|
||||
});
|
||||
return;
|
||||
}
|
||||
await fulfillJson(route, {
|
||||
asset: {
|
||||
...assetListItem(),
|
||||
...payload,
|
||||
id: assetId,
|
||||
},
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
if (pathName === `/api/assets/${assetId}` && request.method() === "GET") {
|
||||
await fulfillJson(route, { asset: assetListItem() });
|
||||
return;
|
||||
@@ -894,6 +917,45 @@ test.describe("R103 cross page UI consistency", () => {
|
||||
await page.getByTestId("unsaved-changes-discard").click();
|
||||
await expect(page).toHaveURL(/\/assets$/);
|
||||
await expect(page.getByTestId("asset-row")).toBeVisible();
|
||||
|
||||
await page.getByTestId("asset-create").click();
|
||||
await expect(page).toHaveURL(/\/assets\/new$/);
|
||||
await page.getByTestId("asset-name").fill("合成已保存资产");
|
||||
await page.getByTestId("asset-category").selectOption("asset-category-r103");
|
||||
await page.getByTestId("asset-legal-entity").selectOption("legal-r103");
|
||||
await page.getByTestId("asset-cost-center").selectOption("cost-r103");
|
||||
await page.getByTestId("asset-save").click();
|
||||
await expect(page).toHaveURL(new RegExp(`/assets/${assetId}$`));
|
||||
await expect(page.getByTestId("unsaved-changes-dialog")).toHaveCount(0);
|
||||
await expect(page.locator("html")).toHaveAttribute("data-unsaved-changes", "false");
|
||||
|
||||
await page.goBack();
|
||||
await expect(page).toHaveURL(/\/assets$/);
|
||||
await page.goForward();
|
||||
await expect(page).toHaveURL(new RegExp(`/assets/${assetId}$`));
|
||||
|
||||
await page.goBack();
|
||||
await page.getByTestId("asset-create").click();
|
||||
await page.getByTestId("asset-name").fill("合成失败资产");
|
||||
await page.getByTestId("asset-category").selectOption("asset-category-r103");
|
||||
await page.getByTestId("asset-legal-entity").selectOption("legal-r103");
|
||||
await page.getByTestId("asset-cost-center").selectOption("cost-r103");
|
||||
const failedCreateResponse = page.waitForResponse(
|
||||
(response) => response.request().method() === "POST" && new URL(response.url()).pathname === "/api/assets",
|
||||
);
|
||||
await page.getByTestId("asset-save").click();
|
||||
const failedResponse = await failedCreateResponse;
|
||||
expect(failedResponse.ok()).toBe(false);
|
||||
expect(failedResponse.status()).toBe(400);
|
||||
await expect(page).toHaveURL(/\/assets\/new$/);
|
||||
await expect(page.getByTestId("asset-name")).toHaveValue("合成失败资产");
|
||||
await expect(page.getByRole("main").getByText("资产保存失败,请检查填写内容。", { exact: true })).toBeVisible();
|
||||
|
||||
await page.getByRole("button", { name: "返回资产列表", exact: true }).click();
|
||||
await expect(page.getByTestId("unsaved-changes-dialog")).toContainText("资产表单尚未保存");
|
||||
await page.getByTestId("unsaved-changes-continue").click();
|
||||
await expect(page).toHaveURL(/\/assets\/new$/);
|
||||
await expect(page.getByTestId("asset-name")).toHaveValue("合成失败资产");
|
||||
});
|
||||
|
||||
test("共享未保存保护覆盖浏览器返回取消、确认与刷新拦截", async ({ page }) => {
|
||||
|
||||
在新工单中引用
屏蔽一个用户