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

6 lines
1.8 KiB
JavaScript

import fs from 'node:fs';import assert from 'node:assert/strict';import React from 'react';import {renderToStaticMarkup} from 'react-dom/server';import {createServer} from 'vite';
const out='docs/proofs/purchasing-workspace-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:{source_requests:true,supplier_invoices:true,supplier_obligations:true,receipts:true}},render=(context,rights)=>renderToStaticMarkup(React.createElement(Home,{context,can:(p,u)=>rights.includes(p)&&u===7,navigate(){}}));
check(render(ctx,['purchasing_requests.view']).includes('href="/purchasing/workspace"'),'request view exposes common workspace');check(render(ctx,['purchasing_receipts.view']).includes('href="/purchasing/workspace"'),'warehouse view exposes same workspace');check(!render(ctx,[]).includes('href="/purchasing/workspace"'),'no stage rights hide workspace');check(!render({...ctx,unit:null},['purchasing_requests.view']).includes('href="/purchasing/workspace"'),'unit required');check(!render({...ctx,purchasing:{}},['purchasing_requests.view']).includes('href="/purchasing/workspace"'),'disabled stage capabilities hide workspace');const html=render(ctx,['purchasing_invoices.view','purchasing_obligations.view']);check(html.includes('href="/purchasing/invoices"')&&html.includes('href="/purchasing/obligations"'),'individual invoice and obligation destinations preserved');
fs.writeFileSync(out,JSON.stringify({passed:true,checks,visual_review:false},null,2)+'\n');console.log(JSON.stringify({passed:true,checks:checks.length}));}finally{await server.close();}