Files
CapaKraken/packages/api/src/__tests__/org-unit-support.test.ts
T

122 lines
3.1 KiB
TypeScript

import { TRPCError } from "@trpc/server";
import { describe, expect, it, vi } from "vitest";
import {
assertOrgUnitParentLevel,
buildOrgUnitCreateData,
buildOrgUnitListWhere,
buildOrgUnitTree,
buildOrgUnitUpdateData,
findOrgUnitByIdentifier,
} from "../router/org-unit-support.js";
describe("org-unit support", () => {
it("builds list filters", () => {
expect(buildOrgUnitListWhere({
level: 5,
parentId: "root",
isActive: true,
})).toEqual({
level: 5,
parentId: "root",
isActive: true,
});
});
it("builds a sorted org-unit tree", () => {
expect(buildOrgUnitTree([
{
id: "child_b",
name: "Beta",
shortName: "BET",
level: 6,
parentId: "root",
sortOrder: 20,
isActive: true,
createdAt: new Date("2026-03-01T00:00:00.000Z"),
updatedAt: new Date("2026-03-01T00:00:00.000Z"),
},
{
id: "root",
name: "Delivery",
shortName: "DEL",
level: 5,
parentId: null,
sortOrder: 10,
isActive: true,
createdAt: new Date("2026-03-01T00:00:00.000Z"),
updatedAt: new Date("2026-03-01T00:00:00.000Z"),
},
{
id: "child_a",
name: "Alpha",
shortName: "ALP",
level: 6,
parentId: "root",
sortOrder: 20,
isActive: true,
createdAt: new Date("2026-03-01T00:00:00.000Z"),
updatedAt: new Date("2026-03-01T00:00:00.000Z"),
},
])).toEqual([
expect.objectContaining({
id: "root",
children: [
expect.objectContaining({ id: "child_a", children: [] }),
expect.objectContaining({ id: "child_b", children: [] }),
],
}),
]);
});
it("resolves org units by short name fallback", async () => {
const db = {
orgUnit: {
findUnique: vi.fn().mockResolvedValue(null),
findFirst: vi.fn()
.mockResolvedValueOnce(null)
.mockResolvedValueOnce({ id: "ou_1", shortName: "DEL" }),
},
} as never;
const result = await findOrgUnitByIdentifier<{ id: string; shortName: string }>(
db,
" del ",
{ select: { id: true, shortName: true } },
);
expect(result).toEqual({ id: "ou_1", shortName: "DEL" });
expect(db.orgUnit.findFirst).toHaveBeenNthCalledWith(2, {
where: { shortName: { equals: "del", mode: "insensitive" } },
select: { id: true, shortName: true },
});
});
it("rejects invalid parent/child level combinations", () => {
expect(() => assertOrgUnitParentLevel({ level: 6 }, 6)).toThrow(TRPCError);
});
it("builds create and sparse update payloads", () => {
expect(buildOrgUnitCreateData({
name: "Delivery",
shortName: "DEL",
level: 5,
parentId: "root",
sortOrder: 10,
})).toEqual({
name: "Delivery",
shortName: "DEL",
level: 5,
parentId: "root",
sortOrder: 10,
});
expect(buildOrgUnitUpdateData({
shortName: null,
isActive: false,
})).toEqual({
shortName: null,
isActive: false,
});
});
});