89 lines
2.6 KiB
TypeScript
89 lines
2.6 KiB
TypeScript
import { VacationType } from "@capakraken/db";
|
|
import { describe, expect, it } from "vitest";
|
|
import {
|
|
buildTimelineAbsenceDays,
|
|
loadTimelineCalculationRules,
|
|
} from "../router/timeline-cost-load-support.js";
|
|
|
|
describe("timeline cost load support", () => {
|
|
it("falls back to default calculation rules when the optional model is unavailable", async () => {
|
|
const rules = await loadTimelineCalculationRules({
|
|
vacation: {
|
|
findMany: async () => [],
|
|
},
|
|
} as never);
|
|
|
|
expect(rules.length).toBeGreaterThan(0);
|
|
});
|
|
|
|
it("expands approved vacations, sickness, and public holidays into absence days", async () => {
|
|
const result = await buildTimelineAbsenceDays({
|
|
vacation: {
|
|
findMany: async () => [
|
|
{
|
|
startDate: new Date("2026-04-03T00:00:00.000Z"),
|
|
endDate: new Date("2026-04-04T00:00:00.000Z"),
|
|
type: VacationType.VACATION,
|
|
isHalfDay: false,
|
|
},
|
|
{
|
|
startDate: new Date("2026-04-05T00:00:00.000Z"),
|
|
endDate: new Date("2026-04-05T00:00:00.000Z"),
|
|
type: VacationType.SICK,
|
|
isHalfDay: true,
|
|
},
|
|
{
|
|
startDate: new Date("2026-04-06T00:00:00.000Z"),
|
|
endDate: new Date("2026-04-06T00:00:00.000Z"),
|
|
type: VacationType.PUBLIC_HOLIDAY,
|
|
isHalfDay: false,
|
|
},
|
|
],
|
|
},
|
|
} as never, "resource_1", new Date("2026-04-01T00:00:00.000Z"), new Date("2026-04-10T00:00:00.000Z"));
|
|
|
|
expect(result.absenceDays).toEqual([
|
|
{
|
|
date: new Date("2026-04-03T00:00:00.000Z"),
|
|
type: "VACATION",
|
|
},
|
|
{
|
|
date: new Date("2026-04-04T00:00:00.000Z"),
|
|
type: "VACATION",
|
|
},
|
|
{
|
|
date: new Date("2026-04-05T00:00:00.000Z"),
|
|
type: "SICK",
|
|
isHalfDay: true,
|
|
},
|
|
{
|
|
date: new Date("2026-04-06T00:00:00.000Z"),
|
|
type: "PUBLIC_HOLIDAY",
|
|
},
|
|
]);
|
|
expect(result.legacyVacationDates).toEqual([
|
|
new Date("2026-04-03T00:00:00.000Z"),
|
|
new Date("2026-04-04T00:00:00.000Z"),
|
|
]);
|
|
});
|
|
|
|
it("treats missing optional vacation tables as no absences", async () => {
|
|
const result = await buildTimelineAbsenceDays({
|
|
vacation: {
|
|
findMany: async () => {
|
|
throw {
|
|
code: "P2021",
|
|
message: "The table `vacations` does not exist.",
|
|
meta: { table: "vacations" },
|
|
};
|
|
},
|
|
},
|
|
} as never, "resource_1", new Date("2026-04-01T00:00:00.000Z"), new Date("2026-04-10T00:00:00.000Z"));
|
|
|
|
expect(result).toEqual({
|
|
absenceDays: [],
|
|
legacyVacationDates: [],
|
|
});
|
|
});
|
|
});
|