tests: delete

This commit is contained in:
Maze Winther 2026-04-15 05:53:06 +02:00
parent 8a3577d2e7
commit 0868d9cf13
1 changed files with 0 additions and 391 deletions

View File

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