shoc-frontend-new/src/test/domain/work-orders/utils/carry-over-display.test.ts

94 lines
3.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { describe, expect, it } from "vitest";
import {
applyCarryOverDisplayDayFields,
formatCarriedOverHover,
isCarryOverDisplayRow,
mapCarryOverDisplayDay,
resolveCarryOverSourceWeek,
shouldShowCarriedOverPill,
} from "@/domain/work-orders/utils/carry-over-display";
describe("carry-over-display", () => {
it("hides the pill below 2 and on terminal statuses", () => {
expect(shouldShowCarriedOverPill(1, "Scheduled")).toBe(false);
expect(shouldShowCarriedOverPill(2, "Scheduled")).toBe(true);
expect(shouldShowCarriedOverPill(3, "Completed")).toBe(false);
expect(shouldShowCarriedOverPill(3, "Canceled")).toBe(false);
});
it("formats hover without a source week", () => {
expect(formatCarriedOverHover(2)).toBe(
"Carried over 2 times — this WO was not completed and moved to the next period",
);
});
it("appends the source week label from originalWeek", () => {
expect(formatCarriedOverHover(3, "2026-05-04")).toBe(
"Carried over 3 times — this WO was not completed and moved to the next period. Source week: 5/4–5/8.",
);
});
it("resolves source week from originalWeek, then originalDate, then scheduledOn", () => {
expect(resolveCarryOverSourceWeek({ originalWeek: "2026-05-04" })).toBe("2026-05-04");
expect(resolveCarryOverSourceWeek({ originalDate: "2026-05-06" })).toBe("2026-05-04");
expect(resolveCarryOverSourceWeek({ scheduledOn: "2026-05-13" })).toBe("2026-05-11");
expect(resolveCarryOverSourceWeek({})).toBe("");
});
it("treats non-terminal rows scheduled before the viewed week as carry-over", () => {
expect(
isCarryOverDisplayRow(
{ scheduledOn: "2026-05-13", status: "Scheduled", carriedOver: 1 },
"2026-05-18",
),
).toBe(true);
expect(
isCarryOverDisplayRow(
{ scheduledOn: "2026-05-20", status: "Scheduled", carriedOver: 2 },
"2026-05-18",
),
).toBe(false);
expect(
isCarryOverDisplayRow(
{ scheduledOn: "2026-05-13", status: "Completed", carriedOver: 2 },
"2026-05-18",
),
).toBe(false);
});
it("maps the original weekday onto the viewed week and weekends onto Monday", () => {
expect(mapCarryOverDisplayDay("2026-05-13", "2026-05-18")).toBe("2026-05-20");
expect(mapCarryOverDisplayDay("2026-05-16", "2026-05-18")).toBe("2026-05-18");
expect(mapCarryOverDisplayDay("2026-05-17", "2026-05-18")).toBe("2026-05-18");
});
it("remaps dayGroup to the viewed weekday without changing scheduledOn", () => {
const row = {
scheduledOn: "2026-05-13",
status: "Scheduled",
dayGroup: "05/13",
dayLabel: "WED · 05/13",
};
const next = applyCarryOverDisplayDayFields(row, "2026-05-18");
expect(next.scheduledOn).toBe("2026-05-13");
expect(next.dayGroup).toBe("05/20");
expect(next.dayLabel).toBe("WED · 05/20");
});
it("leaves in-week and terminal rows' dayGroup unchanged", () => {
const inWeek = {
scheduledOn: "2026-05-20",
status: "Scheduled",
dayGroup: "05/20",
dayLabel: "WED · 05/20",
};
const completed = {
scheduledOn: "2026-05-13",
status: "Completed",
dayGroup: "05/13",
dayLabel: "WED · 05/13",
};
expect(applyCarryOverDisplayDayFields(inWeek, "2026-05-18")).toEqual(inWeek);
expect(applyCarryOverDisplayDayFields(completed, "2026-05-18")).toEqual(completed);
});
});