7 lines
1.7 KiB
JavaScript
7 lines
1.7 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 output=process.argv[2];if(!output||fs.existsSync(output))throw Error('Fresh output required');
|
|
const server=await createServer({configFile:false,optimizeDeps:{noDiscovery:true,include:[]},server:{middlewareMode:true},appType:'custom'});let checks=0;
|
|
try{const {default:Home}=await server.ssrLoadModule('/resources/js/PurchasingHome.jsx');const view=(enabled,grant=true,unit=2)=>renderToStaticMarkup(React.createElement(Home,{context:{company:{name:'QA'},unit:unit===null?null:{id:unit,name:'QA unit'},purchasing:{internal_requisitions:enabled}},can:(p,u)=>grant&&p==='purchasing_requisitions.view'&&u===2,navigate(){}}));
|
|
const check=(v,name)=>{assert(v,name);checks++;};check(view(true).includes('href="/purchasing/internal-requisitions"'),'enabled QA and scoped right link to canonical screen');check(!view(false).includes('href="/purchasing/internal-requisitions"'),'no link when composition disabled');check(!view(true,false).includes('href="/purchasing/internal-requisitions"'),'no link without right');check(!view(true,true,3).includes('href="/purchasing/internal-requisitions"'),'other unit right not inherited');check(!view(true,true,null).includes('href="/purchasing/internal-requisitions"'),'unit required');check(!view('true').includes('href="/purchasing/internal-requisitions"'),'strict server feature flag');
|
|
fs.writeFileSync(output,JSON.stringify({passed:true,checks,react_static_render:true,actual_browser:false},null,2));console.log(JSON.stringify({passed:true,checks}));}finally{await server.close();}
|