13 lines
4.3 KiB
JavaScript
13 lines
4.3 KiB
JavaScript
import fs from'node:fs';import assert from'node:assert/strict';import{parsePage,installDom,walk}from'./purchasing-workspace-dom.mjs';import{presentationLanding}from'../resources/js/presentation-landing.js';
|
|
const checks=[],ok=(v,label)=>{assert(v,label);checks.push(label);},base='http://127.0.0.1:8085';let rendered;
|
|
for(const[module,target,api]of[['commercial','/?start=service_invoice_setup','/api/service-invoices'],['purchasing','/purchasing/workspace','/api/purchasing-requests'],['stock','/stock/final','/api/stock-final'],['workshop','/?start=workshop','/api/workshop'],['finance','/?start=service_receivables','/api/service-receivables'],['accounting','/general-ledger','/api/general-ledger']]){
|
|
const jar=new Map(),send=async(path,options={})=>{const r=await fetch(base+path,{...options,redirect:'manual',headers:{Accept:'application/json',Cookie:[...jar].map(([k,v])=>k+'='+v).join('; '),...options.headers}});for(const c of r.headers.getSetCookie()){const pair=c.split(';')[0],at=pair.indexOf('=');jar.set(pair.slice(0,at),pair.slice(at+1));}return r;};
|
|
let r=await send('/sgf',{headers:{Accept:'text/html'}});ok(r.status===200,module+' entry200');const html=await r.text(),doc=parsePage(html);rendered=html;const form=doc.querySelector('form[data-presentation-module="'+module+'"]');ok(Boolean(form),module+' explicit dropdown consultation form');const body=new URLSearchParams(walk(form).filter(e=>e.tag==='input').map(e=>[e.name,e.value]));r=await send('/sgf/entrar',{method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded'},body});ok(r.status===302&&new URL(r.headers.get('location'),base).pathname+new URL(r.headers.get('location'),base).search===target,module+' exact landing without user-supplied redirect');
|
|
r=await send('/api/session');const identity=await r.json();ok(identity.context.module_id===module&&identity.context.company.id===2&&identity.context.unit.id===2,module+' normal approved identity and exact module');r=await send(target,{headers:{Accept:'text/html'}});ok(r.status===200,module+' destination screen200');await r.text();r=await send(api,{headers:{'X-SGF-Context':identity.context.token}});ok(r.status===200,module+' authorised source API200');const data=await r.json();
|
|
if(module==='commercial'){ok(data.invoices.length===1,'commercial exposes the one issued1000MZN test document');r=await send('/api/service-invoices/'+data.invoices[0].id+'/pdf',{headers:{'X-SGF-Context':identity.context.token}});ok(r.status===200&&r.headers.get('content-type').includes('application/pdf'),'commercial PDF opens under guided consult identity');await r.arrayBuffer();}
|
|
if(module==='accounting')ok(data.journals.length===18,'guided accounting reads18 current journals');
|
|
}
|
|
const doc=parsePage(rendered);installDom(doc);doc.addEventListener=(name,fn)=>doc.root.addEventListener(name,fn);await import('../public/sgf-entry-menu.mjs');const menus=doc.querySelectorAll('.module-choice');ok(menus.length===6,'six horizontal module dropdowns');ok(doc.querySelector('.advanced')!==null,'legacy profile chooser remains available separately');menus[0].open=true;menus[0].ontoggle();menus[1].open=true;menus[1].ontoggle();ok(menus[0].open===false&&menus[1].open===true,'opening another dropdown closes previous one');menus[1].onkeydown({key:'Escape'});ok(menus[1].open===false,'Escape closes the dropdown');menus[2].open=true;doc.root.onpointerdown({target:doc.querySelector('header')});ok(menus[2].open===false,'outside pointer closes dropdown');delete globalThis.document;
|
|
ok(presentationLanding({single_installation:true},[{items:[{id:'workshop'}]}],'workshop')==='workshop','explicit initial page accepted only when granted');ok(presentationLanding({single_installation:true},[{items:[]}],'workshop')===false,'initial page never substitutes an ungranted function');ok(presentationLanding({single_installation:false},[{items:[{id:'workshop'}]}],'workshop')===null,'QA landing does not change other installations');
|
|
const run=JSON.parse(fs.readFileSync('C:/laragon/data/sgf-tempo/run/modular-regression-current.json')),file=run.root+'/private/receipt-composition-cc50a276c10c/guided-menu-http-20261110.json';fs.writeFileSync(file,JSON.stringify({passed:true,checks,business_commands:0,authentication_posts_only:true,browser_visual_review:false},null,2));console.log(JSON.stringify({passed:true,checks:checks.length,proof:file}));
|