import { compileFunction } from 'node:vm'; import test from 'node:test'; import assert from 'node:assert/strict'; import fs from 'node:fs'; import { createRequire } from 'node:module'; import React from 'react'; import { renderToStaticMarkup } from 'react-dom/server'; import ts from 'typescript'; import * as forms from '../../resources/js/lib/fiscal-form-preparation.ts'; const require = createRequire(import.meta.url); const source = fs.readFileSync( new URL( '../../resources/js/pages/portal/fiscal-forms.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' ? { Head: () => null, Link: ({ href, children, ...props }) => React.createElement('a', { href, ...props }, children), router: { on: () => () => {} }, } : name === '@/layouts/portal-navigation' ? { PortalMenu: () => null } : name === '@/lib/fiscal-form-preparation' ? forms : require(name), module, module.exports, ); void test('fiscal entry renders labelled editable fields and a guided preparation rather than legislation', () => { const html = renderToStaticMarkup( React.createElement(module.exports.default), ); for (const label of [ 'Identificação e período', 'Nome ou designação social', 'NUIT', 'Período — ano e mês', 'Conferir e guardar', 'Guardar ficheiro para continuar', 'Recuperar ficheiro guardado', 'Confirmar recuperação', ]) { // Confirmation appears only after a compatible file is selected. if (label !== 'Confirmar recuperação') assert.ok(html.includes(label), label); } assert.equal((html.match(/inputMode="decimal"/g) ?? []).length, 27); assert.match(html, /sem submissão à Autoridade Tributária/); assert.match(html, /Não há gravação automática/); assert.doesNotMatch(html, /value="0"/); }); void test('IRPC entry opens the requested form directly and keeps its partial coverage explicit', () => { const html = renderToStaticMarkup( React.createElement(module.exports.default, { initialTax: 'irpc' }), ); assert.match(html, /IRPC — Modelo 22/); assert.match(html, /L8 permanece parcial/); assert.match(html, /303 — Dupla tributação económica/); assert.match(html, /304 — Dupla tributação internacional/); assert.match(html, /Não utilize a mesma parcela/); assert.equal((html.match(/inputMode="decimal"/g) ?? []).length, 24); assert.doesNotMatch(html, /01 — Base das operações/); });