refactor(api): extract timeline entry query support
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import {
|
||||
loadTimelineEntryRecords,
|
||||
resolveTimelineEntryProjectIds,
|
||||
resolveTimelineEntryResourceIds,
|
||||
} from "../router/timeline-entry-query-support.js";
|
||||
|
||||
describe("timeline entry query support", () => {
|
||||
it("resolves resource ids from direct filters before chapter and geography filters", async () => {
|
||||
const db = {
|
||||
resource: {
|
||||
findMany: vi.fn(),
|
||||
},
|
||||
};
|
||||
|
||||
await expect(
|
||||
resolveTimelineEntryResourceIds(db as never, {
|
||||
resourceIds: ["resource_1"],
|
||||
chapters: ["Comp"],
|
||||
eids: ["E-001"],
|
||||
countryCodes: ["DE"],
|
||||
}),
|
||||
).resolves.toEqual(["resource_1"]);
|
||||
expect(db.resource.findMany).not.toHaveBeenCalled();
|
||||
|
||||
db.resource.findMany.mockResolvedValueOnce([{ id: "resource_2" }, { id: "resource_3" }]);
|
||||
|
||||
await expect(
|
||||
resolveTimelineEntryResourceIds(db as never, {
|
||||
chapters: ["Comp"],
|
||||
eids: ["E-001"],
|
||||
countryCodes: ["DE"],
|
||||
}),
|
||||
).resolves.toEqual(["resource_2", "resource_3"]);
|
||||
expect(db.resource.findMany).toHaveBeenCalledWith({
|
||||
where: {
|
||||
AND: [
|
||||
{ chapter: { in: ["Comp"] } },
|
||||
{ eid: { in: ["E-001"] } },
|
||||
{ country: { code: { in: ["DE"] } } },
|
||||
],
|
||||
},
|
||||
select: { id: true },
|
||||
});
|
||||
});
|
||||
|
||||
it("resolves project ids from client filters and intersects explicit project filters", async () => {
|
||||
const db = {
|
||||
project: {
|
||||
findMany: vi.fn().mockResolvedValue([{ id: "project_1" }, { id: "project_2" }]),
|
||||
},
|
||||
};
|
||||
|
||||
await expect(
|
||||
resolveTimelineEntryProjectIds(db as never, {
|
||||
clientIds: ["client_1"],
|
||||
}),
|
||||
).resolves.toEqual(["project_1", "project_2"]);
|
||||
|
||||
await expect(
|
||||
resolveTimelineEntryProjectIds(db as never, {
|
||||
clientIds: ["client_1"],
|
||||
projectIds: ["project_2", "project_3"],
|
||||
}),
|
||||
).resolves.toEqual(["project_2"]);
|
||||
});
|
||||
|
||||
it("loads assignments and skips demands when resource filters are active", async () => {
|
||||
const db = {
|
||||
resource: {
|
||||
findMany: vi.fn().mockResolvedValue([{ id: "resource_1" }]),
|
||||
},
|
||||
project: {
|
||||
findMany: vi.fn().mockResolvedValue([{ id: "project_1" }]),
|
||||
},
|
||||
demandRequirement: {
|
||||
findMany: vi.fn(),
|
||||
},
|
||||
assignment: {
|
||||
findMany: vi.fn().mockResolvedValue([{ id: "assignment_1" }]),
|
||||
},
|
||||
};
|
||||
|
||||
await expect(
|
||||
loadTimelineEntryRecords(db as never, {
|
||||
startDate: new Date("2026-04-01T00:00:00.000Z"),
|
||||
endDate: new Date("2026-04-10T00:00:00.000Z"),
|
||||
chapters: ["Comp"],
|
||||
clientIds: ["client_1"],
|
||||
}),
|
||||
).resolves.toEqual({
|
||||
demandRequirements: [],
|
||||
assignments: [{ id: "assignment_1" }],
|
||||
});
|
||||
|
||||
expect(db.demandRequirement.findMany).not.toHaveBeenCalled();
|
||||
expect(db.assignment.findMany).toHaveBeenCalledWith(
|
||||
expect.objectContaining({
|
||||
where: expect.objectContaining({
|
||||
resourceId: { in: ["resource_1"] },
|
||||
projectId: { in: ["project_1"] },
|
||||
}),
|
||||
}),
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user