Files
graphs/backend/test/ordersService.test.js
2026-06-22 15:02:38 -03:00

84 lines
2.6 KiB
JavaScript

const assert = require('node:assert/strict');
const test = require('node:test');
test('upsertOrders persists Tiny ERP metadata columns', async () => {
const queries = [];
const client = {
query: async (sql, params) => {
queries.push({ sql, params });
return { rows: [] };
},
release: () => {
queries.push({ sql: 'RELEASE' });
}
};
const dbPath = require.resolve('../db');
const servicePath = require.resolve('../services/ordersService');
const originalDbCache = require.cache[dbPath];
const originalServiceCache = require.cache[servicePath];
delete require.cache[servicePath];
require.cache[dbPath] = {
id: dbPath,
filename: dbPath,
loaded: true,
exports: {
pool: {
connect: async () => client
}
}
};
try {
const { upsertOrders } = require('../services/ordersService');
await upsertOrders([{
Nome_Cliente: 'Cliente Teste',
Data_Pedido: '28/05/2026',
Valor_Pedido: '120.50',
ID_Produto: 'SKU-1',
Descricao_Produto: 'Produto',
Quantidade: '2',
Valor_Unitario: '60.25',
ID_Pedido: 'ORDER-1',
Fone_Cliente: '(16) 99999-9999',
cliente_nome_fantasia: 'Cliente Fantasia',
id_vendedor: 'VEN-1',
nome_vendedor: 'Maria',
marketplace: 'Mercado Livre',
canal_venda: 'Online',
numero_ecommerce: 'EC-987'
}]);
} finally {
delete require.cache[servicePath];
if (originalServiceCache) {
require.cache[servicePath] = originalServiceCache;
}
if (originalDbCache) {
require.cache[dbPath] = originalDbCache;
} else {
delete require.cache[dbPath];
}
}
const insert = queries.find(query => query.sql.includes('INSERT INTO orders'));
assert.ok(insert);
assert.match(insert.sql, /cliente_nome_fantasia/);
assert.match(insert.sql, /id_vendedor/);
assert.match(insert.sql, /nome_vendedor/);
assert.match(insert.sql, /marketplace/);
assert.match(insert.sql, /canal_venda/);
assert.match(insert.sql, /numero_ecommerce/);
assert.match(insert.sql, /cliente_nome_fantasia = EXCLUDED\.cliente_nome_fantasia/);
assert.equal(insert.params.length, 16);
assert.deepEqual(insert.params.slice(10), [
'Cliente Fantasia',
'VEN-1',
'Maria',
'Mercado Livre',
'Online',
'EC-987'
]);
});