Files
COMERCIAL-GTI/tests/lead-engine.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

158 lines
5.1 KiB
JavaScript

import assert from 'node:assert/strict';
import { describe, it } from 'node:test';
import {
buildNextQuestion,
detectService,
normalizePhone,
processLead
} from '../src/lead-engine.mjs';
describe('lead engine', () => {
it('normaliza telefone brasileiro para formato internacional', () => {
assert.equal(normalizePhone('(75) 99999-1111'), '5575999991111');
assert.equal(normalizePhone('+55 75 99999-1111'), '5575999991111');
});
it('detecta servico por texto livre', () => {
assert.equal(detectService('quero trocar meu sistema de estoque'), 'erp');
assert.equal(detectService('preciso de suporte em servidor e backup'), 'ti');
assert.equal(detectService('automatizar atendimento no WhatsApp'), 'whatsapp');
});
it('prioriza lead com WhatsApp para tratamento manual', () => {
const result = processLead({
source: 'site',
contact: { name: 'Carlos Souza', phone: '(75) 99999-1111', email: 'carlos@mercado.com' },
company: {
name: 'Mercado Sao Joao',
city: 'Santo Antonio de Jesus',
state: 'BA',
segment: 'mercado',
employees: 18
},
interest: 'ERP',
current_system: 'uso outro sistema, mas quero trocar',
pains: ['estoque', 'financeiro', 'emissao fiscal'],
urgency: 'alta',
consent: true
});
assert.equal(result.lead.service, 'erp');
assert.equal(result.priority.priority, 'com_whatsapp');
assert.equal(result.priority.hasWhatsapp, true);
assert.ok(result.whatsapp.internal.message.includes('Novo lead captado - COM WHATSAPP'));
assert.equal(result.nextAction, 'tratamento_manual');
});
it('mantem lead de TI com dados parciais como captado', () => {
const result = processLead({
origem: 'indicacao',
nome: 'Ana Lima',
telefone: '75988887777',
empresa: 'Clinica Vida',
cidade: 'Santo Antonio de Jesus',
uf: 'BA',
segmento: 'clinica',
servico: 'gestao de TI',
computadores: 8,
dor: 'backup; suporte tecnico',
urgencia: 'media'
});
assert.equal(result.lead.service, 'ti');
assert.equal(result.priority.priority, 'com_whatsapp');
assert.ok(result.crmRecord.whatsapp.startsWith('55'));
});
it('mantem lead sem WhatsApp abaixo na prioridade', () => {
const result = processLead({
name: 'Lead Sem Servico',
message: 'quero mais informacoes'
});
assert.equal(result.lead.service, 'indefinido');
assert.equal(result.priority.priority, 'sem_whatsapp');
assert.equal(result.priority.hasWhatsapp, false);
assert.ok(buildNextQuestion(result.lead).includes('1 - Sistema ERP'));
});
it('reconhece segmentos compostos da prospeccao automatica como segmento-alvo', () => {
const compostos = processLead({
name: 'Lead Prospeccao',
whatsapp: '75999993333',
company_name: 'Restaurante Sabor da Terra',
city: 'Amargosa',
state: 'BA',
segment: 'restaurante_pizzaria'
});
assert.equal(compostos.lead.isTargetSegment, true);
const materialConstrucao = processLead({
name: 'Lead Prospeccao',
whatsapp: '75999994444',
company_name: 'Deposito Central',
segment: 'material_construcao_cimento_blocos'
});
assert.equal(materialConstrucao.lead.isTargetSegment, true);
const clinica = processLead({
name: 'Lead Prospeccao',
whatsapp: '75999995555',
company_name: 'Clinica Odonto Vida',
segment: 'clinica_laboratorio_odonto_otica'
});
assert.equal(clinica.lead.isTargetSegment, true);
});
it('nao marca como segmento-alvo um segmento fora da lista', () => {
const result = processLead({
name: 'Lead Prospeccao',
whatsapp: '75999996666',
company_name: 'Posto Boa Vista',
segment: 'posto_combustivel'
});
assert.equal(result.lead.isTargetSegment, false);
});
it('reconhece os novos nichos (beleza, celulares, transportadora) como segmento-alvo', () => {
const beleza = processLead({
name: 'Lead Prospeccao',
whatsapp: '75999997777',
company_name: 'Studio Beleza Bahia',
segment: 'beleza_estetica_barbearia'
});
assert.equal(beleza.lead.isTargetSegment, true);
const celulares = processLead({
name: 'Lead Prospeccao',
whatsapp: '75999998888',
company_name: 'Cell Center',
segment: 'celulares_eletronicos_assistencia'
});
assert.equal(celulares.lead.isTargetSegment, true);
const transportadora = processLead({
name: 'Lead Prospeccao',
whatsapp: '75999999999',
company_name: 'Transportadora Recôncavo',
segment: 'transportadora_logistica'
});
assert.equal(transportadora.lead.isTargetSegment, true);
});
it('direciona lead de WhatsApp para pergunta de volume quando a dor ja existe', () => {
const result = processLead({
name: 'Mariana',
whatsapp: '75999992222',
company_name: 'Restaurante Sabor',
city: 'Santo Antonio de Jesus',
state: 'BA',
interest: 'autoatendimento WhatsApp',
pains: ['pedidos', 'triagem']
});
assert.equal(result.lead.service, 'whatsapp');
assert.ok(buildNextQuestion(result.lead).includes('quantas mensagens'));
});
});