import { describe, expect, it } from "vitest"; import { createBoxBrush } from "../../src/document/brushes"; import { createEmptySceneDocument } from "../../src/document/scene-document"; import { migrateSceneDocument } from "../../src/document/migrate-scene-document"; import { parseSceneDocumentJson, serializeSceneDocument } from "../../src/serialization/scene-document-json"; describe("scene document JSON", () => { it("round-trips the current empty schema", () => { const document = createEmptySceneDocument({ name: "Bootstrap Scene" }); const serializedDocument = serializeSceneDocument(document); expect(parseSceneDocumentJson(serializedDocument)).toEqual(document); }); it("round-trips a document containing a canonical box brush", () => { const brush = createBoxBrush({ id: "brush-box-room", center: { x: 0, y: 1, z: 0 }, size: { x: 4, y: 2, z: 6 } }); const document = { ...createEmptySceneDocument({ name: "Brush Scene" }), brushes: { [brush.id]: brush } }; expect(parseSceneDocumentJson(serializeSceneDocument(document))).toEqual(document); }); it("migrates the foundation schema to the current schema version", () => { const migratedDocument = migrateSceneDocument({ version: 1, name: "Foundation Scene", world: createEmptySceneDocument().world, materials: {}, textures: {}, assets: {}, brushes: {}, modelInstances: {}, entities: {}, interactionLinks: {} }); expect(migratedDocument.version).toBe(2); expect(migratedDocument.brushes).toEqual({}); expect(migratedDocument.name).toBe("Foundation Scene"); }); it("rejects unsupported versions", () => { expect(() => migrateSceneDocument({ version: 99, name: "Legacy", world: {}, materials: {}, textures: {}, assets: {}, brushes: {}, modelInstances: {}, entities: {}, interactionLinks: {} }) ).toThrow("Unsupported scene document version"); }); });