42 lines
1.7 KiB
JavaScript
42 lines
1.7 KiB
JavaScript
const { test } = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
const { normalizeTicket, buildAiContextText, truncate } = require('./context');
|
|
|
|
function rawRow(overrides) {
|
|
return Object.assign({
|
|
id: '38611', titulo: ' Colocar etiqueta sala 03 ', status: '2', status_nome: 'Em atendimento',
|
|
aberto_em: '2026-08-01 08:00:00', ultima_interacao_em: '2026-08-22 08:00:00',
|
|
dias_aberto: '23', dias_sem_interacao: '2', sla_vencido: '1', sla_em_risco: '0', horas_ate_sla: null,
|
|
prioridade: '3', urgencia: '3', impacto: '3', entidade: 'Matriz', categoria: 'Facilities',
|
|
tecnico_atribuido: 'Sem tecnico atribuido', sem_tecnico: '1', link_glpi: 'https://glpi/x?id=38611',
|
|
score_criticidade: '145',
|
|
}, overrides);
|
|
}
|
|
|
|
test('normalizeTicket converte tipos e booleans 0/1', () => {
|
|
const t = normalizeTicket(rawRow({}), { followups: [], tasks: [] });
|
|
assert.equal(t.id, 38611);
|
|
assert.equal(t.titulo, ' Colocar etiqueta sala 03 ');
|
|
assert.equal(t.sla_vencido, true);
|
|
assert.equal(t.sla_em_risco, false);
|
|
assert.equal(t.sem_tecnico, true);
|
|
assert.equal(t.dias_aberto, 23);
|
|
assert.deepEqual(t.followups, []);
|
|
});
|
|
|
|
test('truncate corta e adiciona reticencias', () => {
|
|
const long = 'a'.repeat(50);
|
|
assert.equal(truncate(long, 10), `${'a'.repeat(7)}...`);
|
|
assert.equal(truncate('curto', 10), 'curto');
|
|
});
|
|
|
|
test('buildAiContextText respeita o orcamento de caracteres', () => {
|
|
const t = normalizeTicket(rawRow({}), {
|
|
followups: [{ id: 1, date: '2026-08-20', texto: 'x'.repeat(500) }],
|
|
tasks: [{ id: 1, date: '2026-08-19', status: 1, texto: 'y'.repeat(500) }],
|
|
});
|
|
const text = buildAiContextText(t, 300);
|
|
assert.ok(text.length <= 300);
|
|
assert.ok(text.includes('#38611'));
|
|
});
|