Files
SLACK_COORD_RELATORIO/coordenador/logic/normalize.test.js
T
Gustavo Santos e322cec92b chore: import coordenador (subtree)
git-subtree-dir: coordenador
git-subtree-mainline: facbe2e340
git-subtree-split: ce7af94d55
2026-10-01 14:25:55 -03:00

64 lines
2.8 KiB
JavaScript

const { test } = require('node:test');
const assert = require('node:assert/strict');
const { normalizeGlpiText } = require('./normalize');
test('HTML normal e removido, texto preservado', () => {
assert.equal(normalizeGlpiText('<p>Aguardando cliente</p>'), 'Aguardando cliente');
});
test('entidades HTML escapadas uma vez sao decodificadas e as tags removidas', () => {
const entrada = '&#60;p&#62;Aguardando retorno de Patricia sobre troca da carcaça&#60;/p&#62;';
assert.equal(normalizeGlpiText(entrada), 'Aguardando retorno de Patricia sobre troca da carcaça');
});
test('entidades HTML escapadas duas vezes sao decodificadas iterativamente', () => {
const entrada = '&amp;#60;p&amp;#62;texto&amp;#60;/p&amp;#62;';
assert.equal(normalizeGlpiText(entrada), 'texto');
});
test('entidades nomeadas comuns (amp, nbsp) sao decodificadas', () => {
assert.equal(normalizeGlpiText('Suporte&nbsp;&amp;&nbsp;Manutenção'), 'Suporte & Manutenção');
});
test('texto sem HTML permanece intacto (so trim de espacos)', () => {
assert.equal(normalizeGlpiText(' Servidor não responde '), 'Servidor não responde');
});
test('caracteres acentuados sao preservados', () => {
assert.equal(normalizeGlpiText('<p>Impressão não está funcionando corretamente na área de atendimento</p>'), 'Impressão não está funcionando corretamente na área de atendimento');
});
test('codigo tecnico (numeros, versao, hostname) e preservado', () => {
const entrada = '<p>Erro 0x8007000E no servidor SRV-FILE01, versao 10.2.3, IP 192.168.1.50</p>';
assert.equal(normalizeGlpiText(entrada), 'Erro 0x8007000E no servidor SRV-FILE01, versao 10.2.3, IP 192.168.1.50');
});
test('string vazia retorna string vazia', () => {
assert.equal(normalizeGlpiText(''), '');
});
test('null e undefined retornam string vazia sem lancar excecao', () => {
assert.doesNotThrow(() => normalizeGlpiText(null));
assert.doesNotThrow(() => normalizeGlpiText(undefined));
assert.equal(normalizeGlpiText(null), '');
assert.equal(normalizeGlpiText(undefined), '');
});
test('quebras de linha excessivas e espacos duplicados sao colapsados', () => {
const entrada = '<p>Linha 1</p>\n\n\n\n<p>Linha 2 com espacos</p>';
const resultado = normalizeGlpiText(entrada);
assert.ok(!resultado.includes('\n\n\n'));
assert.ok(!/ {2,}/.test(resultado));
});
test('decodificacao para no limite de iteracoes sem lancar excecao (protecao contra loop)', () => {
const entradaMaliciosa = '&amp;'.repeat(20) + '#60;p&#62;';
assert.doesNotThrow(() => normalizeGlpiText(entradaMaliciosa));
});
test('conteudo normalizado de duas codificacoes diferentes do mesmo texto e identico', () => {
const versaoHtml = '<p>Aguardando cliente</p>';
const versaoEscapada = '&#60;p&#62;Aguardando cliente&#60;/p&#62;';
assert.equal(normalizeGlpiText(versaoHtml), normalizeGlpiText(versaoEscapada));
});