Files
forma-engine/tests/startup.test.ts
T

30 lines
2.1 KiB
TypeScript

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