93 lines
2.6 KiB
TypeScript
93 lines
2.6 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import {
|
|
DISPO_INTERNAL_PROJECT_BUCKETS,
|
|
DISPO_REQUIRED_ROLE_SEEDS,
|
|
createWeekdayAvailabilityFromFte,
|
|
normalizeDispoChapterToken,
|
|
normalizeDispoRoleToken,
|
|
normalizeDispoUtilizationToken,
|
|
resolveCanonicalResourceIdentity,
|
|
} from "../index.js";
|
|
|
|
describe("dispo import normalization", () => {
|
|
it("normalizes canonical identity and detects enterprise/eid conflicts", () => {
|
|
expect(resolveCanonicalResourceIdentity(" Alice.Example ", "alice.example")).toEqual({
|
|
canonicalId: "alice.example",
|
|
normalizedEnterpriseId: "alice.example",
|
|
normalizedEid: "alice.example",
|
|
conflict: false,
|
|
});
|
|
|
|
expect(resolveCanonicalResourceIdentity("alice.example", "bob.example")).toEqual({
|
|
canonicalId: null,
|
|
normalizedEnterpriseId: "alice.example",
|
|
normalizedEid: "bob.example",
|
|
conflict: true,
|
|
});
|
|
});
|
|
|
|
it("maps chapter, role, and utilization tokens to canonical values", () => {
|
|
expect(normalizeDispoChapterToken("3d")).toBe("Digital Content Production");
|
|
expect(normalizeDispoRoleToken(" pm ")).toBe("Project Manager");
|
|
expect(normalizeDispoUtilizationToken("md")).toBe("MD&I");
|
|
expect(normalizeDispoUtilizationToken("un")).toBeNull();
|
|
expect(normalizeDispoRoleToken("unknown")).toBeNull();
|
|
});
|
|
|
|
it("creates the default weekday fallback availability from fte", () => {
|
|
expect(createWeekdayAvailabilityFromFte(1)).toEqual({
|
|
monday: 8,
|
|
tuesday: 8,
|
|
wednesday: 8,
|
|
thursday: 8,
|
|
friday: 8,
|
|
});
|
|
|
|
expect(createWeekdayAvailabilityFromFte(0.5)).toEqual({
|
|
monday: 4,
|
|
tuesday: 4,
|
|
wednesday: 4,
|
|
thursday: 4,
|
|
friday: 4,
|
|
});
|
|
|
|
expect(createWeekdayAvailabilityFromFte(0.8)).toEqual({
|
|
monday: 6.4,
|
|
tuesday: 6.4,
|
|
wednesday: 6.4,
|
|
thursday: 6.4,
|
|
friday: 6.4,
|
|
});
|
|
});
|
|
|
|
it("keeps canonical bucket and role seed definitions stable", () => {
|
|
expect(DISPO_INTERNAL_PROJECT_BUCKETS).toEqual([
|
|
{
|
|
sourceToken: "MO",
|
|
shortCode: "INT-MO",
|
|
name: "Management & Operations",
|
|
utilizationCategoryCode: "M&O",
|
|
},
|
|
{
|
|
sourceToken: "MD",
|
|
shortCode: "INT-MD",
|
|
name: "Market Development & Initiatives",
|
|
utilizationCategoryCode: "MD&I",
|
|
},
|
|
{
|
|
sourceToken: "PD",
|
|
shortCode: "INT-PD",
|
|
name: "People Development & Recruitment",
|
|
utilizationCategoryCode: "PD&R",
|
|
},
|
|
]);
|
|
|
|
expect(DISPO_REQUIRED_ROLE_SEEDS.map((role) => role.name)).toEqual([
|
|
"2D Artist",
|
|
"3D Artist",
|
|
"Project Manager",
|
|
"Art Director",
|
|
]);
|
|
});
|
|
});
|