diff --git a/tests/serialization/scene-document-json.test.ts b/tests/serialization/scene-document-json.test.ts index ba6623f7..979a72c9 100644 --- a/tests/serialization/scene-document-json.test.ts +++ b/tests/serialization/scene-document-json.test.ts @@ -1025,11 +1025,62 @@ describe("scene document JSON", () => { expect(migratedDocument.paths[path.id]?.repeaters[0]?.collisionEnabled).toBe( false ); - expect(SPLINE_CORRIDOR_COLLISION_SCENE_DOCUMENT_VERSION).toBe( + expect(SPLINE_CORRIDOR_COLLISION_SCENE_DOCUMENT_VERSION).toBe(106); + }); + + it("migrates pre-junction scenes to an empty spline corridor junction registry", () => { + const document = createEmptySceneDocument({ + name: "Legacy Junction Scene" + }); + const legacyDocument = JSON.parse(serializeSceneDocument(document)) as { + version: number; + splineCorridorJunctions?: unknown; + }; + + legacyDocument.version = SPLINE_CORRIDOR_COLLISION_SCENE_DOCUMENT_VERSION; + delete legacyDocument.splineCorridorJunctions; + + const migratedDocument = migrateSceneDocument(legacyDocument); + + expect(migratedDocument.version).toBe(SCENE_DOCUMENT_VERSION); + expect(migratedDocument.splineCorridorJunctions).toEqual({}); + expect(SPLINE_CORRIDOR_JUNCTIONS_SCENE_DOCUMENT_VERSION).toBe( SCENE_DOCUMENT_VERSION ); }); + it("round-trips spline corridor junctions", () => { + const pathA = createScenePath({ id: "path-junction-json-a" }); + const pathB = createScenePath({ id: "path-junction-json-b" }); + const junction = createSplineCorridorJunction({ + id: "junction-json", + center: { x: 1, y: 0, z: 2 }, + radius: 2.5, + materialId: "mat-wall", + terrainMode: "paintOnly", + connections: [ + { pathId: pathA.id, progress: 0.25, clipDistance: 2.5 }, + { pathId: pathB.id, progress: 0.75, clipDistance: 2.5 } + ] + }); + const document = { + ...createEmptySceneDocument({ + name: "Junction Round Trip Scene" + }), + paths: { + [pathA.id]: pathA, + [pathB.id]: pathB + }, + splineCorridorJunctions: { + [junction.id]: junction + } + }; + + expect(parseSceneDocumentJson(serializeSceneDocument(document))).toEqual( + document + ); + }); + it("round-trips a document containing a canonical box brush", () => { const brush = createBoxBrush({ id: "brush-box-room",