feat(platform): harden access scoping and delivery baseline
This commit is contained in:
@@ -368,6 +368,54 @@ describe("entitlement.getBalance", () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe("entitlement.getBalanceDetail", () => {
|
||||
it("returns assistant-friendly balance detail from the canonical balance workflow", async () => {
|
||||
const entitlement = sampleEntitlement({ carryoverDays: 0, usedDays: 1, pendingDays: 0.5 });
|
||||
const db = {
|
||||
systemSettings: {
|
||||
findUnique: vi.fn().mockResolvedValue({ id: "singleton", vacationDefaultDays: 28 }),
|
||||
},
|
||||
resource: {
|
||||
findUnique: vi.fn().mockImplementation(async ({ select }: { select?: Record<string, unknown> } = {}) => ({
|
||||
...(select?.userId ? { userId: "user_1" } : {}),
|
||||
...(select?.federalState ? { federalState: "BY" } : {}),
|
||||
...(select?.country ? { country: { code: "DE" } } : {}),
|
||||
...(select?.metroCity ? { metroCity: null } : {}),
|
||||
...(select?.displayName ? { displayName: "Alice Example" } : {}),
|
||||
...(select?.eid ? { eid: "EMP-001" } : {}),
|
||||
})),
|
||||
},
|
||||
vacationEntitlement: {
|
||||
findUnique: mockEntitlementFindUniqueByYear({ 2026: entitlement }),
|
||||
update: vi.fn().mockResolvedValue(entitlement),
|
||||
},
|
||||
vacation: {
|
||||
findMany: vi.fn().mockImplementation(async ({ where }: { where?: { type?: string } } = {}) => {
|
||||
if (where?.type === "SICK") {
|
||||
return [{ startDate: new Date("2026-02-01"), endDate: new Date("2026-02-01"), isHalfDay: false }];
|
||||
}
|
||||
return [];
|
||||
}),
|
||||
},
|
||||
};
|
||||
|
||||
const caller = createProtectedCaller(db);
|
||||
const result = await caller.getBalanceDetail({ resourceId: "res_1", year: 2026 });
|
||||
|
||||
expect(result).toEqual({
|
||||
resource: "Alice Example",
|
||||
eid: "EMP-001",
|
||||
year: 2026,
|
||||
entitlement: 30,
|
||||
carryOver: 0,
|
||||
taken: 1,
|
||||
pending: 0.5,
|
||||
remaining: 28.5,
|
||||
sickDays: 1,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// ─── get ─────────────────────────────────────────────────────────────────────
|
||||
|
||||
describe("entitlement.get", () => {
|
||||
@@ -624,3 +672,67 @@ describe("entitlement.getYearSummary", () => {
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe("entitlement.getYearSummaryDetail", () => {
|
||||
it("returns assistant-friendly year summary detail from the canonical summary workflow", async () => {
|
||||
const resources = [
|
||||
{ id: "res_1", displayName: "Alice Example", eid: "EMP-001", chapter: "Delivery" },
|
||||
{ id: "res_2", displayName: "Bob Example", eid: "EMP-002", chapter: "CGI" },
|
||||
];
|
||||
const db = {
|
||||
systemSettings: {
|
||||
findUnique: vi.fn().mockResolvedValue({ id: "singleton", vacationDefaultDays: 28 }),
|
||||
},
|
||||
resource: {
|
||||
findMany: vi.fn().mockResolvedValue(resources),
|
||||
findUnique: vi.fn().mockResolvedValue({
|
||||
federalState: "BY",
|
||||
country: { code: "DE" },
|
||||
metroCity: null,
|
||||
}),
|
||||
},
|
||||
vacationEntitlement: {
|
||||
findUnique: vi.fn().mockImplementation(async ({ where }: { where: { resourceId_year: { resourceId: string; year: number } } }) => {
|
||||
if (where.resourceId_year.year !== 2026) {
|
||||
return null;
|
||||
}
|
||||
return sampleEntitlement({
|
||||
id: `ent_${where.resourceId_year.resourceId}`,
|
||||
resourceId: where.resourceId_year.resourceId,
|
||||
year: 2026,
|
||||
entitledDays: 28,
|
||||
carryoverDays: 0,
|
||||
usedDays: 0,
|
||||
pendingDays: 0,
|
||||
});
|
||||
}),
|
||||
create: vi.fn(),
|
||||
update: vi.fn().mockImplementation(async (args?: { data?: Record<string, unknown>; where?: { id?: string } }) => ({
|
||||
...sampleEntitlement({ entitledDays: 28, carryoverDays: 0, usedDays: 0, pendingDays: 0 }),
|
||||
id: args?.where?.id ?? "ent_updated",
|
||||
...(args?.data ?? {}),
|
||||
})),
|
||||
},
|
||||
vacation: {
|
||||
findMany: vi.fn().mockResolvedValue([]),
|
||||
},
|
||||
};
|
||||
|
||||
const caller = createManagerCaller(db);
|
||||
const result = await caller.getYearSummaryDetail({ year: 2026, resourceName: "alice" });
|
||||
|
||||
expect(result).toEqual([
|
||||
{
|
||||
resource: "Alice Example",
|
||||
eid: "EMP-001",
|
||||
chapter: "Delivery",
|
||||
year: 2026,
|
||||
entitled: 28,
|
||||
carryover: 0,
|
||||
used: 0,
|
||||
pending: 0,
|
||||
remaining: 28,
|
||||
},
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user