Files
CapaKraken/apps/web/src/components/timeline/timelineAvailability.test.ts
T

78 lines
2.3 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
buildAllocationWorkingDaySegments,
isAllocationScheduledOnDate,
toLocalDateKey,
} from "./timelineAvailability.js";
import type { TimelineAssignmentEntry } from "./TimelineContext.js";
function createAllocation(overrides?: Partial<TimelineAssignmentEntry>): TimelineAssignmentEntry {
return {
id: "alloc-1",
resourceId: "resource-1",
projectId: "project-1",
startDate: new Date(2026, 2, 30),
endDate: new Date(2026, 3, 6),
hoursPerDay: 8,
metadata: null,
project: {
id: "project-1",
name: "Gelddruckmaschine",
shortCode: "GDM",
status: "ACTIVE",
startDate: new Date(2026, 2, 30),
endDate: new Date(2026, 3, 6),
orderType: "CHARGEABLE",
},
resource: {
id: "resource-1",
displayName: "Peter Parker",
eid: "E-001",
chapter: "Delivery",
lcrCents: 10000,
availability: {
sunday: 0,
monday: 8,
tuesday: 8,
wednesday: 8,
thursday: 8,
friday: 8,
saturday: 6,
},
},
...overrides,
} as TimelineAssignmentEntry;
}
describe("timelineAvailability", () => {
it("does not treat Saturday as scheduled unless includeSaturday is enabled", () => {
const allocation = createAllocation();
expect(isAllocationScheduledOnDate(allocation, new Date(2026, 3, 4))).toBe(false);
expect(isAllocationScheduledOnDate(allocation, new Date(2026, 3, 6))).toBe(true);
});
it("supports Saturday working allocations when includeSaturday is enabled", () => {
const allocation = createAllocation({
metadata: { includeSaturday: true },
});
expect(isAllocationScheduledOnDate(allocation, new Date(2026, 3, 4))).toBe(true);
});
it("splits working spans at non-working weekend days", () => {
const allocation = createAllocation();
const segments = buildAllocationWorkingDaySegments(allocation);
expect(segments).toEqual([
{ start: new Date(2026, 2, 30), end: new Date(2026, 3, 3) },
{ start: new Date(2026, 3, 6), end: new Date(2026, 3, 6) },
]);
});
it("formats local calendar days without shifting them through UTC serialization", () => {
expect(toLocalDateKey(new Date(2026, 3, 6))).toBe("2026-04-06");
expect(toLocalDateKey(new Date(2026, 3, 10))).toBe("2026-04-10");
});
});