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

70 lines
2.5 KiB
JavaScript

import test from 'node:test';
import assert from 'node:assert/strict';
import { openDb } from '../src/db.mjs';
import { runCapture, createCaptureRun } from '../src/capture/runner.mjs';
const SEGMENTS = [
{ name: 'mercados_de_bairro', label: 'Mercados De Bairro', interest: 'ERP / sistema de gestao', queries: ['mercado'], cnaeCodes: ['4711302'], overpassTags: [], pains: ['estoque'] },
{ name: 'clinicas_medicas', label: 'Clinicas Medicas', interest: 'gestao de TI', queries: ['clinica'], cnaeCodes: ['8630501'], overpassTags: [], pains: ['agenda'] },
{ name: 'restaurantes', label: 'Restaurantes', interest: 'autoatendimento WhatsApp', queries: ['restaurante'], cnaeCodes: ['5611201'], overpassTags: [], pains: ['pedidos'] }
];
function captureParams() {
return {
sources: ['mock'],
uf: 'BA',
cities: ['Santo Antonio de Jesus'],
segments: SEGMENTS,
limits: { maxPerQuery: 10, queryLimit: 0 }
};
}
test('runCapture insere leads do mock e deduplica no rerun', async () => {
const db = openDb(':memory:');
const runId = createCaptureRun(db, {});
const first = await runCapture({ db, runId, params: captureParams() });
assert.equal(first.raw, 3);
assert.equal(first.new, 3);
assert.equal(first.dup, 0);
assert.equal(first.status, 'done');
const run = db.prepare('SELECT * FROM capture_runs WHERE id = ?').get(runId);
assert.equal(run.status, 'done');
assert.equal(run.new_count, 3);
assert.ok(run.finished_at);
const lead = db.prepare("SELECT * FROM leads WHERE segmento = 'restaurantes'").get();
assert.equal(lead.uf, 'BA');
assert.equal(lead.cidade, 'Santo Antonio de Jesus');
assert.equal(lead.origem, 'mock');
assert.equal(lead.telefone_valido, 1);
assert.ok(lead.dedup_key.startsWith('phone:'));
assert.equal(lead.capture_run_id, runId);
// rerun: tudo duplicado
const runId2 = createCaptureRun(db, {});
const second = await runCapture({ db, runId: runId2, params: captureParams() });
assert.equal(second.new, 0);
assert.equal(second.dup, 3);
assert.equal(db.prepare('SELECT COUNT(*) AS t FROM leads').get().t, 3);
db.close();
});
test('runCapture respeita cancelamento', async () => {
const db = openDb(':memory:');
const runId = createCaptureRun(db, {});
const result = await runCapture({
db,
runId,
params: captureParams(),
isCancelled: () => true
});
assert.equal(result.status, 'cancelled');
assert.equal(db.prepare('SELECT status FROM capture_runs WHERE id = ?').get(runId).status, 'cancelled');
db.close();
});