feat(platform): checkpoint current implementation state

This commit is contained in:
2026-04-01 07:42:03 +02:00
parent 3e53471f05
commit 8c5be51251
125 changed files with 10269 additions and 17808 deletions
@@ -0,0 +1,77 @@
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");
});
});