32 行
1.2 KiB
JavaScript
32 行
1.2 KiB
JavaScript
const fs = require("node:fs");
|
|
const path = require("node:path");
|
|
|
|
const MIGRATION_PATH = path.resolve(
|
|
__dirname,
|
|
"../../../prisma/migrations/20260829120000_reimbursement_expense_policy_invoice_guard/migration.sql",
|
|
);
|
|
|
|
describe("reimbursement expense policy migration", () => {
|
|
it("adds backward-compatible defaults before applying allowance overrides", () => {
|
|
const source = fs.readFileSync(MIGRATION_PATH, "utf8");
|
|
|
|
const requiresInvoiceColumn = source.indexOf(
|
|
'ADD COLUMN "requires_invoice" BOOLEAN NOT NULL DEFAULT true',
|
|
);
|
|
const approvalBasisColumn = source.indexOf(
|
|
'ADD COLUMN "asset_prior_approval_basis" TEXT',
|
|
);
|
|
const allowanceOverride = source.indexOf(
|
|
'SET "requires_invoice" = false',
|
|
);
|
|
|
|
expect(requiresInvoiceColumn).toBeGreaterThanOrEqual(0);
|
|
expect(approvalBasisColumn).toBeGreaterThanOrEqual(0);
|
|
expect(allowanceOverride).toBeGreaterThan(approvalBasisColumn);
|
|
expect(source).toContain("'travel_meal'");
|
|
expect(source).toContain("'travel_local_transport_allowance'");
|
|
expect(source).not.toMatch(/DROP\s+(TABLE|COLUMN)/i);
|
|
expect(source).not.toMatch(/ALTER\s+COLUMN\s+[^;]+NOT\s+NULL/i);
|
|
});
|
|
});
|