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