const test = require('node:test'); const assert = require('node:assert/strict'); const { mapProductionOrder, normalizeStatus, parseDate, parseNumber } = require('../src/mapper'); const { formatTinyDate } = require('../src/tinyClient'); test('normalizes accepted production order statuses', () => { assert.equal(normalizeStatus('em_aberto'), 'open'); assert.equal(normalizeStatus('Em aberto'), 'open'); assert.equal(normalizeStatus('Aberta'), 'open'); assert.equal(normalizeStatus('andamento'), 'in_progress'); assert.equal(normalizeStatus('Em andamento'), 'in_progress'); assert.equal(normalizeStatus('Finalizada'), 'finished'); assert.equal(normalizeStatus('finalizado'), 'finished'); assert.equal(normalizeStatus('Cancelada'), 'canceled'); assert.equal(normalizeStatus('cancelled'), 'canceled'); assert.equal(normalizeStatus('status desconhecido'), 'open'); }); test('parses Tiny date and numeric variants', () => { assert.equal(parseDate('02/07/2026'), '2026-07-02'); assert.equal(parseDate('2026-07-02'), '2026-07-02'); assert.equal(parseNumber('1.234,56'), 1234.56); }); test('formats request dates for Tiny without changing env date semantics', () => { assert.equal(formatTinyDate('2026-07-02', 'DD/MM/YYYY'), '02/07/2026'); assert.equal(formatTinyDate('2026-07-02', 'YYYY-MM-DD'), '2026-07-02'); assert.equal(formatTinyDate(null, 'DD/MM/YYYY'), null); }); test('maps Tiny production order payload defensively', () => { const mapped = mapProductionOrder({ ordem_producao: { id: 123, numero: 'OP-77', situacao: 'Em andamento', data_emissao: '02/07/2026', data_prevista: '2026-07-10', produto: { codigo: 'SKU-1', descricao: 'Produto teste', unidade: 'UN' }, quantidade: '2,5', pedido_venda: 'PV-9', marcadores: [{ marcador: { nome: 'Urgente', cor: '#ff0000' } }] } }); assert.equal(mapped.order.tinyId, '123'); assert.equal(mapped.order.number, 'OP-77'); assert.equal(mapped.order.status, 'in_progress'); assert.equal(mapped.order.statusLabel, 'Em andamento'); assert.equal(mapped.order.orderReference, 'PV-9'); assert.equal(mapped.order.issueDate, '2026-07-02'); assert.equal(mapped.order.expectedDate, '2026-07-10'); assert.equal(mapped.order.productSku, 'SKU-1'); assert.equal(mapped.order.productDescription, 'Produto teste'); assert.equal(mapped.order.quantity, 2.5); assert.deepEqual(mapped.markers, [{ label: 'Urgente', color: '#ff0000' }]); });