chore(repo): initialize planarchy workspace

This commit is contained in:
2026-03-14 14:31:09 +01:00
commit dd55d0e78b
769 changed files with 166461 additions and 0 deletions
@@ -0,0 +1,93 @@
import { AllocationStatus } from "@planarchy/shared";
import { describe, expect, it, vi } from "vitest";
import { loadProjectPlanningReadModel } from "../router/project-planning-read-model.js";
describe("loadProjectPlanningReadModel", () => {
it("applies active-only filters to demand and assignment loaders", async () => {
const demandFindMany = vi.fn().mockResolvedValue([]);
const assignmentFindMany = vi.fn().mockResolvedValue([]);
await loadProjectPlanningReadModel(
{
demandRequirement: { findMany: demandFindMany },
assignment: { findMany: assignmentFindMany },
} as never,
{ projectId: "project_1", activeOnly: true },
);
expect(demandFindMany).toHaveBeenCalledWith(
expect.objectContaining({
where: { projectId: "project_1", status: { not: AllocationStatus.CANCELLED } },
}),
);
expect(assignmentFindMany).toHaveBeenCalledWith(
expect.objectContaining({
where: { projectId: "project_1", status: { not: AllocationStatus.CANCELLED } },
}),
);
});
it("builds a split read model from demand and assignment rows", async () => {
const result = await loadProjectPlanningReadModel(
{
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",
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"),
resource: {
id: "resource_1",
displayName: "Alice",
eid: "E-001",
chapter: "CGI",
lcrCents: 5000,
availability: { monday: 8 },
},
},
]),
},
} as never,
{ projectId: "project_1" },
);
expect(result.readModel.demands.map((entry) => entry.sourceAllocationId)).toEqual(["demand_1"]);
expect(result.readModel.assignments.map((entry) => entry.sourceAllocationId)).toEqual([
"assignment_1",
]);
expect(result.readModel.allocations.map((entry) => entry.id)).toEqual([
"demand_1",
"assignment_1",
]);
});
});