FINPROD ACCTH 启用付款批次并收口代账交接

这个提交包含在:
2026-05-17 12:01:53 +08:00
父节点 426a96816a
当前提交 a3a4a861c7
共修改 8 个文件,包含 395 行新增和 20 行删除
@@ -95,6 +95,7 @@ const baseUrl = process.env.LIVE_SMOKE_BASE_URL?.trim() || "https://oa.hyinda.co
const reportDir = process.env.P2_FIN_LIVE_REPORT_DIR?.trim() ||
path.resolve(process.cwd(), "..", "artifacts/qa-flow/p2-fin-live-local");
const summaryPath = path.join(reportDir, "live-result.json");
const finalFlagState = process.env.P2_FIN_LIVE_FINAL_STATE?.trim() === "force_on" ? "force_on" : "force_off";
function nowMarker() {
return `${markerPrefix}-${Date.now()}-${Math.random().toString(16).slice(2, 8)}`;
@@ -363,11 +364,11 @@ async function expectAuditAction(
.toBe(true);
}
test.describe("P2-FIN-LIVE 公网付款批次短窗口", () => {
test.describe("公网付款批次受控验收", () => {
test.skip(process.env.E2E_MODE !== "live", "仅在 live 模式下执行");
test.describe.configure({ mode: "serial" });
test("公网付款批次 flag-on 闭环后强制回滚到 flag-off", async ({}, testInfo) => {
test("公网付款批次 flag-on 闭环后按 final mode 收口", async ({}, testInfo) => {
test.setTimeout(420_000);
if (process.env.P2_FIN_LIVE_APPROVED !== "1") {
throw new Error("P2_FIN_LIVE_APPROVED=1 is required for public write test");
@@ -377,12 +378,14 @@ test.describe("P2-FIN-LIVE 公网付款批次短窗口", () => {
const marker = nowMarker();
const summary: LiveSummary = {
issueId,
mode: "p2-fin-live",
mode: finalFlagState === "force_on" ? "fin-prod-enable" : "p2-fin-live",
status: "RUNNING",
baseUrl,
marker,
startedAt: new Date().toISOString(),
stages: {},
stages: {
finalFlagState,
},
};
const clients: AuthenticatedApiClient[] = [];
@@ -543,13 +546,29 @@ test.describe("P2-FIN-LIVE 公网付款批次短窗口", () => {
} finally {
if (admin) {
try {
const rolledBack = await forcePaymentBatchOff(admin.api, `${issueId} rollback ${marker}`);
summary.stages.rollback = { paymentFlagAfterRollback: snapshotFlag(rolledBack) };
expect(rolledBack.effectiveEnabled).toBe(false);
if (finalFlagState === "force_on" && !caughtError) {
const paymentFlag = await loadFlag(admin.api, "payment_batch_v1");
const finalPaymentFlag =
paymentFlag.overrideMode === "force_on" && paymentFlag.effectiveEnabled
? paymentFlag
: await updateFlag(admin.api, "payment_batch_v1", "force_on", `${issueId} keep force_on ${marker}`);
const finalErpFlag = await loadFlag(admin.api, "erp_sync");
summary.stages.finalState = {
paymentFlag: snapshotFlag(finalPaymentFlag),
erpSyncEffectiveEnabled: finalErpFlag.effectiveEnabled,
};
expect(finalPaymentFlag.effectiveEnabled).toBe(true);
expect(finalPaymentFlag.overrideMode).toBe("force_on");
expect(finalErpFlag.effectiveEnabled).toBe(false);
} else {
const rolledBack = await forcePaymentBatchOff(admin.api, `${issueId} rollback ${marker}`);
summary.stages.rollback = { paymentFlagAfterRollback: snapshotFlag(rolledBack) };
expect(rolledBack.effectiveEnabled).toBe(false);
}
} catch (error) {
rollbackError = error;
summary.status = "FAIL";
summary.stages.rollback = { error: sanitizeError(error) };
summary.stages.finalState = { error: sanitizeError(error) };
}
}