import { compileFunction } from 'node:vm'; import assert from 'node:assert/strict'; import test from 'node:test'; import fs from 'node:fs'; import { createRequire } from 'node:module'; import React from 'react'; import { renderToStaticMarkup } from 'react-dom/server'; import ts from 'typescript'; const require = createRequire(import.meta.url); const source = fs.readFileSync( new URL( '../../resources/js/components/catalogue-guide-links.tsx', import.meta.url, ), 'utf8', ); const compiled = ts.transpileModule(source, { compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2022, jsx: ts.JsxEmit.ReactJSX, }, }).outputText; const module = { exports: {} }; compileFunction(compiled, ['require', 'module', 'exports'])( (name) => name === '@inertiajs/react' ? { Link: ({ href, children, ...props }) => React.createElement('a', { href, ...props }, children), } : require(name), module, module.exports, ); const render = (articles) => renderToStaticMarkup( React.createElement(module.exports.default, { articles }), ); void test('catalogue guides are closed optional links, not educational bodies or nationwide opportunity shortcuts', () => { const html = render([ { title: 'Turismo', href: '/artigos/turismo', summary: 'EDUCATIONAL-BODY-NOT-A-RESULT', image: { href: '/photo.jpg', alt: 'ILLUSTRATION' }, opportunities_href: '/oportunidades?sector=turismo', opportunities_label: 'ALL-NATIONAL-OPPORTUNITIES', has_opportunities: true, }, ]); assert.match(html, /]*\bopen\b/); assert.match(html, /apoio opcional/); assert.match(html, /href="\/artigos\/turismo"/); for (const forbidden of [ 'EDUCATIONAL-BODY-NOT-A-RESULT', 'ALL-NATIONAL-OPPORTUNITIES', '/oportunidades?sector=turismo', 'photo.jpg', ' { assert.equal(render([]), ''); });