Files
SGF/scripts/receipt-home-check.mjs
2026-11-04 09:37:20 +02:00

4 lines
2.0 KiB
JavaScript

import fs from 'node:fs';import crypto from 'node:crypto';import assert from 'node:assert/strict';import React from 'react';import {renderToStaticMarkup} from 'react-dom/server';import {createServer} from 'vite';
const out='docs/proofs/receipt-home-20261103.json';assert(!fs.existsSync(out));const server=await createServer({configFile:false,server:{middlewareMode:true},appType:'custom'});const checks=[];const check=(v,n)=>{assert(v,n);checks.push(n);};
try{const {default:Home}=await server.ssrLoadModule('/resources/js/PurchasingHome.jsx');const context={company:{name:'QA'},unit:{id:7,name:'QA unit'},purchasing:{receipts:true,internal_requisitions:true}};const render=(c,rights)=>renderToStaticMarkup(React.createElement(Home,{context:c,can:(p,u)=>rights.includes(p)&&u===7,navigate(){}}));check(render(context,['purchasing_receipts.view']).includes('href="/purchasing/receipts"'),'explicit capability and scoped right expose receipt link');check(!render(context,[]).includes('href="/purchasing/receipts"'),'no receipt right hides link');check(!render({...context,unit:{id:8}},['purchasing_receipts.view']).includes('href="/purchasing/receipts"'),'other unit right cannot expose link');check(!render({...context,purchasing:{receipts:false}},['purchasing_receipts.view']).includes('href="/purchasing/receipts"'),'disabled composition hides link');check(!render({...context,unit:null},['purchasing_receipts.view']).includes('href="/purchasing/receipts"'),'no selected unit hides link');check(render(context,['purchasing_requisitions.view']).includes('href="/purchasing/internal-requisitions"'),'existing requisition link remains available');fs.writeFileSync(out,JSON.stringify({passed:true,checks:checks.length,names:checks,source:'resources/js/PurchasingHome.jsx',sha256:crypto.createHash('sha256').update(fs.readFileSync('resources/js/PurchasingHome.jsx')).digest('hex'),visual_review:false},null,2)+'\n');console.log(JSON.stringify({passed:true,checks:checks.length}));}finally{await server.close();}