Files
compras/scripts/supply-navigation-check.mjs
T
2026-11-02 08:08:05 +02:00

37 lines
2.8 KiB
JavaScript

import fs from 'node:fs/promises';
import assert from 'node:assert/strict';
const source = await fs.readFile('scripts/supplier-evaluation-check.mjs', 'utf8');
const common = source.slice(source.indexOf("const base ="), source.indexOf('const author ='));
const code = common + `
const viewer = client(); await viewer.enter('admin');
const dashboard = await viewer.request('/dashboard');
if (dashboard.page?.props.context?.enforced) {
const selected = await viewer.request('/contexto', 'POST', {area:'procurement',option:'procurement.internal'});
assert.ok([302,303].includes(selected.status));
}
const proof = [];
for (const view of ['agreements','calendar','imports','alternatives','reservations','deliveries','suggestions','history']) {
const result = await viewer.request('/compras/fornecimento?view='+view);
assert.equal(result.status,200); assert.equal(result.page.component, ['suggestions','history'].includes(view)?'supply/'+view:['alternatives','reservations','deliveries'].includes(view)?'supply/coordination':'supply/index'); assert.equal(result.page.props.ready,true);
assert.equal(result.page.props.canPrepare,false);
proof.push({view,status:result.status,ready:result.page.props.ready,admin_has_no_automatic_write:true});
}
const lots = await viewer.request('/stock/lotes');
assert.equal(lots.status,200); assert.equal(lots.page.component,'stock/lots'); assert.equal(lots.page.props.ready,true);
assert.equal(lots.page.props.capabilities.read,true);
for (const permission of ['prepare','review','hold','release']) assert.equal(lots.page.props.capabilities[permission],false);
proof.push({view:'lots',status:lots.status,ready:true,admin_has_no_automatic_write:true});
const dispositions = await viewer.request('/stock/ocorrencias');
assert.equal(dispositions.status,200); assert.equal(dispositions.page.component,'stock/dispositions'); assert.equal(dispositions.page.props.ready,true);
for (const permission of ['prepare','review','execute']) assert.equal(dispositions.page.props.capabilities[permission],false);
proof.push({view:'dispositions',status:dispositions.status,ready:true,admin_has_no_automatic_write:true});
const reversals = await viewer.request('/stock/estornos');
assert.equal(reversals.status,200); assert.equal(reversals.page.component,'stock/reversals'); assert.equal(reversals.page.props.ready,true);
for (const permission of ['prepare','review','execute']) assert.equal(reversals.page.props.capabilities[permission],false);
proof.push({view:'reversals',status:reversals.status,ready:true,admin_has_no_automatic_write:true});
await fs.writeFile('docs/proofs/supply-navigation.json', JSON.stringify({checked_at:new Date().toISOString(),checks:proof},null,2));
console.log('Eleven installed local supply/stock pages verified; no business commands or grants performed.');
`;
const run = new Function('fs','assert','return (async()=>{'+code+'})()');
await run(fs,assert);