Files
SGF/scripts/workshop-stock-ui-check.mjs
2026-11-02 20:29:34 +02:00

21 lines
1.5 KiB
JavaScript

import assert from 'node:assert/strict';
import fs from 'node:fs/promises';
import React from 'react';
import {renderToStaticMarkup} from 'react-dom/server';
import {createServer} from 'vite';
const server=await createServer({configFile:false,server:{middlewareMode:true,watch:null},appType:'custom',optimizeDeps:{noDiscovery:true}});
try {
const {default:Workspace}=await server.ssrLoadModule('/resources/js/WorkshopMenuWorkspace.jsx');
const context={token:'synthetic',company:{id:1,name:'Synthetic'},unit:{id:7,name:'Synthetic'}};
const render=can=>renderToStaticMarkup(React.createElement(Workspace,{section:'workshop_stock',context,can,navigate:()=>{},api:()=>{throw Error('SSR must not fetch');}}));
const denied=render(p=>p==='company.view'||p==='workshop.view');
assert(!denied.includes('Conferência de consumo de material'));
const allowed=render((p,u)=>u===7&&['workshop.view','workshop_stock.view'].includes(p));
assert(allowed.includes('Conferência de consumo de material'));
assert(allowed.includes('A consultar origens autorizadas'));
assert(!allowed.includes('Capacidade ainda não disponível'));
assert(!allowed.includes('value="0"'));
await fs.writeFile('docs/proofs/workshop-stock-ui-20261102.json',JSON.stringify({kind:'static_render',permission_separation:true,pending_notice_removed_for_authorized_view:true,loading_not_zero:true,backend_requests:0,visual_review:false},null,2)+'\n');
console.log('Workshop stock static rendering passed. Visual review pending.');
} finally {await server.close();}