3 lines
1.6 KiB
JavaScript
3 lines
1.6 KiB
JavaScript
import fs from 'node:fs';import assert from 'node:assert/strict';import crypto from 'node:crypto';import React from 'react';import {renderToStaticMarkup} from 'react-dom/server';import {createServer} from 'vite';
|
|
const out='docs/proofs/geography-links-20261103.json';assert(!fs.existsSync(out));const server=await createServer({configFile:false,server:{middlewareMode:true},appType:'custom'}),checks=[];const check=(v,n)=>{assert(v,n);checks.push(n);};try{const {default:Link}=await server.ssrLoadModule('/resources/js/GeographyLink.jsx'),render=props=>renderToStaticMarkup(React.createElement(Link,props));for(const kind of ['company','unit','client'])check(render({enabled:true,kind,id:7}).includes('href="/geography/'+kind+'/7"'),kind+' opens the shared selector');check(render({enabled:false,kind:'client',id:7})==='','disabled composition hides location link');check(render({kind:'client',id:7})==='','absent capability hides location link');check(render({enabled:true,kind:'client',id:0})==='','unsaved client has no location target');check(render({enabled:true,kind:'unknown',id:7})==='','unrecognised entity cannot generate a target');check(render({enabled:true,kind:'client',id:1.5})==='','noninteger record ID is refused');fs.writeFileSync(out,JSON.stringify({passed:true,checks:checks.length,names:checks,source:'resources/js/GeographyLink.jsx',sha256:crypto.createHash('sha256').update(fs.readFileSync('resources/js/GeographyLink.jsx')).digest('hex'),visual_review:false},null,2)+'\n');console.log(JSON.stringify({passed:true,checks:checks.length}));}finally{await server.close();}
|