Files
SGF/scripts/sgf-fiscal-obligations-entry-http.mjs
2026-11-11 09:00:17 +02:00

6 lines
2.6 KiB
JavaScript

import fs from 'node:fs';import assert from 'node:assert/strict';import {createRequire} from 'node:module';import {pathToFileURL} from 'node:url';import {transformWithOxc} from 'vite';import {session} from './sgf-single-http.mjs';
const checks=[],ok=(v,n)=>{assert(v,n);checks.push(n);},root=JSON.parse(fs.readFileSync('C:/laragon/data/sgf-tempo/run/modular-regression-current.json')).root+'/private/receipt-composition-cc50a276c10c';let r=await fetch('http://127.0.0.1:8085/api/fiscal-obligations?reference_on=2026-12-15',{headers:{Accept:'application/json'},redirect:'manual'});ok(r.status===401,'new endpoint requires authentication');const s=await session('sgf:finance_prepare','accounting');r=await s.get('/api/fiscal-obligations/confirm',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({preview:'missing-csrf-test'})});ok(r.status===419,'confirmation without CSRF refused');
for(const profile of ['sgf:accounting_prepare','sgf:accounting_review']){const reader=await session(profile,'accounting');r=await reader.get('/api/fiscal-obligations?reference_on=2026-12-15');const data=await r.json();ok(r.status===200&&!data.capabilities.prepare&&!data.capabilities.review,'approved accounting consultation read-only '+profile);}
const require=createRequire(import.meta.url);let source=fs.readFileSync('resources/js/WorkspaceNavigation.jsx','utf8').replace("from 'react'",'from '+JSON.stringify(pathToFileURL(require.resolve('react')).href));for(const f of ['billing-menu.js','workshop-menu.js','stock-menu.js','accounting-menu.js'])source=source.replace("from './"+f+"'",'from '+JSON.stringify(pathToFileURL(process.cwd()+'/resources/js/'+f).href));const c=await transformWithOxc(source,'WorkspaceNavigation.jsx',{jsx:{runtime:'classic'}}),{navigationGroups}=await import('data:text/javascript;base64,'+Buffer.from(c.code).toString('base64'));const includes=groups=>groups.some(g=>g.items.some(i=>i.id==='fiscal_obligations'));ok(!includes(navigationGroups(()=>true,2,{})),'new function hidden when flag absent');ok(!includes(navigationGroups(p=>p!=='fiscal_obligations.view',2,{fiscalObligations:true})),'new function hidden without new view right');ok(includes(navigationGroups(p=>s.identity.context.grants.some(g=>g.permission===p),2,{fiscalObligations:true})),'actual authorized context can navigate new accounting function');
const file=root+'/fiscal-obligations-entry-http-20261110.json';fs.writeFileSync(file,JSON.stringify({passed:true,checks,business_commands:0,browser_visual_review:false},null,2));console.log(JSON.stringify({passed:true,checks:checks.length,proof:file}));