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); }); });