summaryrefslogtreecommitdiff
path: root/apps/web/src/services/storage/migrations/__tests__/v31-to-v32.test.ts
blob: e3f1af8cdafb59d3516c0947f2e4e7bc5c53b211 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import { describe, expect, test } from "bun:test";
import { transformProjectV31ToV32 } from "../transformers/v31-to-v32";
import { asRecord, asRecordArray } from "./helpers";

describe("V31 to V32 Migration", () => {
	test("stamps a v31 project as v32 without changing its content", () => {
		const result = transformProjectV31ToV32({
			project: {
				id: "project-v31",
				version: 31,
				metadata: { id: "project-v31", name: "My project" },
				scenes: [
					{
						id: "scene-1",
						tracks: {
							main: {
								id: "track-1",
								type: "video",
								elements: [{ id: "elem-1", type: "video", mediaId: "media-1" }],
							},
							overlay: [],
							audio: [],
						},
					},
				],
			},
		});

		expect(result.skipped).toBe(false);
		expect(result.project.version).toBe(32);
		const scene = asRecordArray(result.project.scenes)[0];
		const main = asRecord(asRecord(scene.tracks).main);
		const element = asRecordArray(main.elements)[0];
		expect(element).toMatchObject({
			id: "elem-1",
			type: "video",
			mediaId: "media-1",
		});
		expect(asRecord(result.project.metadata).name).toBe("My project");
	});

	test("skips a project that is already v32", () => {
		const project = { id: "p1", version: 32, scenes: [] };
		const result = transformProjectV31ToV32({ project });
		expect(result.skipped).toBe(true);
		expect(result.reason).toBe("already v32");
		expect(result.project).toBe(project);
	});

	test("skips a project that is not v31", () => {
		const project = { id: "p1", version: 30, scenes: [] };
		const result = transformProjectV31ToV32({ project });
		expect(result.skipped).toBe(true);
		expect(result.reason).toBe("not v31");
		expect(result.project).toBe(project);
	});

	test("skips a project without an id", () => {
		const project = { version: 31, scenes: [] };
		const result = transformProjectV31ToV32({ project });
		expect(result.skipped).toBe(true);
		expect(result.reason).toBe("no project id");
		expect(result.project).toBe(project);
	});
});