test(web): cover allocation visual state helpers
This commit is contained in:
@@ -0,0 +1,100 @@
|
|||||||
|
import { describe, expect, it } from "vitest";
|
||||||
|
import {
|
||||||
|
applyPointerOffsetPreviewRect,
|
||||||
|
applyVisualOverrides,
|
||||||
|
getDragPointerOffset,
|
||||||
|
} from "./allocationVisualState.js";
|
||||||
|
|
||||||
|
describe("allocationVisualState", () => {
|
||||||
|
it("keeps only the residual pointer offset after full-day snapping", () => {
|
||||||
|
expect(getDragPointerOffset(53, 2, 20)).toBe(13);
|
||||||
|
expect(getDragPointerOffset(-53, -2, 20)).toBe(-13);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("clamps resize-start preview rectangles to the configured minimum width", () => {
|
||||||
|
expect(
|
||||||
|
applyPointerOffsetPreviewRect({
|
||||||
|
left: 100,
|
||||||
|
width: 40,
|
||||||
|
mode: "resize-start",
|
||||||
|
pointerOffsetX: 35,
|
||||||
|
minWidth: 20,
|
||||||
|
}),
|
||||||
|
).toEqual({
|
||||||
|
left: 120,
|
||||||
|
width: 20,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it("keeps move previews stable when there is no residual pointer offset", () => {
|
||||||
|
expect(
|
||||||
|
applyPointerOffsetPreviewRect({
|
||||||
|
left: 100,
|
||||||
|
width: 40,
|
||||||
|
mode: "move",
|
||||||
|
pointerOffsetX: 0,
|
||||||
|
minWidth: 20,
|
||||||
|
}),
|
||||||
|
).toEqual({
|
||||||
|
left: 100,
|
||||||
|
width: 40,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it("returns the original entries array when no override matches", () => {
|
||||||
|
const entries = [
|
||||||
|
{
|
||||||
|
id: "alloc_1",
|
||||||
|
startDate: "2026-04-10",
|
||||||
|
endDate: "2026-04-12",
|
||||||
|
label: "original",
|
||||||
|
},
|
||||||
|
] as const;
|
||||||
|
|
||||||
|
const result = applyVisualOverrides(
|
||||||
|
entries,
|
||||||
|
new Map([
|
||||||
|
[
|
||||||
|
"alloc_other",
|
||||||
|
{
|
||||||
|
startDate: new Date("2026-04-20T00:00:00.000Z"),
|
||||||
|
endDate: new Date("2026-04-21T00:00:00.000Z"),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
]),
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(result).toBe(entries);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("clones override dates without mutating unaffected entries", () => {
|
||||||
|
const entries = [
|
||||||
|
{
|
||||||
|
id: "alloc_1",
|
||||||
|
startDate: "2026-04-10",
|
||||||
|
endDate: "2026-04-12",
|
||||||
|
label: "changed",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "alloc_2",
|
||||||
|
startDate: "2026-04-15",
|
||||||
|
endDate: "2026-04-16",
|
||||||
|
label: "unchanged",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
const override = {
|
||||||
|
startDate: new Date("2026-04-20T00:00:00.000Z"),
|
||||||
|
endDate: new Date("2026-04-22T00:00:00.000Z"),
|
||||||
|
};
|
||||||
|
|
||||||
|
const result = applyVisualOverrides(entries, new Map([["alloc_1", override]]));
|
||||||
|
|
||||||
|
expect(result).not.toBe(entries);
|
||||||
|
expect(result[0]).not.toBe(entries[0]);
|
||||||
|
expect(result[1]).toBe(entries[1]);
|
||||||
|
expect(result[0]?.startDate).toEqual(new Date("2026-04-20T00:00:00.000Z"));
|
||||||
|
expect(result[0]?.endDate).toEqual(new Date("2026-04-22T00:00:00.000Z"));
|
||||||
|
expect(result[0]?.startDate).not.toBe(override.startDate);
|
||||||
|
expect(result[0]?.endDate).not.toBe(override.endDate);
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user