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

3 lines
2.0 KiB
JavaScript

import fs from 'node:fs';import assert from 'node:assert/strict';import crypto from 'node:crypto';import React from 'react';import {renderToStaticMarkup} from 'react-dom/server';import {createServer} from 'vite';
const out='docs/proofs/invoice-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'),ctx={company:{name:'QA'},unit:{id:7},purchasing:{supplier_invoices:true,orders:true,receipts:true}},render=(context,rights)=>renderToStaticMarkup(React.createElement(Home,{context,can:(p,u)=>rights.includes(p)&&u===7,navigate(){}}));check(render(ctx,['purchasing_invoices.view']).includes('href="/purchasing/invoices"'),'invoice view and capability expose link');check(!render(ctx,[]).includes('href="/purchasing/invoices"'),'missing right hides link');check(!render({...ctx,unit:{id:8}},['purchasing_invoices.view']).includes('href="/purchasing/invoices"'),'another unit right cannot expose link');check(!render({...ctx,purchasing:{supplier_invoices:false}},['purchasing_invoices.view']).includes('href="/purchasing/invoices"'),'disabled composition hides link');check(!render({...ctx,unit:null},['purchasing_invoices.view']).includes('href="/purchasing/invoices"'),'unit selection required');const old=render(ctx,['purchasing_orders.view','purchasing_receipts.view']);check(old.includes('href="/purchasing/orders"')&&old.includes('href="/purchasing/receipts"'),'existing order and receipt navigation 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();}