86 lines
3.3 KiB
TypeScript
86 lines
3.3 KiB
TypeScript
import { describe, expect, it, vi } from "vitest";
|
|
import { cleanupTimelineDragState } from "./timelineDragCleanup.js";
|
|
|
|
describe("timelineDragCleanup", () => {
|
|
it("runs registered cleanup callbacks, clears previews, and resets refs", () => {
|
|
const projectCleanup = vi.fn();
|
|
const allocCleanup = vi.fn();
|
|
const multiCleanup = vi.fn();
|
|
const projectPreview = { id: "project-preview" };
|
|
const allocPreview = { id: "alloc-preview" };
|
|
const clearPreview = vi.fn();
|
|
|
|
const projectDragCleanupRef = { current: projectCleanup };
|
|
const allocDragCleanupRef = { current: allocCleanup };
|
|
const multiSelectCleanupRef = { current: multiCleanup };
|
|
const projectPreviewRef = { current: projectPreview };
|
|
const allocPreviewRef = { current: allocPreview };
|
|
const dragStateRef = { current: { drag: true } };
|
|
const allocDragRef = { current: { alloc: true } };
|
|
const rangeStateRef = { current: { range: true } };
|
|
const multiSelectRef = { current: { multi: true } };
|
|
|
|
const initialDragState = { drag: false };
|
|
const initialAllocDragState = { alloc: false };
|
|
const initialRangeState = { range: false };
|
|
const initialMultiSelectState = { multi: false };
|
|
|
|
cleanupTimelineDragState({
|
|
projectDragCleanupRef,
|
|
allocDragCleanupRef,
|
|
multiSelectCleanupRef,
|
|
projectPreviewRef,
|
|
allocPreviewRef,
|
|
dragStateRef,
|
|
allocDragRef,
|
|
rangeStateRef,
|
|
multiSelectRef,
|
|
initialDragState,
|
|
initialAllocDragState,
|
|
initialRangeState,
|
|
initialMultiSelectState,
|
|
clearPreview,
|
|
});
|
|
|
|
expect(projectCleanup).toHaveBeenCalledOnce();
|
|
expect(allocCleanup).toHaveBeenCalledOnce();
|
|
expect(multiCleanup).toHaveBeenCalledOnce();
|
|
expect(clearPreview).toHaveBeenNthCalledWith(1, projectPreview);
|
|
expect(clearPreview).toHaveBeenNthCalledWith(2, allocPreview);
|
|
expect(projectDragCleanupRef.current).toBeNull();
|
|
expect(allocDragCleanupRef.current).toBeNull();
|
|
expect(multiSelectCleanupRef.current).toBeNull();
|
|
expect(projectPreviewRef.current).toBeNull();
|
|
expect(allocPreviewRef.current).toBeNull();
|
|
expect(dragStateRef.current).toBe(initialDragState);
|
|
expect(allocDragRef.current).toBe(initialAllocDragState);
|
|
expect(rangeStateRef.current).toBe(initialRangeState);
|
|
expect(multiSelectRef.current).toBe(initialMultiSelectState);
|
|
});
|
|
|
|
it("tolerates missing cleanups and preview sessions", () => {
|
|
const clearPreview = vi.fn();
|
|
|
|
cleanupTimelineDragState({
|
|
projectDragCleanupRef: { current: null },
|
|
allocDragCleanupRef: { current: null },
|
|
multiSelectCleanupRef: { current: null },
|
|
projectPreviewRef: { current: null },
|
|
allocPreviewRef: { current: null },
|
|
dragStateRef: { current: { drag: true } },
|
|
allocDragRef: { current: { alloc: true } },
|
|
rangeStateRef: { current: { range: true } },
|
|
multiSelectRef: { current: { multi: true } },
|
|
initialDragState: { drag: false },
|
|
initialAllocDragState: { alloc: false },
|
|
initialRangeState: { range: false },
|
|
initialMultiSelectState: { multi: false },
|
|
clearPreview,
|
|
});
|
|
|
|
expect(clearPreview).toHaveBeenCalledTimes(2);
|
|
expect(clearPreview).toHaveBeenNthCalledWith(1, null);
|
|
expect(clearPreview).toHaveBeenNthCalledWith(2, null);
|
|
});
|
|
});
|