import test from 'node:test'; import assert from 'node:assert/strict'; import { loadEditorProject } from '../editor/startup.ts'; import { defaultProject } from '../engine/templates.ts'; const neverRequest: typeof fetch = async () => { throw Error('Unexpected network request'); }; test('hosted editor loads its bundled project without contacting a local engine', async()=>{ let requests=0; const seed=defaultProject(true);seed.name='Bundled courtyard'; const result=await loadEditorProject({browserOnly:true,initialProject:seed},{request:async()=>{requests++;return new Response();},draft:async()=>null}); assert.equal(requests,0);assert.equal(result.project.name,seed.name);assert.equal(result.status,null);assert.equal(result.restored,false); result.project.name='edited';assert.equal(seed.name,'Bundled courtyard'); }); test('hosted editor retains user edits across reloads instead of replacing them with its seed',async()=>{ const seed=defaultProject(true),saved=defaultProject(true);saved.name='User edits'; const result=await loadEditorProject({browserOnly:true,initialProject:seed},{request:neverRequest,draft:async()=>saved}); assert.equal(result.project.name,'User edits');assert.equal(result.restored,true); }); test('unavailable or corrupt browser storage still opens the bundled project',async()=>{ const seed=defaultProject(true);seed.name='Seed'; for(const draft of [async()=>{throw Error('Storage unavailable');},async()=>({invalid:true} as any)]){ const result=await loadEditorProject({browserOnly:true,initialProject:seed},{request:neverRequest,draft});assert.equal(result.project.name,'Seed'); } }); test('local editor still gives the connected Forma project priority over browser drafts',async()=>{ const project=defaultProject(true);project.name='Local engine project'; const status={forma:true,canUndo:true}; const result=await loadEditorProject({}, {request:async(url)=>Response.json(url==='/api/status'?status:{project}),draft:async()=>{throw Error('Must not read draft');}}); assert.equal(result.project.name,project.name);assert.deepEqual(result.status,status); });