From bd79de2837edbf927f4fbd9c0e06e11a8a817edf Mon Sep 17 00:00:00 2001 From: Marcello Costa Date: Thu, 25 Oct 2018 16:07:24 -0300 Subject: [PATCH] formatters: change diff date calculation change the date constructors to stop using the default new Date and instead use the moment (tz) constructor --- .travis.yml | 3 + banks/bradesco/index.js | 3 +- banks/santander/index.js | 3 +- lib/formatters.js | 5 +- package.json | 1 + test/integration/bradesco/boleto.spec.js | 106 +++++++++++++++++++--- test/integration/santander/boleto.spec.js | 6 +- 7 files changed, 110 insertions(+), 17 deletions(-) diff --git a/.travis.yml b/.travis.yml index d80c0a5..4c0b90f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,6 +5,9 @@ node_js: language: node_js +env: + - TZ=America/Sao_Paulo + cache: directories: - node_modules diff --git a/banks/bradesco/index.js b/banks/bradesco/index.js index 5eefb78..9dc870f 100644 --- a/banks/bradesco/index.js +++ b/banks/bradesco/index.js @@ -1,3 +1,4 @@ +const moment = require('moment') var formatters = require('../../lib/formatters') var ediHelper = require('../../lib/edi-helper') var helper = require('./helper') @@ -16,7 +17,7 @@ exports.barcodeData = function (boleto) { var codigoBanco = this.options.codigo var numMoeda = '9' - var fatorVencimento = formatters.fatorVencimento(boleto['data_vencimento']) + var fatorVencimento = formatters.fatorVencimento(moment(boleto['data_vencimento']).utc().format()) var agencia = formatters.addTrailingZeros(boleto['agencia'], 4) diff --git a/banks/santander/index.js b/banks/santander/index.js index 5f70f89..59c68af 100644 --- a/banks/santander/index.js +++ b/banks/santander/index.js @@ -1,3 +1,4 @@ +const moment = require('moment') var formatters = require('../../lib/formatters') var ediHelper = require('../../lib/edi-helper') var helper = require('./helper') @@ -18,7 +19,7 @@ exports.barcodeData = function (boleto) { var fixo = '9' // Numero fixo para a posição 05-05 var ios = '0' // IOS - somente para Seguradoras (Se 7% informar 7, limitado 9%) - demais clientes usar 0 - var fatorVencimento = formatters.fatorVencimento(boleto['data_vencimento']) + var fatorVencimento = formatters.fatorVencimento(moment(boleto['data_vencimento']).utc().format()) var valor = formatters.addTrailingZeros(boleto['valor'], 10) var carteira = boleto['carteira'] diff --git a/lib/formatters.js b/lib/formatters.js index b78a9ff..f7fd8d2 100644 --- a/lib/formatters.js +++ b/lib/formatters.js @@ -1,4 +1,5 @@ const escapeXML = require('ejs').escapeXML +const moment = require('moment') exports.capitalize = function (string) { return string.charAt(0).toUpperCase() + string.slice(1) @@ -80,7 +81,9 @@ exports.mod10 = function (num) { } exports.fatorVencimento = function (date) { - return exports.addTrailingZeros(Math.floor((date.getTime() - new Date(1997, 9, 7).getTime()) / (24 * 3600 * 1000)), 4) + const parsedDate = moment(date).utc().format('YYYY-MM-DD') + const startDate = moment('1997-10-07').utc().format("YYYY-MM-DD") + return exports.addTrailingZeros(moment(parsedDate).diff(startDate, 'days'), 4) } exports.dateFromEdiDate = function (ediDate) { diff --git a/package.json b/package.json index 2fe20f8..7d9d1df 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "eslint-plugin-promise": "^3.3.0", "eslint-plugin-standard": "^2.0.1", "mocha": "^3.2.0", + "moment": "https://github.com/pagarme/moment/archive/0.0.2.tar.gz", "ramda": "^0.23.0" }, "author": "Pedro Franceschi", diff --git a/test/integration/bradesco/boleto.spec.js b/test/integration/bradesco/boleto.spec.js index 16fe131..3bcd55f 100644 --- a/test/integration/bradesco/boleto.spec.js +++ b/test/integration/bradesco/boleto.spec.js @@ -1,15 +1,15 @@ const Boleto = require('../../../index').Boleto - +const moment = require('moment') const expect = require('chai').expect describe('Bradesco Boleto', () => { describe('when creating a valid boleto', () => { - let boleto + let boletos = [] before(() => { - boleto = new Boleto({ + boletos.push(new Boleto({ 'banco': 'bradesco', - 'data_emissao': new Date('2017-01-01T00:00:00Z'), - 'data_vencimento': new Date(2017, 0, 5), + 'data_emissao': moment('2017-01-01T00:00:00Z').valueOf(), + 'data_vencimento': moment('2017-01-05T00:00:00Z').valueOf(), 'valor': 1500, 'nosso_numero': '6', 'numero_documento': '1', @@ -21,24 +21,108 @@ describe('Bradesco Boleto', () => { 'pagador': 'Nome do pagador\nCPF: 000.000.000-00', 'local_de_pagamento': 'PAGÁVEL EM QUALQUER BANCO ATÉ O VENCIMENTO.', 'instrucoes': 'Sr. Caixa, aceitar o pagamento e não cobrar juros após o vencimento.' - }) + })) + }) + + before(() => { + boletos.push(new Boleto({ + 'banco': 'bradesco', + 'data_emissao': moment('2017-01-01T00:00:00Z').toDate(), + 'data_vencimento': moment('2017-01-05T01:00:00Z').toDate(), + 'valor': 1500, + 'nosso_numero': '6', + 'numero_documento': '1', + 'cedente': 'Pagar.me Pagamentos S/A', + 'cedente_cnpj': '18727053000174', + 'agencia': '1229', + 'codigo_cedente': '469', + 'carteira': '25', + 'pagador': 'Nome do pagador\nCPF: 000.000.000-00', + 'local_de_pagamento': 'PAGÁVEL EM QUALQUER BANCO ATÉ O VENCIMENTO.', + 'instrucoes': 'Sr. Caixa, aceitar o pagamento e não cobrar juros após o vencimento.' + })) + }) + + before(() => { + boletos.push(new Boleto({ + 'banco': 'bradesco', + 'data_emissao': moment('2017-01-01T00:00:00Z').format(), + 'data_vencimento': moment('2017-01-05T02:00:00Z').format(), + 'valor': 1500, + 'nosso_numero': '6', + 'numero_documento': '1', + 'cedente': 'Pagar.me Pagamentos S/A', + 'cedente_cnpj': '18727053000174', + 'agencia': '1229', + 'codigo_cedente': '469', + 'carteira': '25', + 'pagador': 'Nome do pagador\nCPF: 000.000.000-00', + 'local_de_pagamento': 'PAGÁVEL EM QUALQUER BANCO ATÉ O VENCIMENTO.', + 'instrucoes': 'Sr. Caixa, aceitar o pagamento e não cobrar juros após o vencimento.' + })) + }) + + before(() => { + boletos.push(new Boleto({ + 'banco': 'bradesco', + 'data_emissao': new Date('2017-01-01T23:00:00Z').getTime(), + 'data_vencimento': new Date('2017-01-05T23:00:00Z').getTime(), + 'valor': 1500, + 'nosso_numero': '6', + 'numero_documento': '1', + 'cedente': 'Pagar.me Pagamentos S/A', + 'cedente_cnpj': '18727053000174', + 'agencia': '1229', + 'codigo_cedente': '469', + 'carteira': '25', + 'pagador': 'Nome do pagador\nCPF: 000.000.000-00', + 'local_de_pagamento': 'PAGÁVEL EM QUALQUER BANCO ATÉ O VENCIMENTO.', + 'instrucoes': 'Sr. Caixa, aceitar o pagamento e não cobrar juros após o vencimento.' + })) + }) + + before(() => { + boletos.push(new Boleto({ + 'banco': 'bradesco', + 'data_emissao': new Date('2017-01-01T00:00:00Z').getTime(), + 'data_vencimento': new Date('2017-01-05T00:00:00Z').getTime(), + 'valor': 1500, + 'nosso_numero': '6', + 'numero_documento': '1', + 'cedente': 'Pagar.me Pagamentos S/A', + 'cedente_cnpj': '18727053000174', + 'agencia': '1229', + 'codigo_cedente': '469', + 'carteira': '25', + 'pagador': 'Nome do pagador\nCPF: 000.000.000-00', + 'local_de_pagamento': 'PAGÁVEL EM QUALQUER BANCO ATÉ O VENCIMENTO.', + 'instrucoes': 'Sr. Caixa, aceitar o pagamento e não cobrar juros após o vencimento.' + })) }) it('contains correct bank options', () => { - expect(boleto.bank.options).to.have.property('logoURL').that.contains('bradesco.jpg') - expect(boleto.bank.options).to.have.property('codigo', '237') + boletos.forEach(boleto => { + expect(boleto.bank.options).to.have.property('logoURL').that.contains('bradesco.jpg') + expect(boleto.bank.options).to.have.property('codigo', '237') + }); }) it('contains correct codigo_banco', () => { - expect(boleto.codigo_banco).to.equal('237-2') + boletos.forEach(boleto => { + expect(boleto.codigo_banco).to.equal('237-2') + }) }) it('contains correct barcode_data', () => { - expect(boleto.barcode_data).to.equal('23794703000000015001229250000000000600004690') + boletos.forEach(boleto => { + expect(boleto.barcode_data).to.equal('23794703000000015001229250000000000600004690') + }) }) it('contains correct linha_digitavel', () => { - expect(boleto.linha_digitavel).to.equal('23791.22928 50000.000005 06000.046901 4 70300000001500') + boletos.forEach(boleto => { + expect(boleto.linha_digitavel).to.equal('23791.22928 50000.000005 06000.046901 4 70300000001500') + }) }) }) }) diff --git a/test/integration/santander/boleto.spec.js b/test/integration/santander/boleto.spec.js index 5514640..e687411 100644 --- a/test/integration/santander/boleto.spec.js +++ b/test/integration/santander/boleto.spec.js @@ -1,5 +1,5 @@ const Boleto = require('../../../index').Boleto - +const moment = require('moment') const expect = require('chai').expect describe('Santander Boleto', () => { @@ -8,8 +8,8 @@ describe('Santander Boleto', () => { before(() => { boleto = new Boleto({ 'banco': 'santander', - 'data_emissao': new Date('2017-01-01T00:00:00Z'), - 'data_vencimento': new Date(2017, 0, 5), + 'data_emissao': moment('2017-01-01T00:00:00Z'), + 'data_vencimento': moment('2017-01-05'), 'valor': 1500, 'nosso_numero': '6', 'numero_documento': '1',