Files
Investidor-V2/tests/frontend/global-search.test.mjs
T
2026-11-05 14:54:39 +02:00

81 lines
2.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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';
const require = createRequire(import.meta.url);
const source = fs.readFileSync(
new URL('../../resources/js/pages/portal/search.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: {} };
new Function('require', 'module', 'exports', compiled)(
(name) =>
name === '@inertiajs/react'
? {
Head: () => null,
Link: ({ href, children, ...props }) =>
React.createElement('a', { href, ...props }, children),
}
: name === 'lucide-react'
? new Proxy({}, { get: () => () => null })
: require(name),
module,
module.exports,
);
const Search = module.exports.default;
test('shows five results in one sequence with numbered pagination and the query preserved', () => {
const results = {
data: [
{
title: 'Energia em Nampula',
description: 'Projecto público',
url: '/oportunidades/energia',
category: 'Oportunidades',
},
],
total: 12,
current_page: 1,
last_page: 3,
per_page: 5,
unavailable: [],
};
const html = renderToStaticMarkup(
React.createElement(Search, { query: 'energia', results }),
);
assert.match(html, /Oportunidades/);
assert.match(html, /Resultados 1–1 de 12/);
assert.match(html, /href="\/oportunidades\/energia"/);
assert.match(html, /q=energia&page=2/);
assert.match(html, /aria-current="page"/);
assert.doesNotMatch(html, /emerald/);
});
test('makes source failures explicit without hiding other results', () => {
const results = {
data: [],
total: 0,
current_page: 1,
last_page: 1,
per_page: 5,
unavailable: ['Documentos e legislação'],
};
const html = renderToStaticMarkup(
React.createElement(Search, { query: 'terra', results }),
);
assert.match(html, /role="alert"/);
assert.match(html, /Não foi possível consultar: Documentos e legislação/);
assert.match(html, /Nenhum resultado nas fontes consultadas/);
});