Files
COMERCIAL-GTI/tests/scoring.test.mjs
T
DESKTOP-F2O4A80\UserandClaude b8d10b210c Commit inicial: GTI Maquina Comercial
App local (Node + SQLite) para captura, tratamento e exportacao de leads
comerciais, com dashboard de gestao, login/usuarios e integracao Z-PRO.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-12 14:22:21 -03:00

123 lines
4.4 KiB
JavaScript

import test from 'node:test';
import assert from 'node:assert/strict';
import {
validatePhone, validateCnpj, validateEmpresa, dedupKey, extractDdd, segmentLabel,
scoreQualidade, scoreComercial, scoreGeral, classificarScoreGeral
} from '../src/scoring.mjs';
test('validatePhone aceita celular e fixo com 55', () => {
assert.equal(validatePhone('557193335451').valid, true);
assert.equal(validatePhone('5571993335451').valid, true);
});
test('validatePhone rejeita vazio, curto e ddd invalido', () => {
assert.deepEqual(validatePhone(''), { valid: false, motivo: 'telefone vazio' });
assert.equal(validatePhone('7199999').valid, false);
assert.equal(validatePhone('550599999999').valid, false);
assert.equal(validatePhone('5571000000000').valid, false);
});
test('validateCnpj valida digitos verificadores', () => {
// CNPJ real da base legada (PREMIUM EXPRESS)
assert.equal(validateCnpj('57557263000113'), true);
assert.equal(validateCnpj('57557263000114'), false);
assert.equal(validateCnpj('11111111111111'), false);
assert.equal(validateCnpj('123'), false);
});
test('validateEmpresa aplica regra critica do relatorio legado', () => {
assert.equal(validateEmpresa('PREMIUM EXPRESS').valid, true);
assert.deepEqual(validateEmpresa('57.563.316 JHONATAS SOUZA'), { valid: false, motivo: 'empresa comeca com numero' });
assert.deepEqual(validateEmpresa('-'), { valid: false, motivo: 'empresa vazia ou com lixo' });
assert.deepEqual(validateEmpresa(''), { valid: false, motivo: 'empresa vazia ou com lixo' });
assert.equal(validateEmpresa('...***...').valid, false);
});
test('scoreQualidade: lead completo com website bate 100', () => {
const result = scoreQualidade({
whatsapp: '557193335451',
cnpj: '57557263000113',
empresa: 'PREMIUM EXPRESS',
cidade: 'Salvador',
segmento: 'restaurantes',
cnae: '5611203',
website: 'https://premiumexpress.com.br'
});
assert.equal(result.score, 100);
assert.equal(result.telefoneValido, true);
assert.equal(result.cnpjValido, true);
assert.equal(result.empresaValida, true);
});
test('scoreQualidade: sem telefone/website perde 30+5 pontos', () => {
const result = scoreQualidade({
whatsapp: '',
cnpj: '57557263000113',
empresa: 'PREMIUM EXPRESS',
cidade: 'Salvador',
segmento: 'restaurantes',
cnae: '5611203',
website: ''
});
assert.equal(result.score, 65);
assert.equal(result.telefoneValido, false);
});
test('scoreComercial: nicho alta aderencia + tudo valido bate 100', () => {
const score = scoreComercial({
whatsapp: '557193335451',
cnpj: '57557263000113',
website: 'https://premiumexpress.com.br',
email: 'contato@premiumexpress.com.br',
affinity: 'alta'
});
assert.equal(score, 100);
});
test('scoreComercial: nicho baixa aderencia sem website/email/whatsapp/cnpj fica so com os pontos do nicho', () => {
const score = scoreComercial({ whatsapp: '', cnpj: '', website: '', email: '', affinity: 'baixa' });
assert.equal(score, 20);
});
test('scoreGeral combina 60% comercial + 40% qualidade', () => {
assert.equal(scoreGeral(100, 100), 100);
assert.equal(scoreGeral(50, 50), 50);
assert.equal(scoreGeral(0, 100), 60);
assert.equal(scoreGeral(100, 0), 40);
});
test('classificarScoreGeral aplica as 5 faixas', () => {
assert.equal(classificarScoreGeral(95).id, 'excelente');
assert.equal(classificarScoreGeral(80).id, 'bom');
assert.equal(classificarScoreGeral(60).id, 'medio');
assert.equal(classificarScoreGeral(40).id, 'baixo');
assert.equal(classificarScoreGeral(10).id, 'muito_baixo');
});
test('dedupKey segue precedencia cnpj > phone > empresa+cidade', () => {
assert.equal(
dedupKey({ cnpj: '57557263000113', whatsapp: '557193335451', empresa: 'X', cidade: 'Y' }),
'cnpj:57557263000113'
);
assert.equal(
dedupKey({ cnpj: '123', whatsapp: '557193335451', empresa: 'X', cidade: 'Y' }),
'phone:557193335451'
);
assert.equal(
dedupKey({ cnpj: '', whatsapp: '', empresa: 'Premium Express', cidade: 'Salvador' }),
'name:premium express:salvador'
);
});
test('extractDdd retira o ddd do numero normalizado', () => {
assert.equal(extractDdd('557193335451'), '71');
assert.equal(extractDdd('999'), '');
});
test('segmentLabel formata igual ao segmento_legivel legado', () => {
assert.equal(segmentLabel('lojas_de_calcados'), 'Lojas De Calcados');
assert.equal(segmentLabel('saloes_de_beleza'), 'Saloes De Beleza');
});