118 lines
4.0 KiB
JavaScript
118 lines
4.0 KiB
JavaScript
const assert = require('node:assert/strict');
|
|
const test = require('node:test');
|
|
|
|
const { formatOrderRow, normalizeOrderDate, normalizeOrderPayload } = require('../mappers/orderMapper');
|
|
|
|
test('normalizeOrderDate accepts Brazilian display dates', () => {
|
|
assert.equal(normalizeOrderDate('28/05/2026'), '2026-05-28');
|
|
assert.equal(normalizeOrderDate('28-05-2026'), '2026-05-28');
|
|
});
|
|
|
|
test('normalizeOrderDate accepts ISO-like dates', () => {
|
|
assert.equal(normalizeOrderDate('2026-05-28'), '2026-05-28');
|
|
assert.equal(normalizeOrderDate('2026/05/28 10:30:00'), '2026-05-28');
|
|
});
|
|
|
|
test('normalizeOrderDate rejects invalid dates', () => {
|
|
assert.equal(normalizeOrderDate(''), null);
|
|
assert.equal(normalizeOrderDate('not a date'), null);
|
|
assert.equal(normalizeOrderDate('31/02/2026'), null);
|
|
});
|
|
|
|
test('normalizeOrderPayload includes normalized date without changing display date', () => {
|
|
const payload = normalizeOrderPayload({
|
|
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'
|
|
});
|
|
|
|
assert.equal(payload[1], '28/05/2026');
|
|
assert.equal(payload[2], '2026-05-28');
|
|
});
|
|
|
|
test('normalizeOrderPayload maps Tiny ERP metadata aliases', () => {
|
|
const payload = normalizeOrderPayload({
|
|
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',
|
|
Nome_Fantasia: 'Cliente Fantasia',
|
|
ID_Vendedor: 123,
|
|
Nome_Vendedor: 'Maria',
|
|
Nome_Ecommerce: 'Mercado Livre',
|
|
Canal_Venda: 'Online',
|
|
Numero_Ecommerce: 'EC-987'
|
|
});
|
|
|
|
assert.equal(payload[10], 'Cliente Fantasia');
|
|
assert.equal(payload[11], '123');
|
|
assert.equal(payload[12], 'Maria');
|
|
assert.equal(payload[13], 'Mercado Livre');
|
|
assert.equal(payload[14], 'Online');
|
|
assert.equal(payload[15], 'EC-987');
|
|
});
|
|
|
|
test('normalizeOrderPayload maps lower-case metadata names', () => {
|
|
const payload = normalizeOrderPayload({
|
|
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',
|
|
cliente_nome_fantasia: 'Fantasia Lower',
|
|
id_vendedor: 'VEN-7',
|
|
nome_vendedor: 'Joao',
|
|
marketplace: 'Shopee',
|
|
canal_venda: 'Marketplace',
|
|
numero_ecommerce: '100200'
|
|
});
|
|
|
|
assert.equal(payload[10], 'Fantasia Lower');
|
|
assert.equal(payload[11], 'VEN-7');
|
|
assert.equal(payload[12], 'Joao');
|
|
assert.equal(payload[13], 'Shopee');
|
|
assert.equal(payload[14], 'Marketplace');
|
|
assert.equal(payload[15], '100200');
|
|
});
|
|
|
|
test('formatOrderRow returns Tiny ERP metadata fields', () => {
|
|
const row = formatOrderRow({
|
|
cliente_nome: 'Cliente Teste',
|
|
data_pedido: '28/05/2026',
|
|
valor_pedido: '120.50',
|
|
produto_id: 'SKU-1',
|
|
produto_descricao: 'Produto',
|
|
quantidade: 2,
|
|
valor_unitario: '60.25',
|
|
created_at: '2026-05-28T12:00:00.000Z',
|
|
pedido_id: 'ORDER-1',
|
|
cliente_fone: '(16) 99999-9999',
|
|
cliente_nome_fantasia: 'Cliente Fantasia',
|
|
id_vendedor: '123',
|
|
nome_vendedor: 'Maria',
|
|
marketplace: 'Mercado Livre',
|
|
canal_venda: 'Online',
|
|
numero_ecommerce: 'EC-987'
|
|
});
|
|
|
|
assert.equal(row.cliente_nome_fantasia, 'Cliente Fantasia');
|
|
assert.equal(row.id_vendedor, '123');
|
|
assert.equal(row.nome_vendedor, 'Maria');
|
|
assert.equal(row.marketplace, 'Mercado Livre');
|
|
assert.equal(row.canal_venda, 'Online');
|
|
assert.equal(row.numero_ecommerce, 'EC-987');
|
|
});
|