Files
SGF/scripts/ledger-reports-demo-check.mjs
2026-11-04 09:37:20 +02:00

8 lines
1.9 KiB
JavaScript

import fs from 'node:fs';import path from 'node:path';import assert from 'node:assert/strict';
const state=JSON.parse(fs.readFileSync('C:/laragon/data/sgf-tempo/run/modular-regression-current.json','utf8')),out=path.join(state.root,'private/ledger-reports-demo-readiness.json');if(state.port!==55439||fs.existsSync(out))throw Error('New owned demo observation required');let checks=0;const ok=(v,m)=>{checks++;assert(v,m);},results=[];
for(const [port,sales,expected] of [[8053,true,200],[8051,false,200],[8052,false,503]]){
const jar=new Map();let token='';const get=async(url)=>{const r=await fetch('http://127.0.0.1:'+port+url,{headers:{Accept:'application/json',Cookie:[...jar].map(([k,v])=>k+'='+v).join('; '),'X-SGF-Context':token},redirect:'manual',signal:AbortSignal.timeout(15000)});for(const c of r.headers.getSetCookie()){const p=c.split(';')[0],i=p.indexOf('=');jar.set(p.slice(0,i),p.slice(i+1));}const text=await r.text();let data;try{data=JSON.parse(text);}catch{}return{status:r.status,text,data};};
const entry=await get('/qa/'+(sales?'sales':'ledger')+'-enter/read');ok(entry.status===200,'Existing read identity '+port);token=entry.data.context??'';const url='/api/general-ledger/trial-balance?from_on=2026-10-01&to_on=2026-10-31',r=await get(url);ok(r.status===expected,'Explicit composed capability '+port);if(expected===200){const html=await get(url.replace('/api/','/'));ok(html.status===200&&html.text.includes('balancete')&&!html.text.includes('method="post"'),'Read-only shared report '+port);results.push({port,status:r.status,journals_observed:r.data.basis.journals,report_has_commands:false});}else results.push({port,status:r.status,old_package_preserved:true});
}
fs.writeFileSync(out,JSON.stringify({passed:true,checks,demos:results,no_business_commands:true,no_reset_or_package_replacement:true,visual_review:false},null,2)+'\n');console.log(JSON.stringify({passed:true,checks,demos:results}));