fix: 加固日历日期与动态错误合同(09-05-error-explainability-payment-readiness,09-08-reimbursement-payment-closeout)
这个提交包含在:
@@ -434,6 +434,29 @@ describe("reimbursement create enhancements", () => {
|
||||
await app.close();
|
||||
});
|
||||
|
||||
it.each(["reimbursementDate", "travelStartDate", "travelEndDate"])("rejects an overflowing %s before draft writes", async (field) => {
|
||||
const { app, state, prisma } = await buildApp();
|
||||
try {
|
||||
const response = await app.inject({ method: "POST", url: "/api/reimbursements",
|
||||
payload: { [field]: "2026-02-30" } });
|
||||
expect(response.statusCode).toBe(400);
|
||||
expect(response.json().error.details.reasonCode).toBe("reimbursement.invalid_input");
|
||||
expect(response.json().error.details.fieldErrors[field]).toContain("invalid_calendar_date");
|
||||
expect(prisma.$transaction).not.toHaveBeenCalled();
|
||||
expect(state.reimbursements).toEqual([]);
|
||||
expect(state.auditLogs).toEqual([]);
|
||||
} finally { await app.close(); }
|
||||
});
|
||||
|
||||
it.each(["2024-02-29", "2026-04-30"])("stores valid reimbursement date %s unchanged", async (reimbursementDate) => {
|
||||
const { app, state } = await buildApp();
|
||||
try {
|
||||
const response = await app.inject({ method: "POST", url: "/api/reimbursements", payload: { reimbursementDate } });
|
||||
expect(response.statusCode).toBe(200);
|
||||
expect(state.reimbursements[0].reimbursement_date.toISOString()).toBe(`${reimbursementDate}T00:00:00.000Z`);
|
||||
} finally { await app.close(); }
|
||||
});
|
||||
|
||||
it("creates reimbursement items from template", async () => {
|
||||
const { app, state } = await buildApp();
|
||||
|
||||
|
||||
在新工单中引用
屏蔽一个用户