/** 通知摘要失败、加载和空结果必须在真实外壳内明确区分。 */ import assert from "node:assert/strict"; import { test } from "node:test"; import { backendOrigin, login, scenario } from "./helpers/console-browser.mjs"; test("Failed notification summaries expose retry instead of an empty inbox", (t) => scenario(t, {}, async (page) => { let retry = false; let release; const pending = new Promise((resolve) => (release = resolve)); await page .context() .route(`${backendOrigin}/console/v1/client_care/mail`, async (route) => { if (retry) await pending; await route.fulfill({ json: retry ? { status: 200, msg: "", data: { credit_limit: { count: 1, list: [ { id: 7, title: "待处理通知", read: 0, create_time: 1700000000, }, ], type: [], }, }, } : { status: 503, msg: "通知服务暂不可用", data: {} }, }); }); await login(page); await page.getByRole("button", { name: "查看消息", exact: true }).click(); const dialog = page.getByRole("dialog", { name: "事件通知", exact: true }); await dialog.getByRole("alert").waitFor(); assert.equal( await dialog.getByText("暂无事件通知", { exact: true }).count(), 0, ); retry = true; await dialog .getByRole("button", { name: "重新加载通知", exact: true }) .click(); await dialog.getByRole("status").waitFor(); assert.equal(await dialog.getByRole("alert").count(), 0); assert.equal( await dialog.getByText("暂无事件通知", { exact: true }).count(), 0, ); release(); await dialog .getByRole("button", { name: "待处理通知", exact: false }) .waitFor(); assert.equal(await dialog.getByRole("status").count(), 0); return { unavailableNotEmpty: true, pendingNotEmpty: true, explicitRetryRecovered: true, }; })); test("A successful empty notification summary remains a genuine empty inbox", (t) => scenario(t, {}, async (page) => { await login(page); await page.getByRole("button", { name: "查看消息", exact: true }).click(); const dialog = page.getByRole("dialog", { name: "事件通知", exact: true }); await dialog.getByText("暂无事件通知", { exact: true }).waitFor(); assert.equal(await dialog.getByRole("alert").count(), 0); assert.equal(await dialog.getByRole("status").count(), 0); return { successfulEmptySummary: true, falseFailure: false }; }));