29 lines
2.2 KiB
JavaScript
29 lines
2.2 KiB
JavaScript
// Render-only checks: no browser, database, credentials or additional dependencies.
|
|
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'});
|
|
try {
|
|
const {navigationGroups}=await server.ssrLoadModule('/resources/js/WorkspaceNavigation.jsx');
|
|
const {default:Home}=await server.ssrLoadModule('/resources/js/WorkspaceHome.jsx');
|
|
const context={company:{name:'Empresa sintética'},unit:{id:7,name:'Unidade sintética'}};
|
|
const check=(grants)=>{
|
|
const can=(permission,unit=null)=>grants.some(g=>g[0]===permission&&g[1]===unit);
|
|
const groups=navigationGroups(can,7);
|
|
return {groups,html:renderToStaticMarkup(React.createElement(Home,{context,can,groups,navigate:()=>{}}))};
|
|
};
|
|
const preparer=check([['company.view',null],['industrial_budgets.view',7],['industrial_budgets.prepare',7]]);
|
|
assert(preparer.html.includes('A preparar e acompanhar'));assert(!preparer.html.includes('<h2>A validar</h2>'));
|
|
assert(!preparer.groups.some(g=>g.id==='billing'));assert(!preparer.groups.flatMap(g=>g.items).some(i=>i.id==='access'));
|
|
const reviewer=check([['company.view',null],['industrial_budgets.view',7],['industrial_budgets.validate',7]]);
|
|
assert(reviewer.html.includes('<h2>A validar</h2>'));assert(!reviewer.html.includes('<h2>A preparar e acompanhar</h2>'));
|
|
const otherUnit=check([['company.view',null],['industrial_budgets.view',99],['industrial_budgets.prepare',99]]);
|
|
assert(!otherUnit.groups.some(g=>g.id==='costs'));
|
|
const noAccess=check([]);assert.deepEqual(noAccess.groups.map(g=>g.id),['start']);
|
|
const reader=check([['company.view',null],['industrial_budgets.view',7]]);
|
|
assert(!reader.html.includes('<h2>A validar</h2>'));assert(!reader.html.includes('<h2>A preparar e acompanhar</h2>'));
|
|
assert(reader.html.includes('não agrega nem conta tarefas pendentes'));
|
|
console.log('Home/navigation render checks passed: preparer, reviewer, reader, other unit and absent permissions. No database or browser used.');
|
|
} finally {await server.close();}
|