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

3 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/request-home-20261103.json';assert(!fs.existsSync(out));const server=await createServer({configFile:false,server:{middlewareMode:true},appType:'custom'}),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},purchasing:{source_requests:true,orders:true,receipts:true}};const render=(c,rights)=>renderToStaticMarkup(React.createElement(Home,{context:c,can:(p,u)=>rights.includes(p)&&u===7,navigate(){}}));check(render(context,['purchasing_requests.view']).includes('href="/purchasing/requests"'),'scoped right and capability expose request link');check(!render(context,[]).includes('href="/purchasing/requests"'),'absent right hides request link');check(!render({...context,unit:{id:8}},['purchasing_requests.view']).includes('href="/purchasing/requests"'),'foreign unit right hides request link');check(!render({...context,purchasing:{source_requests:false}},['purchasing_requests.view']).includes('href="/purchasing/requests"'),'disabled composition hides request link');check(!render({...context,unit:null},['purchasing_requests.view']).includes('href="/purchasing/requests"'),'unit selection is required');const old=render(context,['purchasing_orders.view','purchasing_receipts.view']);check(old.includes('href="/purchasing/orders"')&&old.includes('href="/purchasing/receipts"'),'order and receipt links remain available');fs.writeFileSync(out,JSON.stringify({passed:true,checks:6,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:6}));}finally{await server.close();}