Files
SGF/scripts/module-association-check.mjs
T

20 lines
2.0 KiB
JavaScript

import assert from 'node:assert/strict';
import React from 'react';
import {renderToStaticMarkup} from 'react-dom/server';
import {createServer} from 'vite';
const server=await createServer({server:{middlewareMode:true},appType:'custom',optimizeDeps:{noDiscovery:true,include:[]}});
try {
const {default:Queue,AssociationImpact}=await server.ssrLoadModule('/resources/js/ModuleRecordsWorkspace.jsx');
const modules=[{id:'commercial',label:'Comercial'},{id:'workshop',label:'Oficinas'}];
const review={record:{id:7,name:'<script>synthetic</script>',version:3},before:['commercial'],after:['commercial','workshop'],reason:'Explicit <review>',impact:'Only this record',warnings:['Dependencies remain pending'],
dependencies:[{area:'services',id:8,version:2,modules:[]}],history:[{id:1,actor_id:9,created_at:'2026-11-02',action:'module.record.associated',details:JSON.stringify({reason:'Earlier review',before_modules:[],after_modules:['commercial']})}]};
const html=renderToStaticMarkup(React.createElement(AssociationImpact,{review,modules}));
for(const expected of ['Antes: Comercial','Depois: Comercial, Oficinas','versão 3','Explicit &lt;review&gt;','Dependencies remain pending','autor #9','Earlier review','Serviços #8'])assert(html.includes(expected),expected);
assert(!html.includes('<script>'));
const initial=renderToStaticMarkup(React.createElement(Queue,{context:{token:'synthetic',unit:{id:4,name:'Synthetic unit'}},can:p=>['access.manage','clients.view'].includes(p),api:()=>{throw Error('SSR must not execute requests');}}));
assert(initial.includes('Filtros da fila'));assert(initial.includes('Synthetic unit'));assert(initial.includes('Sem eventos de associação'));
assert(!initial.includes('value="service_drafts"'));assert(!initial.includes('Confirmar esta decisão individual'));
console.log('Association render checks passed: impact, before/after, dependencies, history, escaping, authorized area filters and no confirmation before preview. No browser.');
} finally {await server.close();}