59 lines
1.9 KiB
TypeScript
59 lines
1.9 KiB
TypeScript
import { AllocationStatus } from "@planarchy/shared";
|
|
import { describe, expect, it, vi } from "vitest";
|
|
import { countPlanningEntries } from "../index.js";
|
|
|
|
describe("countPlanningEntries", () => {
|
|
it("counts demand and assignment planning entries", async () => {
|
|
const result = await countPlanningEntries(
|
|
{
|
|
demandRequirement: {
|
|
findMany: vi.fn().mockResolvedValue([
|
|
{
|
|
id: "demand_1",
|
|
projectId: "project_1",
|
|
startDate: new Date("2026-03-17"),
|
|
endDate: new Date("2026-03-18"),
|
|
hoursPerDay: 8,
|
|
percentage: 100,
|
|
role: "FX",
|
|
roleId: "role_fx",
|
|
headcount: 2,
|
|
status: AllocationStatus.PROPOSED,
|
|
metadata: {},
|
|
createdAt: new Date("2026-03-13"),
|
|
updatedAt: new Date("2026-03-13"),
|
|
},
|
|
]),
|
|
},
|
|
assignment: {
|
|
findMany: vi.fn().mockResolvedValue([
|
|
{
|
|
id: "assignment_1",
|
|
demandRequirementId: null,
|
|
resourceId: "resource_1",
|
|
projectId: "project_1",
|
|
startDate: new Date("2026-03-17"),
|
|
endDate: new Date("2026-03-18"),
|
|
hoursPerDay: 8,
|
|
percentage: 100,
|
|
role: "Lead",
|
|
roleId: "role_lead",
|
|
dailyCostCents: 32000,
|
|
status: AllocationStatus.ACTIVE,
|
|
metadata: {},
|
|
createdAt: new Date("2026-03-13"),
|
|
updatedAt: new Date("2026-03-13"),
|
|
},
|
|
]),
|
|
},
|
|
} as never,
|
|
{ projectIds: ["project_1"] },
|
|
);
|
|
|
|
expect(result.totalCount).toBe(2);
|
|
expect(result.countsByProjectId.get("project_1")).toBe(2);
|
|
expect(result.countsByRoleId.get("role_fx")).toBe(1);
|
|
expect(result.countsByRoleId.get("role_lead")).toBe(1);
|
|
});
|
|
});
|