154 lines
4.3 KiB
TypeScript
154 lines
4.3 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import {
|
|
buildTimelineEntriesDetailResponse,
|
|
buildTimelineEntriesViewResponse,
|
|
} from "../router/timeline-entry-response-support.js";
|
|
|
|
describe("timeline entry response support", () => {
|
|
const directory = {
|
|
config: { enabled: true, mode: "alias", domain: "example.test" },
|
|
byResourceId: new Map([
|
|
[
|
|
"resource_1",
|
|
{
|
|
displayName: "Anon Alice",
|
|
eid: "ANON-001",
|
|
email: "anon-alice@example.test",
|
|
},
|
|
],
|
|
]),
|
|
byAliasEid: new Map([["anon-001", "resource_1"]]),
|
|
};
|
|
|
|
it("builds anonymized entries view responses", () => {
|
|
const readModel = {
|
|
allocations: [
|
|
{
|
|
id: "allocation_1",
|
|
projectId: "project_1",
|
|
resourceId: "resource_1",
|
|
resource: { id: "resource_1", displayName: "Alice", eid: "E-001" },
|
|
},
|
|
],
|
|
demands: [{ id: "demand_1", projectId: "project_1" }],
|
|
assignments: [
|
|
{
|
|
id: "assignment_1",
|
|
projectId: "project_1",
|
|
resourceId: "resource_1",
|
|
resource: { id: "resource_1", displayName: "Alice", eid: "E-001" },
|
|
},
|
|
],
|
|
};
|
|
|
|
expect(buildTimelineEntriesViewResponse(readModel, directory as never)).toEqual({
|
|
allocations: [
|
|
{
|
|
id: "allocation_1",
|
|
projectId: "project_1",
|
|
resourceId: "resource_1",
|
|
resource: { id: "resource_1", displayName: "Anon Alice", eid: "ANON-001" },
|
|
},
|
|
],
|
|
demands: [{ id: "demand_1", projectId: "project_1" }],
|
|
assignments: [
|
|
{
|
|
id: "assignment_1",
|
|
projectId: "project_1",
|
|
resourceId: "resource_1",
|
|
resource: { id: "resource_1", displayName: "Anon Alice", eid: "ANON-001" },
|
|
},
|
|
],
|
|
});
|
|
});
|
|
|
|
it("builds detail responses with combined summary and anonymized entries", () => {
|
|
const readModel = {
|
|
allocations: [
|
|
{
|
|
id: "allocation_1",
|
|
projectId: "project_1",
|
|
resourceId: "resource_1",
|
|
resource: { id: "resource_1", displayName: "Alice", eid: "E-001" },
|
|
},
|
|
],
|
|
demands: [{ id: "demand_1", projectId: "project_1" }],
|
|
assignments: [
|
|
{
|
|
id: "assignment_1",
|
|
projectId: "project_1",
|
|
resourceId: "resource_1",
|
|
resource: { id: "resource_1", displayName: "Alice", eid: "E-001" },
|
|
},
|
|
],
|
|
};
|
|
const overlays = [{ id: "overlay_1", resourceId: "resource_1" }];
|
|
|
|
expect(
|
|
buildTimelineEntriesDetailResponse({
|
|
period: {
|
|
startDate: new Date("2026-04-01T00:00:00.000Z"),
|
|
endDate: new Date("2026-04-05T00:00:00.000Z"),
|
|
},
|
|
filters: {
|
|
resourceIds: ["resource_1"],
|
|
projectIds: undefined,
|
|
clientIds: undefined,
|
|
chapters: undefined,
|
|
eids: undefined,
|
|
countryCodes: undefined,
|
|
},
|
|
readModel,
|
|
directory: directory as never,
|
|
holidayOverlays: overlays,
|
|
holidaySummary: {
|
|
overlayCount: 1,
|
|
holidayResourceCount: 1,
|
|
byScope: [{ scope: "COUNTRY", count: 1 }],
|
|
},
|
|
}),
|
|
).toEqual({
|
|
period: {
|
|
startDate: "2026-04-01",
|
|
endDate: "2026-04-05",
|
|
},
|
|
filters: {
|
|
resourceIds: ["resource_1"],
|
|
projectIds: undefined,
|
|
clientIds: undefined,
|
|
chapters: undefined,
|
|
eids: undefined,
|
|
countryCodes: undefined,
|
|
},
|
|
summary: {
|
|
allocationCount: 1,
|
|
demandCount: 1,
|
|
assignmentCount: 1,
|
|
projectCount: 1,
|
|
resourceCount: 1,
|
|
overlayCount: 1,
|
|
holidayResourceCount: 1,
|
|
byScope: [{ scope: "COUNTRY", count: 1 }],
|
|
},
|
|
allocations: [
|
|
{
|
|
id: "allocation_1",
|
|
projectId: "project_1",
|
|
resourceId: "resource_1",
|
|
resource: { id: "resource_1", displayName: "Anon Alice", eid: "ANON-001" },
|
|
},
|
|
],
|
|
demands: [{ id: "demand_1", projectId: "project_1" }],
|
|
assignments: [
|
|
{
|
|
id: "assignment_1",
|
|
projectId: "project_1",
|
|
resourceId: "resource_1",
|
|
resource: { id: "resource_1", displayName: "Anon Alice", eid: "ANON-001" },
|
|
},
|
|
],
|
|
holidayOverlays: overlays,
|
|
});
|
|
});
|
|
});
|