const test=require('node:test'); const assert=require('node:assert/strict'); const {plan}=require('../app/static/workspace-guide.js'); const site={id:'s1',name:'Demo',mode:'new',domain:'',updated_at:'2026-01-01T00:00:00Z'}; const starter={id:'start',route:'/',source:'starter',status:'published',updated_at:'2026-01-01T00:00:00Z'}; const product={id:'p',route:'/p/',source:'manual',status:'published',updated_at:'2026-01-02T00:00:00Z'}; test('empty site is not a completed journey',()=>{const p=plan({site,entries:[starter]});assert.equal(p.next.id,'content');assert.equal(p.completed,1);assert.equal(p.hasBuild,false);assert.equal(p.live,false)}); test('manually edited starter homepage can count as content',()=>{const p=plan({site,entries:[{...starter,created_at:'2026-01-01T00:00:00Z',updated_at:'2026-01-02T00:00:00Z'}]});assert.equal(p.next.id,'build')}); test('a draft never counts as prepared content',()=>{const p=plan({site,entries:[starter,{...product,status:'draft'}]});assert.equal(p.next.id,'content')}); test('migration site goes to the import workflow',()=>{const p=plan({site:{...site,mode:'migration'},entries:[starter]});assert.equal(p.steps[1].view,'import')}); test('content without a build stays in the build step',()=>{const p=plan({site,entries:[starter,product]});assert.equal(p.next.id,'build');assert.equal(p.completed,2)}); test('completed static build does not mean online',()=>{const p=plan({site,entries:[starter,product],builds:[{status:'complete',created_at:'2026-01-03T00:00:00Z'}]});assert.equal(p.next.id,'review');assert.equal(p.live,false);assert.equal(p.completed,3)}); test('later edits mark build as requiring review',()=>{const p=plan({site,entries:[starter,{...product,updated_at:'2026-01-05T00:00:00Z'}],builds:[{status:'done',created_at:'2026-01-03T00:00:00Z'}]});assert.equal(p.next.id,'build');assert.equal(p.changedAfterBuild,true)}); test('running job cannot be treated as completed build',()=>{const p=plan({site,entries:[starter,product],jobs:[{state:'running'}]});assert.equal(p.anyRunning,true);assert.equal(p.steps[3].done,false)}); test('only a production deployment record is reported as deployed',()=>{const base={site,entries:[starter,product],builds:[{status:'done',created_at:'2026-01-03T00:00:00Z'}]};assert.equal(plan({...base,delivery:{history:[{target:'staging',release_id:'r'}]}}).live,false);assert.equal(plan({...base,delivery:{history:[{target:'production',release_id:'r'}]}}).live,true)}); test('no site returns safely empty model',()=>{const p=plan({});assert.equal(p.ready,false);assert.equal(p.next,null)});