LAUTO 收口正式启用后自动化巡检

这个提交包含在:
2026-05-17 18:08:07 +08:00
父节点 0922f006d1
当前提交 70fdd1d2ed
共修改 8 个文件,包含 633 行新增和 16 行删除
@@ -96,6 +96,9 @@ 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";
const alreadyOnMode =
process.env.P2_FIN_LIVE_ALREADY_ON === "1" ||
process.env.LAUNCH_AUTO_PAYMENT_BATCH_ALREADY_ON === "1";
function nowMarker() {
return `${markerPrefix}-${Date.now()}-${Math.random().toString(16).slice(2, 8)}`;
@@ -406,8 +409,13 @@ test.describe("公网付款批次受控验收", () => {
summary.stages.preflight = {
paymentFlagBefore: snapshotFlag(paymentFlagBefore),
erpSyncEffectiveEnabled: erpFlagBefore.effectiveEnabled,
alreadyOnMode,
};
expect(paymentFlagBefore.effectiveEnabled, "payment_batch_v1 should be off before public live window").toBe(false);
if (alreadyOnMode) {
expect(paymentFlagBefore.effectiveEnabled, "payment_batch_v1 should already be on").toBe(true);
} else {
expect(paymentFlagBefore.effectiveEnabled, "payment_batch_v1 should be off before public live window").toBe(false);
}
expect(erpFlagBefore.effectiveEnabled, "erp_sync must remain off for this test").toBe(false);
const reimbursement = await createTestReimbursement(employee.api, marker);
@@ -428,12 +436,14 @@ test.describe("公网付款批次受控验收", () => {
financeTaskApproved: Boolean(approval.financeTaskId),
};
const paymentFlagOn = await updateFlag(
admin.api,
"payment_batch_v1",
"force_on",
`${issueId} short window ${marker}`,
);
const paymentFlagOn = alreadyOnMode
? paymentFlagBefore
: await updateFlag(
admin.api,
"payment_batch_v1",
"force_on",
`${issueId} short window ${marker}`,
);
summary.stages.flagOn = { paymentFlagOn: snapshotFlag(paymentFlagOn) };
expect(paymentFlagOn.effectiveEnabled).toBe(true);
const erpFlagAfterPaymentOn = await loadFlag(admin.api, "erp_sync");
@@ -512,10 +522,12 @@ test.describe("公网付款批次受控验收", () => {
});
expect(exportResponse.status(), "finance AP export should succeed while flag is on").toBe(200);
await expectAuditAction(admin.api, "FEATURE_FLAG_UPDATED", (item) =>
item.extra?.flagKey === "payment_batch_v1" &&
(item.extra?.to as Record<string, unknown> | undefined)?.overrideMode === "force_on",
);
if (!alreadyOnMode) {
await expectAuditAction(admin.api, "FEATURE_FLAG_UPDATED", (item) =>
item.extra?.flagKey === "payment_batch_v1" &&
(item.extra?.to as Record<string, unknown> | undefined)?.overrideMode === "force_on",
);
}
await expectAuditAction(admin.api, "PAYMENT_BATCH_CREATED", (item) => item.targetId === batch.id);
await expectAuditAction(admin.api, "PAYMENT_BATCH_REVIEWED", (item) => item.targetId === batch.id);
await expectAuditAction(admin.api, "PAYMENT_BATCH_RECEIPT_UPLOADED", (item) =>
@@ -546,7 +558,19 @@ test.describe("公网付款批次受控验收", () => {
} finally {
if (admin) {
try {
if (finalFlagState === "force_on" && !caughtError) {
if (alreadyOnMode) {
const finalPaymentFlag = await loadFlag(admin.api, "payment_batch_v1");
const finalErpFlag = await loadFlag(admin.api, "erp_sync");
summary.stages.finalState = {
paymentFlag: snapshotFlag(finalPaymentFlag),
erpSyncEffectiveEnabled: finalErpFlag.effectiveEnabled,
alreadyOnMode,
};
expect(finalPaymentFlag.effectiveEnabled).toBe(true);
expect(finalPaymentFlag.overrideMode).toBe("force_on");
expect(finalFlagState).toBe("force_on");
expect(finalErpFlag.effectiveEnabled).toBe(false);
} else if (finalFlagState === "force_on" && !caughtError) {
const paymentFlag = await loadFlag(admin.api, "payment_batch_v1");
const finalPaymentFlag =
paymentFlag.overrideMode === "force_on" && paymentFlag.effectiveEnabled