const { DEFAULT_APPROVAL_RULES, seedApprovalRules, } = require("../../../src/scripts/seed-config"); describe("small-team default reimbursement approval rules", () => { it("uses finance for every owner fallback and finance review node", () => { expect(DEFAULT_APPROVAL_RULES).toEqual([ expect.objectContaining({ name: "小额", level1_role: "manager", level2_role: "finance", level3_role: null, owner_self_fallback_role: "finance", }), expect.objectContaining({ name: "中额", level1_role: "manager", level2_role: "finance", level3_role: null, owner_self_fallback_role: "finance", }), expect.objectContaining({ name: "大额", level1_role: "manager", level2_role: "ceo", level3_role: "finance", owner_self_fallback_role: "finance", }), ]); }); it("preserves existing production approval rules instead of replacing them", async () => { const approvalRule = { count: vi.fn().mockResolvedValue(3), createMany: vi.fn(), deleteMany: vi.fn(), }; await expect(seedApprovalRules({ approvalRule })).resolves.toEqual({ created: 0, preserved: 3, }); expect(approvalRule.createMany).not.toHaveBeenCalled(); expect(approvalRule.deleteMany).not.toHaveBeenCalled(); }); it("creates the three defaults only for an empty approval-rule table", async () => { const approvalRule = { count: vi.fn().mockResolvedValue(0), createMany: vi.fn().mockResolvedValue({ count: 3 }), }; await expect(seedApprovalRules({ approvalRule })).resolves.toEqual({ created: 3, preserved: 0, }); expect(approvalRule.createMany).toHaveBeenCalledWith({ data: DEFAULT_APPROVAL_RULES.map((item) => ({ ...item, enabled: true, created_by: null, updated_by: null, })), }); }); });