From 0868d9cf133a5b92ff6cf8dd280d043d48e1cb65 Mon Sep 17 00:00:00 2001 From: Maze Winther Date: Wed, 15 Apr 2026 05:53:06 +0200 Subject: [PATCH] tests: delete --- .../group-move/__tests__/group-move.test.ts | 391 ------------------ 1 file changed, 391 deletions(-) delete mode 100644 apps/web/src/lib/timeline/group-move/__tests__/group-move.test.ts diff --git a/apps/web/src/lib/timeline/group-move/__tests__/group-move.test.ts b/apps/web/src/lib/timeline/group-move/__tests__/group-move.test.ts deleted file mode 100644 index 9e89c48a..00000000 --- a/apps/web/src/lib/timeline/group-move/__tests__/group-move.test.ts +++ /dev/null @@ -1,391 +0,0 @@ -import { describe, expect, test } from "bun:test"; -import type { - AudioTrack, - OverlayTrack, - SceneTracks, - TextElement, - TextTrack, - VideoElement, - VideoTrack, -} from "@/lib/timeline/types"; -import type { Transform } from "@/lib/rendering"; -import { buildMoveGroup } from "@/lib/timeline/group-move/build-group"; -import { resolveGroupMove } from "@/lib/timeline/group-move/resolve-move"; -import { snapGroupEdges } from "@/lib/timeline/group-move/snap"; - -function buildTransform(): Transform { - return { - scaleX: 1, - scaleY: 1, - position: { x: 0, y: 0 }, - rotate: 0, - }; -} - -function buildVideoElement({ - id, - startTime, - duration, -}: { - id: string; - startTime: number; - duration: number; -}): VideoElement { - return { - id, - type: "video", - name: id, - startTime, - duration, - trimStart: 0, - trimEnd: 0, - mediaId: `${id}-media`, - transform: buildTransform(), - opacity: 1, - }; -} - -function buildTextElement({ - id, - startTime, - duration, -}: { - id: string; - startTime: number; - duration: number; -}): TextElement { - return { - id, - type: "text", - name: id, - startTime, - duration, - trimStart: 0, - trimEnd: 0, - content: id, - fontSize: 32, - fontFamily: "Inter", - color: "#ffffff", - background: { - enabled: false, - color: "#000000", - }, - textAlign: "left", - fontWeight: "normal", - fontStyle: "normal", - textDecoration: "none", - transform: buildTransform(), - opacity: 1, - }; -} - -function buildVideoTrack({ - id, - elements = [], -}: { - id: string; - elements?: VideoTrack["elements"]; -}): VideoTrack { - return { - id, - type: "video", - name: id, - elements, - muted: false, - hidden: false, - }; -} - -function buildTextTrack({ - id, - elements = [], -}: { - id: string; - elements?: TextTrack["elements"]; -}): TextTrack { - return { - id, - type: "text", - name: id, - elements, - hidden: false, - }; -} - -function buildTracks({ - overlay, - main, - audio = [], -}: { - overlay: OverlayTrack[]; - main: VideoTrack; - audio?: AudioTrack[]; -}): SceneTracks { - return { - overlay, - main, - audio, - }; -} - -describe("group move", () => { - test("buildMoveGroup keeps rigid time offsets", () => { - const tracks = buildTracks({ - overlay: [ - buildVideoTrack({ - id: "overlay-video", - elements: [ - buildVideoElement({ id: "video-1", startTime: 5, duration: 4 }), - ], - }), - buildTextTrack({ - id: "overlay-text", - elements: [ - buildTextElement({ id: "text-1", startTime: 8, duration: 3 }), - ], - }), - ], - main: buildVideoTrack({ id: "main" }), - }); - - const group = buildMoveGroup({ - anchorRef: { trackId: "overlay-video", elementId: "video-1" }, - selectedElements: [ - { trackId: "overlay-video", elementId: "video-1" }, - { trackId: "overlay-text", elementId: "text-1" }, - ], - tracks, - }); - - expect(group).not.toBeNull(); - expect(group?.members.map((member) => member.timeOffset)).toEqual([0, 3]); - }); - - test("resolveGroupMove preserves order and clamps rigidly at time zero", () => { - const tracks = buildTracks({ - overlay: [ - buildTextTrack({ - id: "overlay-text", - elements: [ - buildTextElement({ id: "text-1", startTime: 0, duration: 3 }), - ], - }), - buildVideoTrack({ - id: "overlay-video", - elements: [ - buildVideoElement({ id: "video-1", startTime: 5, duration: 4 }), - ], - }), - ], - main: buildVideoTrack({ id: "main" }), - }); - const group = buildMoveGroup({ - anchorRef: { trackId: "overlay-video", elementId: "video-1" }, - selectedElements: [ - { trackId: "overlay-video", elementId: "video-1" }, - { trackId: "overlay-text", elementId: "text-1" }, - ], - tracks, - }); - if (!group) { - throw new Error("Expected group"); - } - - const result = resolveGroupMove({ - group, - tracks, - anchorStartTime: 7, - target: { - kind: "existingTrack", - anchorTargetTrackId: "main", - }, - }); - - expect(result?.moves).toEqual([ - { - sourceTrackId: "overlay-video", - elementId: "video-1", - targetTrackId: "main", - newStartTime: 5, - }, - { - sourceTrackId: "overlay-text", - elementId: "text-1", - targetTrackId: "overlay-text", - newStartTime: 0, - }, - ]); - }); - - test("resolveGroupMove falls back to new overlay tracks when the group cannot cross main", () => { - const tracks = buildTracks({ - overlay: [ - buildVideoTrack({ - id: "overlay-video", - elements: [ - buildVideoElement({ id: "video-1", startTime: 5, duration: 4 }), - ], - }), - buildTextTrack({ - id: "overlay-text", - elements: [ - buildTextElement({ id: "text-1", startTime: 5, duration: 3 }), - ], - }), - ], - main: buildVideoTrack({ id: "main" }), - }); - const group = buildMoveGroup({ - anchorRef: { trackId: "overlay-video", elementId: "video-1" }, - selectedElements: [ - { trackId: "overlay-video", elementId: "video-1" }, - { trackId: "overlay-text", elementId: "text-1" }, - ], - tracks, - }); - if (!group) { - throw new Error("Expected group"); - } - - const result = resolveGroupMove({ - group, - tracks, - anchorStartTime: 6, - target: { - kind: "newTracks", - anchorInsertIndex: 2, - newTrackIds: ["new-video-track", "new-text-track"], - }, - }); - - expect(result?.createTracks).toEqual([ - { - id: "new-video-track", - type: "video", - index: 2, - }, - { - id: "new-text-track", - type: "text", - index: 3, - }, - ]); - expect(result?.moves).toEqual([ - { - sourceTrackId: "overlay-video", - elementId: "video-1", - targetTrackId: "new-video-track", - newStartTime: 6, - }, - { - sourceTrackId: "overlay-text", - elementId: "text-1", - targetTrackId: "new-text-track", - newStartTime: 6, - }, - ]); - }); - - test("snapGroupEdges snaps the closest group edge and preserves offsets", () => { - const tracks = buildTracks({ - overlay: [ - buildVideoTrack({ - id: "overlay-video", - elements: [ - buildVideoElement({ id: "video-1", startTime: 5, duration: 2 }), - ], - }), - buildTextTrack({ - id: "overlay-text", - elements: [ - buildTextElement({ id: "text-1", startTime: 8, duration: 3 }), - ], - }), - ], - main: buildVideoTrack({ - id: "main", - elements: [ - buildVideoElement({ id: "video-snap", startTime: 10, duration: 4 }), - ], - }), - }); - const group = buildMoveGroup({ - anchorRef: { trackId: "overlay-video", elementId: "video-1" }, - selectedElements: [ - { trackId: "overlay-video", elementId: "video-1" }, - { trackId: "overlay-text", elementId: "text-1" }, - ], - tracks, - }); - if (!group) { - throw new Error("Expected group"); - } - - const result = snapGroupEdges({ - group, - anchorStartTime: 6, - tracks, - playheadTime: 100, - zoomLevel: 1, - }); - - expect(result).toEqual({ - snappedAnchorStartTime: 7, - snapPoint: { - time: 10, - type: "element-start", - elementId: "video-snap", - trackId: "main", - }, - }); - }); - - test("snapGroupEdges returns the raw anchor time when nothing is within threshold", () => { - const tracks = buildTracks({ - overlay: [ - buildVideoTrack({ - id: "overlay-video", - elements: [ - buildVideoElement({ id: "video-1", startTime: 5, duration: 2 }), - ], - }), - buildTextTrack({ - id: "overlay-text", - elements: [ - buildTextElement({ id: "text-1", startTime: 8, duration: 3 }), - ], - }), - ], - main: buildVideoTrack({ - id: "main", - elements: [ - buildVideoElement({ id: "video-snap", startTime: 100, duration: 4 }), - ], - }), - }); - const group = buildMoveGroup({ - anchorRef: { trackId: "overlay-video", elementId: "video-1" }, - selectedElements: [ - { trackId: "overlay-video", elementId: "video-1" }, - { trackId: "overlay-text", elementId: "text-1" }, - ], - tracks, - }); - if (!group) { - throw new Error("Expected group"); - } - - const result = snapGroupEdges({ - group, - anchorStartTime: 6, - tracks, - playheadTime: 200, - zoomLevel: 1000, - }); - - expect(result).toEqual({ - snappedAnchorStartTime: 6, - snapPoint: null, - }); - }); -});