21 lines
1.5 KiB
JavaScript
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();}
|