完善差旅补助规定与费用类型(07-28-travel-reimbursement-guide)
这个提交包含在:
@@ -1,8 +1,51 @@
|
||||
const {
|
||||
DEFAULT_APPROVAL_RULES,
|
||||
ENABLED_EXPENSE_TYPES,
|
||||
seedApprovalRules,
|
||||
seedExpenseTypes,
|
||||
} = require("../../../src/scripts/seed-config");
|
||||
|
||||
describe("default travel expense types", () => {
|
||||
it("keeps intercity bus tickets separate from the two travel allowances", () => {
|
||||
expect(ENABLED_EXPENSE_TYPES).toEqual(
|
||||
expect.arrayContaining([
|
||||
expect.objectContaining({ code: "travel_bus", name: "大巴车票", category: "travel" }),
|
||||
expect.objectContaining({ code: "travel_meal", name: "伙食补助费", category: "travel" }),
|
||||
expect.objectContaining({
|
||||
code: "travel_local_transport_allowance",
|
||||
name: "市内交通补助费",
|
||||
category: "travel",
|
||||
}),
|
||||
]),
|
||||
);
|
||||
|
||||
const travelCodes = ENABLED_EXPENSE_TYPES.filter((item) =>
|
||||
["travel_bus", "travel_meal", "travel_local_transport_allowance"].includes(item.code),
|
||||
);
|
||||
expect(travelCodes).toHaveLength(3);
|
||||
});
|
||||
|
||||
it("upserts the distinct travel types by stable code", async () => {
|
||||
const upsert = vi.fn().mockResolvedValue({});
|
||||
|
||||
await seedExpenseTypes({ expenseType: { upsert } });
|
||||
|
||||
for (const [code, name] of [
|
||||
["travel_bus", "大巴车票"],
|
||||
["travel_meal", "伙食补助费"],
|
||||
["travel_local_transport_allowance", "市内交通补助费"],
|
||||
]) {
|
||||
expect(upsert).toHaveBeenCalledWith(
|
||||
expect.objectContaining({
|
||||
where: { code },
|
||||
update: expect.objectContaining({ name, enabled: true }),
|
||||
create: expect.objectContaining({ code, name, enabled: true }),
|
||||
}),
|
||||
);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
describe("small-team default reimbursement approval rules", () => {
|
||||
it("uses finance for every owner fallback and finance review node", () => {
|
||||
expect(DEFAULT_APPROVAL_RULES).toEqual([
|
||||
|
||||
在新工单中引用
屏蔽一个用户