import { AllocationStatus } from "@capakraken/shared"; import { describe, expect, it } from "vitest"; import { buildTimelineShiftPlan } from "../router/timeline-shift-planning.js"; describe("buildTimelineShiftPlan", () => { it("builds validation assignments from explicit assignments", () => { const result = buildTimelineShiftPlan({ demandRequirements: [ { id: "demand_1", projectId: "project_1", startDate: new Date("2026-03-16"), endDate: new Date("2026-03-20"), hoursPerDay: 8, percentage: 100, role: "FX", roleId: "role_fx", headcount: 2, status: AllocationStatus.PROPOSED, metadata: {}, createdAt: new Date("2026-03-13"), updatedAt: new Date("2026-03-13"), }, ], assignments: [ { id: "assignment_1", resourceId: "resource_1", projectId: "project_1", startDate: new Date("2026-03-16"), endDate: new Date("2026-03-20"), hoursPerDay: 6, percentage: 75, role: "Comp", roleId: "role_comp", dailyCostCents: 30000, status: AllocationStatus.ACTIVE, metadata: { includeSaturday: true }, createdAt: new Date("2026-03-13"), updatedAt: new Date("2026-03-13"), resource: { id: "resource_1", displayName: "Alice", eid: "E-001", lcrCents: 5000, availability: { monday: 8 }, }, }, ], allAssignmentWindows: [ { id: "assignment_1", resourceId: "resource_1", projectId: "project_1", startDate: new Date("2026-03-16"), endDate: new Date("2026-03-20"), hoursPerDay: 6, status: AllocationStatus.ACTIVE, }, ], }); expect(result.validationAllocations).toHaveLength(1); expect(result.validationAllocations.map((entry) => entry.sourceAllocationId)).toEqual([ "assignment_1", ]); expect(result.validationAllocations[0]?.includeSaturday).toBe(true); expect(result.validationAllocations[0]?.allAllocationsForResource).toEqual([ { id: "assignment_1", resourceId: "resource_1", projectId: "project_1", startDate: new Date("2026-03-16"), endDate: new Date("2026-03-20"), hoursPerDay: 6, status: AllocationStatus.ACTIVE, }, ]); }); });