br_boleto 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2962941333bce0a4a32fa0f19d3ad7fd32258cbb
4
- data.tar.gz: f8cd4c4330311b2706ef44bfdcf6d2ed4094b5d4
3
+ metadata.gz: c23f145793fa7683757f64d8822bd162803073a8
4
+ data.tar.gz: 57ac3e5eafd318cff087adb25108d8e52e27274c
5
5
  SHA512:
6
- metadata.gz: 5dc034b5393fceb1e351c935e131300aca0ef79e91049e5251d0a0f18095435a1b4ddf89d22445714e115c762d076f7ccc0ea6b7251aa047d38f784c27f5177b
7
- data.tar.gz: bc45af6e51932b1d7e93deaa60d397f4dc9715f9b60569bfb3a74a4700c2f27ff32b8efbfb4da34f291fc641e27c11faebdff183d49c62701e4c09fadd8951b9
6
+ metadata.gz: 3d083be674718a0d071a4ebde9b03f47d4c5618e75472f860f031a75a30b8ab5203240e8ddbdcc30654dab82d1c6f4754c7c7c904d9113057e630a66ff8373e0
7
+ data.tar.gz: e61cd111a5cf08b05d6d798490ec0a42ea5fcb84c463a6b9a68dd81ad105053bca670af57ca6e3b990693d796a2f2189a38e596eca1e43b2930b59cef1e33428
@@ -1,11 +1,11 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- br_boleto (1.0.1)
4
+ br_boleto (1.1.0)
5
5
  activemodel (~> 4.2)
6
6
  activesupport (~> 4.2)
7
7
  rake (>= 0.8.7)
8
- unidecoder (>= 1.1.2)
8
+ unidecoder (~> 1.1)
9
9
 
10
10
  GEM
11
11
  remote: http://rubygems.org/
@@ -16,7 +16,7 @@ module BrBoleto
16
16
  # Alguns bancos, dependendo do banco e da carteira, precisam desse campo preenchido.
17
17
  # Em compensação, outros bancos (a minoria) não fazem utilização desse campo.
18
18
  #
19
- attr_accessor :codigo_cedente
19
+ attr_accessor :codigo_cedente # com DV
20
20
 
21
21
  # Código do beneficiário e codigo cedente é a mesma coisa
22
22
  # Por isso foi criado um alias para que cada um utilize a nomenclatura que preferir.
@@ -39,11 +39,11 @@ module BrBoleto
39
39
  segmento_p << segmento_p_posicao_101_a_105 # agencia cobradora 5
40
40
  segmento_p << segmento_p_posicao_106_a_106 # dv agencia cobradora 1
41
41
  segmento_p << segmento_p_posicao_107_a_108 # especie do titulo 2
42
- segmento_p << segmento_p_posicao_109_a_109 # aceite 1
42
+ segmento_p << segmento_p_posicao_109_a_109 # aceite 1
43
43
  segmento_p << segmento_p_posicao_110_a_117(pagamento) # data de emissao titulo 8
44
- segmento_p << segmento_p_posicao_118_a_118 # cod. do juros 1 *
45
- segmento_p << segmento_p_posicao_119_a_126 # data juros 8 *
46
- segmento_p << segmento_p_posicao_127_a_141 # valor juros 15 *
44
+ segmento_p << segmento_p_posicao_118_a_118(pagamento) # cod. do juros 1 *
45
+ segmento_p << segmento_p_posicao_119_a_126(pagamento) # data juros 8 *
46
+ segmento_p << segmento_p_posicao_127_a_141(pagamento) # valor juros 15 *
47
47
  segmento_p << segmento_p_posicao_142_a_142(pagamento) # cod. do desconto 1
48
48
  segmento_p << segmento_p_posicao_143_a_150(pagamento) # data desconto 8
49
49
  segmento_p << segmento_p_posicao_151_a_165(pagamento) # valor desconto 15
@@ -232,23 +232,25 @@ module BrBoleto
232
232
 
233
233
  # Código do Juros de Mora
234
234
  # 1 posição
235
+ # Padrão FEBRABAN = (1 = Valor fixo e 2 = Percentual, 3 = isento)
235
236
  #
236
- def segmento_p_posicao_118_a_118
237
- '0'
237
+ def segmento_p_posicao_118_a_118(pagamento)
238
+ cod = "#{pagamento.codigo_juros}".adjust_size_to(1, '3')
239
+ cod.in?(['1','2','3']) ? cod : '3'
238
240
  end
239
241
 
240
242
  # Data do Juros de Mora
241
243
  # 8 posições
242
244
  #
243
- def segmento_p_posicao_119_a_126
244
- ''.rjust(8, '0')
245
+ def segmento_p_posicao_119_a_126(pagamento)
246
+ "#{pagamento.data_juros_formatado('%d%m%Y')}".adjust_size_to(8, '0')
245
247
  end
246
248
 
247
249
  # Juros de Mora por Dia/Taxa
248
250
  # 15 posições
249
251
  #
250
- def segmento_p_posicao_127_a_141
251
- ''.rjust(15, '0')
252
+ def segmento_p_posicao_127_a_141(pagamento)
253
+ pagamento.valor_juros_formatado(15)
252
254
  end
253
255
 
254
256
  # Código do Desconto 1
@@ -142,11 +142,13 @@ module BrBoleto
142
142
  pagamento.desconto_3_valor_formatado(15)
143
143
  end
144
144
 
145
- # Codigo da multa - (0 = isento, 1 = Valor fixo e 2 = Percentual)
145
+ # Codigo da multa
146
146
  # 1 posição
147
+ # Padrão FEBRABAN = (1 = Valor fixo e 2 = Percentual, 3 = isento)
147
148
  #
148
149
  def segmento_r_posicao_066_a_066(pagamento)
149
- "#{pagamento.codigo_multa}".adjust_size_to(1, '0')
150
+ cod = "#{pagamento.codigo_multa}".adjust_size_to(1, '3')
151
+ cod.in?(['1','2','3']) ? cod : '3'
150
152
  end
151
153
 
152
154
  # Data da multa
@@ -240,6 +240,26 @@ module BrBoleto
240
240
  ''.rjust(117, ' ')
241
241
  end
242
242
 
243
+ # Codigo da multa
244
+ # Padrão pela FEBRABAN = (1 = Valor fixo e 2 = Percentual, 3 = isento)
245
+ # Padrão do SICOOB = (1 = Valor fixo e 2 = Percentual, 0 = isento)
246
+ # 1 posição
247
+ #
248
+ def segmento_r_posicao_066_a_066(pagamento)
249
+ cod = "#{pagamento.codigo_multa}".adjust_size_to(1, '0')
250
+ cod.in?(['1','2']) ? cod : '0'
251
+ end
252
+
253
+ # Codigo do Juros
254
+ # Padrão pela FEBRABAN = (1 = Valor fixo e 2 = Percentual, 3 = isento)
255
+ # Padrão do SICOOB = (1 = Valor fixo e 2 = Percentual, 0 = isento)
256
+ # 1 posição
257
+ #
258
+ def segmento_p_posicao_118_a_118(pagamento)
259
+ cod = "#{pagamento.codigo_juros}".adjust_size_to(1, '0')
260
+ cod.in?(['1','2']) ? cod : '0'
261
+ end
262
+
243
263
  end
244
264
  end
245
265
  end
@@ -86,8 +86,21 @@ module BrBoleto
86
86
  attr_accessor :desconto_3_codigo, :desconto_3_data, :desconto_3_valor
87
87
 
88
88
  # <b>OPCIONAL</b>: Informações para multa
89
+ # Código da multa pode ser:
90
+ # - '1' Valor por Dia
91
+ # - '2' Taxa Mensal
92
+ # - '3' Isento
93
+ # - E Ainda alguns bancos como o SICOOB não conseguem seguir o padrão e usam o cód '0' para Isento
89
94
  attr_accessor :codigo_multa, :data_multa, :valor_multa
90
95
 
96
+ # <b>OPCIONAL</b>: Informações para Juros
97
+ # Código do juros pode ser:
98
+ # - '1' Valor por Dia
99
+ # - '2' Taxa Mensal
100
+ # - '3' Isento
101
+ # - E Ainda alguns bancos como o SICOOB não conseguem seguir o padrão e usam o cód '0' para Isento
102
+ attr_accessor :codigo_juros, :data_juros, :valor_juros
103
+
91
104
  def cep_sacado
92
105
  "#{@cep_sacado}".gsub(/[^0-9]/, "")
93
106
  end
@@ -116,8 +129,10 @@ module BrBoleto
116
129
  desconto_2_valor: 0.0,
117
130
  desconto_3_codigo: '0',
118
131
  desconto_3_valor: 0.0,
119
- codigo_multa: '0', # Isento
132
+ codigo_multa: '3', # Isento
133
+ codigo_juros: '3', # Isento
120
134
  valor_multa: 0.0,
135
+ valor_juros: 0.0,
121
136
  tipo_impressao: '1'
122
137
  }
123
138
  end
@@ -126,24 +141,32 @@ module BrBoleto
126
141
  #
127
142
  # @return [String]
128
143
  #
129
- def data_desconto_formatado(formato = '%d%m%y')
144
+ def data_desconto_formatado(formato = '%d%m%Y')
130
145
  formata_data(data_desconto, formato)
131
146
  end
132
- def desconto_2_data_formatado(formato = '%d%m%y')
147
+ def desconto_2_data_formatado(formato = '%d%m%Y')
133
148
  formata_data(desconto_2_data, formato)
134
149
  end
135
- def desconto_3_data_formatado(formato = '%d%m%y')
150
+ def desconto_3_data_formatado(formato = '%d%m%Y')
136
151
  formata_data(desconto_3_data, formato)
137
152
  end
138
153
 
139
154
  # Formatação para campos da multa
140
- def data_multa_formatado(formato = '%d%m%y')
155
+ def data_multa_formatado(formato = '%d%m%Y')
141
156
  formata_data(data_multa, formato)
142
157
  end
143
158
  def valor_multa_formatado(tamanho=13)
144
159
  BrBoleto::Helper::Number.new(valor_multa).formata_valor_monetario(tamanho)
145
160
  end
146
161
 
162
+ # Formatação para campos da juros
163
+ def data_juros_formatado(formato = '%d%m%Y')
164
+ formata_data(data_juros, formato)
165
+ end
166
+ def valor_juros_formatado(tamanho=13)
167
+ BrBoleto::Helper::Number.new(valor_juros).formata_valor_monetario(tamanho)
168
+ end
169
+
147
170
  # Formata o campo valor
148
171
  # referentes as casas decimais
149
172
  # exe. R$199,90 => 0000000019990
@@ -3,15 +3,18 @@ module BrBoleto
3
3
  module Retorno
4
4
  class Base < BrBoleto::ActiveModelBase
5
5
 
6
- attr_accessor :pagamentos
6
+ attr_reader :file
7
+ attr_accessor :pagamentos
7
8
  attr_accessor :codigo_banco
8
9
 
9
10
  def initialize(file)
10
11
  self.pagamentos = []
11
12
  @file = file
12
- read_file!
13
+ read_file! if @file.present?
13
14
  end
14
15
 
16
+ validates :file, presence: true
17
+
15
18
  # O atributo pagamentos sempre irá retornar um Array
16
19
  def pagamentos
17
20
  @pagamentos = [@pagamentos].flatten
@@ -58,7 +58,7 @@ module BrBoleto
58
58
  dv_conta_e_agencia: 37..37,
59
59
  nosso_numero: 38..57,
60
60
  carteira: 58..58,
61
- numero_codumento: 59..73,
61
+ numero_documento: 59..73,
62
62
  data_vencimento: 74..81,
63
63
  valor_titulo: 82..96,
64
64
  banco_recebedor: 97..99,
@@ -21,7 +21,7 @@ module BrBoleto
21
21
  modalidade: 40..41,
22
22
  nosso_numero: 42..56,
23
23
  # carteira: 58..58, # Cartéira segue o padrão da FEBRABAN
24
- numero_codumento: 59..69,
24
+ numero_documento: 59..69,
25
25
  })
26
26
  end
27
27
  end
@@ -34,7 +34,7 @@ module BrBoleto
34
34
  # NÚMERO DO DOCUMENTO
35
35
  # Tamanho Posição
36
36
  # 15 59-73
37
- attr_accessor :numero_codumento
37
+ attr_accessor :numero_documento
38
38
 
39
39
  # DATA DE VENCIMENTO
40
40
  # Tamanho Posição
@@ -1,7 +1,7 @@
1
1
  module BrBoleto
2
2
  module Version
3
3
  MAJOR = 1 #inclui alterações de API e pode quebrar compatibilidade com versões anteriores
4
- MINOR = 1 #inclui novas funcionalidades, sem quebrar APIs existentes
4
+ MINOR = 2 #inclui novas funcionalidades, sem quebrar APIs existentes
5
5
  PATCH = 0 #corrige bugs ou traz melhorias em implementações já existentes
6
6
  CURRENT = "#{MAJOR}.#{MINOR}.#{PATCH}"
7
7
  end
@@ -24,9 +24,9 @@ module Helper
24
24
  subject.stubs(:segmento_p_posicao_107_a_108).returns(" 107_a_108")
25
25
  subject.stubs(:segmento_p_posicao_109_a_109).returns(" 109_a_109")
26
26
  subject.stubs(:segmento_p_posicao_110_a_117).with(pagamento).returns(" 110_a_117")
27
- subject.stubs(:segmento_p_posicao_118_a_118).returns(" 118_a_118")
28
- subject.stubs(:segmento_p_posicao_119_a_126).returns(" 119_a_126")
29
- subject.stubs(:segmento_p_posicao_127_a_141).returns(" 127_a_141")
27
+ subject.stubs(:segmento_p_posicao_118_a_118).with(pagamento).returns(" 118_a_118")
28
+ subject.stubs(:segmento_p_posicao_119_a_126).with(pagamento).returns(" 119_a_126")
29
+ subject.stubs(:segmento_p_posicao_127_a_141).with(pagamento).returns(" 127_a_141")
30
30
  subject.stubs(:segmento_p_posicao_142_a_142).with(pagamento).returns(" 142_a_142")
31
31
  subject.stubs(:segmento_p_posicao_143_a_150).with(pagamento).returns(" 143_a_150")
32
32
  subject.stubs(:segmento_p_posicao_151_a_165).with(pagamento).returns(" 151_a_165")
@@ -258,24 +258,42 @@ module Helper
258
258
  # 1 posição
259
259
  # Por padrão é o valor '0'
260
260
  #
261
- def test_SegmentoPTest_metodo_segmento_p_posicao_118_a_118
262
- subject.segmento_p_posicao_118_a_118 .must_equal '0'
261
+ def test_SegmentoPTest_metodo_segmento_p_posicao_118_a_118#(pagamento)
262
+ subject.segmento_p_posicao_118_a_118(pagamento).must_equal '3'
263
+ end
264
+ def test_SegmentoPTest_metodo_segmento_p_posicao_118_a_118_aceita_apenas_1_2_ou_3_com_padrao_3
265
+ pagamento.codigo_juros = '1'
266
+ subject.segmento_p_posicao_118_a_118(pagamento).must_equal '1'
267
+ pagamento.codigo_juros = '2'
268
+ subject.segmento_p_posicao_118_a_118(pagamento).must_equal '2'
269
+ pagamento.codigo_juros = '3'
270
+ subject.segmento_p_posicao_118_a_118(pagamento).must_equal '3'
271
+
272
+ pagamento.codigo_juros = nil
273
+ subject.segmento_p_posicao_118_a_118(pagamento).must_equal '3'
274
+
275
+ pagamento.codigo_juros = '4'
276
+ subject.segmento_p_posicao_118_a_118(pagamento).must_equal '3'
277
+ pagamento.codigo_juros = '0'
278
+ subject.segmento_p_posicao_118_a_118(pagamento).must_equal '3'
263
279
  end
264
280
 
265
281
  # Data do Juros de Mora
266
282
  # 8 posições
267
283
  # Por padrão é 8 posições em branco
268
284
  #
269
- def test_SegmentoPTest_metodo_segmento_p_posicao_119_a_126
270
- subject.segmento_p_posicao_119_a_126.must_equal ''.rjust(8, '0')
285
+ def test_SegmentoPTest_metodo_segmento_p_posicao_119_a_126#(pagamento)
286
+ pagamento.expects(:data_juros_formatado).with('%d%m%Y').returns('1234567890')
287
+ subject.segmento_p_posicao_119_a_126(pagamento).must_equal '12345678'
271
288
  end
272
289
 
273
290
  # Juros de Mora por Dia/Taxa
274
291
  # 15 posições
275
292
  # Por padrão é 15 posições em branco
276
293
  #
277
- def test_SegmentoPTest_metodo_segmento_p_posicao_127_a_141
278
- subject.segmento_p_posicao_127_a_141.must_equal ''.rjust(15, '0')
294
+ def test_SegmentoPTest_metodo_segmento_p_posicao_127_a_141#(pagamento)
295
+ pagamento.expects(:valor_juros_formatado).with(15).returns('123456')
296
+ subject.segmento_p_posicao_127_a_141(pagamento).must_equal '123456'
279
297
  end
280
298
 
281
299
  # Código do Desconto 1
@@ -145,15 +145,31 @@ module Helper
145
145
  # 1 posição
146
146
  #
147
147
  def test_SegmentoRHelper_metodo_segmento_r_posicao_066_a_066#(pagamento)
148
- pagamento.expects(:codigo_multa).returns('55555555')
149
- subject.segmento_r_posicao_066_a_066(pagamento).must_equal '5'
148
+ pagamento.expects(:codigo_multa).returns('11111111')
149
+ subject.segmento_r_posicao_066_a_066(pagamento).must_equal '1'
150
+ end
151
+ def test_SegmentoRHelper_metodo_segmento_r_posicao_066_a_066_aceita_apenas_1_2_ou_3_com_padrao_3
152
+ pagamento.codigo_multa = '1'
153
+ subject.segmento_r_posicao_066_a_066(pagamento).must_equal '1'
154
+ pagamento.codigo_multa = '2'
155
+ subject.segmento_r_posicao_066_a_066(pagamento).must_equal '2'
156
+ pagamento.codigo_multa = '3'
157
+ subject.segmento_r_posicao_066_a_066(pagamento).must_equal '3'
158
+
159
+ pagamento.codigo_multa = nil
160
+ subject.segmento_r_posicao_066_a_066(pagamento).must_equal '3'
161
+
162
+ pagamento.codigo_multa = '4'
163
+ subject.segmento_r_posicao_066_a_066(pagamento).must_equal '3'
164
+ pagamento.codigo_multa = '0'
165
+ subject.segmento_r_posicao_066_a_066(pagamento).must_equal '3'
150
166
  end
151
167
 
152
168
  # Data da multa
153
169
  # 1 posição
154
170
  #
155
171
  def test_SegmentoRHelper_metodo_segmento_r_posicao_067_a_074#(pagamento)
156
- pagamento.expects(:data_multa_formatado).with('%d%m%Y').returns('12345678')
172
+ pagamento.expects(:data_multa_formatado).with('%d%m%Y').returns('1234567890')
157
173
  subject.segmento_r_posicao_067_a_074(pagamento).must_equal '12345678'
158
174
  end
159
175
 
@@ -344,4 +344,64 @@ describe BrBoleto::Remessa::Cnab240::Sicoob do
344
344
  subject.tipo_cobranca_formatada.must_be_nil
345
345
  end
346
346
  end
347
+
348
+ describe "particularidades do Segmento R" do
349
+ describe "#segmento_r_posicao_066_a_066 - Codigo da multa " do
350
+ # Para o Sicoob o código reference a Isento é '0', diferente do padrão
351
+ # estabelecido pela FEBRABAN onde o código de isento é '3'
352
+
353
+ it "Se não tiver valor em codigo_multa deve considerar '0'" do
354
+ pagamento.codigo_multa = nil
355
+ subject.send(:segmento_r_posicao_066_a_066, pagamento).must_equal '0'
356
+ end
357
+ it "Se o valor de codigo_multa tiver mais caracteres que 1 deve ajustar para 1 caractere" do
358
+ pagamento.codigo_multa = '123'
359
+ subject.send(:segmento_r_posicao_066_a_066, pagamento).must_equal '1'
360
+ end
361
+ it "se o código da multa do pagamento for '1' então deve permanecer '1'" do
362
+ pagamento.codigo_multa = '1'
363
+ subject.send(:segmento_r_posicao_066_a_066, pagamento).must_equal '1'
364
+ end
365
+ it "se o código da multa do pagamento for '2' então deve permanecer '2'" do
366
+ pagamento.codigo_multa = '2'
367
+ subject.send(:segmento_r_posicao_066_a_066, pagamento).must_equal '2'
368
+ end
369
+ it "se o código da multa do pagamento for diferente de 1 ou 2 então considera '0'" do
370
+ pagamento.codigo_multa = '3'
371
+ subject.send(:segmento_r_posicao_066_a_066, pagamento).must_equal '0'
372
+ pagamento.codigo_multa = '4'
373
+ subject.send(:segmento_r_posicao_066_a_066, pagamento).must_equal '0'
374
+ end
375
+ end
376
+ end
377
+
378
+ describe "particularidades do Segmento P" do
379
+ describe "#segmento_p_posicao_118_a_118 - Codigo de Juros " do
380
+ # Para o Sicoob o código reference a Isento é '0', diferente do padrão
381
+ # estabelecido pela FEBRABAN onde o código de isento é '3'
382
+
383
+ it "Se não tiver valor em codigo_juros deve considerar '0'" do
384
+ pagamento.codigo_juros = nil
385
+ subject.send(:segmento_p_posicao_118_a_118, pagamento).must_equal '0'
386
+ end
387
+ it "Se o valor de codigo_juros tiver mais caracteres que 1 deve ajustar para 1 caractere" do
388
+ pagamento.codigo_juros = '123'
389
+ subject.send(:segmento_p_posicao_118_a_118, pagamento).must_equal '1'
390
+ end
391
+ it "se o código da multa do pagamento for '1' então deve permanecer '1'" do
392
+ pagamento.codigo_juros = '1'
393
+ subject.send(:segmento_p_posicao_118_a_118, pagamento).must_equal '1'
394
+ end
395
+ it "se o código da multa do pagamento for '2' então deve permanecer '2'" do
396
+ pagamento.codigo_juros = '2'
397
+ subject.send(:segmento_p_posicao_118_a_118, pagamento).must_equal '2'
398
+ end
399
+ it "se o código da multa do pagamento for diferente de 1 ou 2 então considera '0'" do
400
+ pagamento.codigo_juros = '3'
401
+ subject.send(:segmento_p_posicao_118_a_118, pagamento).must_equal '0'
402
+ pagamento.codigo_juros = '4'
403
+ subject.send(:segmento_p_posicao_118_a_118, pagamento).must_equal '0'
404
+ end
405
+ end
406
+ end
347
407
  end
@@ -34,7 +34,7 @@ describe BrBoleto::Remessa::Pagamento do
34
34
  context "default_values" do
35
35
  it "for data_emissao" do
36
36
  object = subject.class.new()
37
- object.data_emissao.must_equal Date.today
37
+ object.data_emissao.must_equal Date.current
38
38
  end
39
39
  it "for valor_mora" do
40
40
  object = subject.class.new()
@@ -82,12 +82,20 @@ describe BrBoleto::Remessa::Pagamento do
82
82
  end
83
83
  it "for codigo_multa" do
84
84
  object = subject.class.new()
85
- object.codigo_multa.must_equal '0'
85
+ object.codigo_multa.must_equal '3'
86
86
  end
87
87
  it "for valor_multa" do
88
88
  object = subject.class.new()
89
89
  object.valor_multa.must_equal 0.0
90
90
  end
91
+ it "for codigo_juros" do
92
+ object = subject.class.new()
93
+ object.codigo_juros.must_equal '3'
94
+ end
95
+ it "for valor_juros" do
96
+ object = subject.class.new()
97
+ object.valor_juros.must_equal 0.0
98
+ end
91
99
 
92
100
  end
93
101
 
@@ -133,54 +141,95 @@ describe BrBoleto::Remessa::Pagamento do
133
141
  end
134
142
 
135
143
  describe "#data_desconto_formatado" do
136
- it "deve chamar o metodo formata_data com padrão de formato %d%m%y" do
137
- subject.data_desconto = Date.today
138
- subject.expects(:formata_data).with(Date.today, "%d%m%y").returns("123456")
144
+ it "deve chamar o metodo formata_data com padrão de formato %d%m%Y" do
145
+ subject.data_desconto = Date.current
146
+ subject.expects(:formata_data).with(Date.current, "%d%m%Y").returns("123456")
139
147
  subject.data_desconto_formatado.must_equal '123456'
140
148
  end
141
149
  it "deve chamar o metodo formata_data com o parametro passado" do
142
- subject.data_desconto = Date.today
143
- subject.expects(:formata_data).with(Date.today, "%d%m%Y").returns("123456")
144
- subject.data_desconto_formatado("%d%m%Y").must_equal '123456'
150
+ subject.data_desconto = Date.current
151
+ subject.expects(:formata_data).with(Date.current, "%d%m%y").returns("123456")
152
+ subject.data_desconto_formatado("%d%m%y").must_equal '123456'
145
153
  end
146
154
  end
147
155
 
148
156
  describe "#desconto_2_data_formatado" do
149
- it "deve chamar o metodo formata_data com padrão de formato %d%m%y" do
150
- subject.desconto_2_data = Date.today
151
- subject.expects(:formata_data).with(Date.today, "%d%m%y").returns("123456")
157
+ it "deve chamar o metodo formata_data com padrão de formato %d%m%Y" do
158
+ subject.desconto_2_data = Date.current
159
+ subject.expects(:formata_data).with(Date.current, "%d%m%Y").returns("123456")
152
160
  subject.desconto_2_data_formatado.must_equal '123456'
153
161
  end
154
162
  it "deve chamar o metodo formata_data com o parametro passado" do
155
- subject.desconto_2_data = Date.today
156
- subject.expects(:formata_data).with(Date.today, "%d%m%Y").returns("123456")
157
- subject.desconto_2_data_formatado("%d%m%Y").must_equal '123456'
163
+ subject.desconto_2_data = Date.current
164
+ subject.expects(:formata_data).with(Date.current, "%d%m%y").returns("123456")
165
+ subject.desconto_2_data_formatado("%d%m%y").must_equal '123456'
158
166
  end
159
167
  end
160
168
 
161
169
  describe "#desconto_3_data_formatado" do
162
- it "deve chamar o metodo formata_data com padrão de formato %d%m%y" do
163
- subject.desconto_3_data = Date.today
164
- subject.expects(:formata_data).with(Date.today, "%d%m%y").returns("123456")
170
+ it "deve chamar o metodo formata_data com padrão de formato %d%m%Y" do
171
+ subject.desconto_3_data = Date.current
172
+ subject.expects(:formata_data).with(Date.current, "%d%m%Y").returns("123456")
165
173
  subject.desconto_3_data_formatado.must_equal '123456'
166
174
  end
167
175
  it "deve chamar o metodo formata_data com o parametro passado" do
168
- subject.desconto_3_data = Date.today
169
- subject.expects(:formata_data).with(Date.today, "%d%m%Y").returns("123456")
170
- subject.desconto_3_data_formatado("%d%m%Y").must_equal '123456'
176
+ subject.desconto_3_data = Date.current
177
+ subject.expects(:formata_data).with(Date.current, "%d%m%y").returns("123456")
178
+ subject.desconto_3_data_formatado("%d%m%y").must_equal '123456'
171
179
  end
172
180
  end
173
181
 
174
182
  describe "#data_multa_formatado" do
175
- it "deve chamar o metodo formata_data com padrão de formato %d%m%y" do
176
- subject.data_multa = Date.today
177
- subject.expects(:formata_data).with(Date.today, "%d%m%y").returns("123456")
178
- subject.data_multa_formatado.must_equal '123456'
183
+ it "deve chamar o metodo formata_data com padrão de formato %d%m%Y" do
184
+ subject.data_multa = Date.current
185
+ subject.expects(:formata_data).with(Date.current, "%d%m%Y").returns("12345678")
186
+ subject.data_multa_formatado.must_equal '12345678'
179
187
  end
180
188
  it "deve chamar o metodo formata_data com o parametro passado" do
181
- subject.data_multa = Date.today
182
- subject.expects(:formata_data).with(Date.today, "%d%m%Y").returns("123456")
183
- subject.data_multa_formatado("%d%m%Y").must_equal '123456'
189
+ subject.data_multa = Date.current
190
+ subject.expects(:formata_data).with(Date.current, "%d%m%y").returns("123456")
191
+ subject.data_multa_formatado("%d%m%y").must_equal '123456'
192
+ end
193
+ end
194
+ describe "#valor_multa_formatado" do
195
+ context "com padrao de tamanho = 13 digitos" do
196
+ it "deve formatar o valor removendo separador de casas decimais e aredondando para 2 casas decimais" do
197
+ subject.valor_multa = 7856.888
198
+ subject.valor_multa_formatado.must_equal "0000000785689"
199
+ end
200
+ end
201
+ context "passando a quantidade de digitos" do
202
+ it "deve formatar o valor removendo separador de casas decimais e aredondando para 2 casas decimais" do
203
+ subject.valor_multa = 7856.888
204
+ subject.valor_multa_formatado(10).must_equal "0000785689"
205
+ end
206
+ end
207
+ end
208
+
209
+ describe "#data_juros_formatado" do
210
+ it "deve chamar o metodo formata_data com padrão de formato %d%m%Y" do
211
+ subject.data_juros = Date.current
212
+ subject.expects(:formata_data).with(Date.current, "%d%m%Y").returns("12345678")
213
+ subject.data_juros_formatado.must_equal '12345678'
214
+ end
215
+ it "deve chamar o metodo formata_data com o parametro passado" do
216
+ subject.data_juros = Date.current
217
+ subject.expects(:formata_data).with(Date.current, "%d%m%y").returns("123456")
218
+ subject.data_juros_formatado("%d%m%y").must_equal '123456'
219
+ end
220
+ end
221
+ describe "#valor_juros_formatado" do
222
+ context "com padrao de tamanho = 13 digitos" do
223
+ it "deve formatar o valor removendo separador de casas decimais e aredondando para 2 casas decimais" do
224
+ subject.valor_juros = 7856.888
225
+ subject.valor_juros_formatado.must_equal "0000000785689"
226
+ end
227
+ end
228
+ context "passando a quantidade de digitos" do
229
+ it "deve formatar o valor removendo separador de casas decimais e aredondando para 2 casas decimais" do
230
+ subject.valor_juros = 7856.888
231
+ subject.valor_juros_formatado(10).must_equal "0000785689"
232
+ end
184
233
  end
185
234
  end
186
235
 
@@ -0,0 +1,56 @@
1
+ require 'test_helper'
2
+
3
+ require 'pry'
4
+ describe BrBoleto::Retorno::Base do
5
+
6
+ subject { BrBoleto::Retorno::Base.new('') }
7
+
8
+ before do
9
+ BrBoleto::Retorno::Base.any_instance.stubs(:read_file!)
10
+ end
11
+
12
+ describe "#initialize" do
13
+ it "Se passar um arquivo por parâmetro deve setar o valor em @file e chamar o metodo read_file!" do
14
+ BrBoleto::Retorno::Base.any_instance.expects(:read_file!)
15
+ retorno = BrBoleto::Retorno::Base.new('file/path.ret')
16
+ retorno.instance_variable_get(:@file).must_equal 'file/path.ret'
17
+ end
18
+ it "quando instanciar um retorno deve setar os pagamentos com um array" do
19
+ retorno = BrBoleto::Retorno::Base.new('file/path.ret')
20
+ retorno.instance_variable_get(:@pagamentos).must_be_kind_of Array
21
+ end
22
+ it "se não passar o caminho de um arquivo por parâmetro não deve tentar ler o arquivo" do
23
+ BrBoleto::Retorno::Base.any_instance.expects(:read_file!).never
24
+ retorno = BrBoleto::Retorno::Base.new('')
25
+ retorno.instance_variable_get(:@file).must_equal ''
26
+ end
27
+ end
28
+
29
+ it "deve validar que o file é obrigatório" do
30
+ subject.instance_variable_set(:@file, '')
31
+ subject.valid?
32
+ subject.errors.messages[:file].must_include( I18n.t("errors.messages.blank") )
33
+
34
+ subject.instance_variable_set(:@file, 'something')
35
+ subject.valid?
36
+ subject.errors.messages[:file].must_be_nil
37
+ end
38
+
39
+ describe "#pagamentos" do
40
+ it "mesmo se setar um valor normal deve retornar um array" do
41
+ subject.pagamentos = 'valor_normal'
42
+ subject.pagamentos.must_equal(['valor_normal'])
43
+ end
44
+ it "se setar valores em Matriz deve retornar um array" do
45
+ subject.pagamentos = [['valor_1'],'valor_2']
46
+ subject.pagamentos.must_equal(['valor_1','valor_2'])
47
+ end
48
+ it "deve ser possível utilizar o operador << para incrementar valores aos pagamentos" do
49
+ subject.pagamentos << 'valor_1'
50
+ subject.pagamentos.must_equal(['valor_1'])
51
+ subject.pagamentos << 'valor_2'
52
+ subject.pagamentos.must_equal(['valor_1','valor_2'])
53
+ end
54
+ end
55
+
56
+ end
@@ -24,7 +24,7 @@ describe BrBoleto::Retorno::Cnab240::Base do
24
24
  pagamento.dv_conta_e_agencia.must_equal "0"
25
25
  pagamento.nosso_numero.must_equal "000000033001014"
26
26
  pagamento.carteira.must_equal "1"
27
- pagamento.numero_codumento.must_equal "000000000000330"
27
+ pagamento.numero_documento.must_equal "000000000000330"
28
28
  pagamento.data_vencimento.must_equal Date.parse('03/05/2016')
29
29
  pagamento.valor_titulo.must_equal 129.39
30
30
  pagamento.banco_recebedor.must_equal "756"
@@ -64,7 +64,7 @@ describe BrBoleto::Retorno::Cnab240::Base do
64
64
  pagamento.dv_conta_e_agencia.must_equal "0"
65
65
  pagamento.nosso_numero.must_equal "000000034801024"
66
66
  pagamento.carteira.must_equal "1"
67
- pagamento.numero_codumento.must_equal "000000000000348"
67
+ pagamento.numero_documento.must_equal "000000000000348"
68
68
  pagamento.data_vencimento.must_equal Date.parse('06/05/2016')
69
69
  pagamento.valor_titulo.must_equal 29.0
70
70
  pagamento.banco_recebedor.must_equal "756"
@@ -104,7 +104,7 @@ describe BrBoleto::Retorno::Cnab240::Base do
104
104
  pagamento.dv_conta_e_agencia.must_equal "0"
105
105
  pagamento.nosso_numero.must_equal "000000035501014"
106
106
  pagamento.carteira.must_equal "1"
107
- pagamento.numero_codumento.must_equal "000000000000355"
107
+ pagamento.numero_documento.must_equal "000000000000355"
108
108
  pagamento.data_vencimento.must_equal Date.parse('06/05/2016')
109
109
  pagamento.valor_titulo.must_equal 89.1
110
110
  pagamento.banco_recebedor.must_equal "756"
@@ -144,7 +144,7 @@ describe BrBoleto::Retorno::Cnab240::Base do
144
144
  pagamento.dv_conta_e_agencia.must_equal "0"
145
145
  pagamento.nosso_numero.must_equal "000000036201014"
146
146
  pagamento.carteira.must_equal "1"
147
- pagamento.numero_codumento.must_equal "000000000000362"
147
+ pagamento.numero_documento.must_equal "000000000000362"
148
148
  pagamento.data_vencimento.must_equal Date.parse('06/05/2016')
149
149
  pagamento.valor_titulo.must_equal 29.0
150
150
  pagamento.banco_recebedor.must_equal "104"
@@ -183,7 +183,7 @@ describe BrBoleto::Retorno::Cnab240::Base do
183
183
  pagamento.dv_conta_e_agencia.must_equal "0"
184
184
  pagamento.nosso_numero.must_equal "000000036201014"
185
185
  pagamento.carteira.must_equal "1"
186
- pagamento.numero_codumento.must_equal "000000000000362"
186
+ pagamento.numero_documento.must_equal "000000000000362"
187
187
  pagamento.data_vencimento.must_equal Date.parse('06/05/2016')
188
188
  pagamento.valor_titulo.must_equal 47.37
189
189
  pagamento.banco_recebedor.must_equal "104"
@@ -23,7 +23,7 @@ describe BrBoleto::Retorno::Cnab240::Caixa do
23
23
  pagamento.dv_conta_e_agencia.must_equal nil
24
24
  pagamento.nosso_numero.must_equal "NOSSONUMERO0001"
25
25
  pagamento.carteira.must_equal "X"
26
- pagamento.numero_codumento.must_equal "NUMEROCOD01"
26
+ pagamento.numero_documento.must_equal "NUMEROCOD01"
27
27
  pagamento.data_vencimento.must_equal Date.parse('03/05/2016')
28
28
  pagamento.valor_titulo.must_equal 129.39
29
29
  pagamento.banco_recebedor.must_equal "104"
@@ -63,7 +63,7 @@ describe BrBoleto::Retorno::Cnab240::Caixa do
63
63
  pagamento.dv_conta_e_agencia.must_equal nil
64
64
  pagamento.nosso_numero.must_equal "NOSSONUMERO0002"
65
65
  pagamento.carteira.must_equal "X"
66
- pagamento.numero_codumento.must_equal "NUMEROCOD02"
66
+ pagamento.numero_documento.must_equal "NUMEROCOD02"
67
67
  pagamento.data_vencimento.must_equal Date.parse('06/05/2016')
68
68
  pagamento.valor_titulo.must_equal 29.00
69
69
  pagamento.banco_recebedor.must_equal "104"
@@ -103,7 +103,7 @@ describe BrBoleto::Retorno::Cnab240::Caixa do
103
103
  pagamento.dv_conta_e_agencia.must_equal nil
104
104
  pagamento.nosso_numero.must_equal "NOSSONUMERO0003"
105
105
  pagamento.carteira.must_equal "X"
106
- pagamento.numero_codumento.must_equal "NUMEROCOD03"
106
+ pagamento.numero_documento.must_equal "NUMEROCOD03"
107
107
  pagamento.data_vencimento.must_equal Date.parse('06/05/2016')
108
108
  pagamento.valor_titulo.must_equal 89.1
109
109
  pagamento.banco_recebedor.must_equal "104"
@@ -143,7 +143,7 @@ describe BrBoleto::Retorno::Cnab240::Caixa do
143
143
  pagamento.dv_conta_e_agencia.must_equal nil
144
144
  pagamento.nosso_numero.must_equal "NOSSONUMERO0004"
145
145
  pagamento.carteira.must_equal "X"
146
- pagamento.numero_codumento.must_equal "NUMEROCOD04"
146
+ pagamento.numero_documento.must_equal "NUMEROCOD04"
147
147
  pagamento.data_vencimento.must_equal Date.parse('06/05/2016')
148
148
  pagamento.valor_titulo.must_equal 29.0
149
149
  pagamento.banco_recebedor.must_equal "104"
@@ -183,7 +183,7 @@ describe BrBoleto::Retorno::Cnab240::Caixa do
183
183
  pagamento.dv_conta_e_agencia.must_equal nil
184
184
  pagamento.nosso_numero.must_equal "NOSSONUMERO0005"
185
185
  pagamento.carteira.must_equal "X"
186
- pagamento.numero_codumento.must_equal "NUMEROCOD05"
186
+ pagamento.numero_documento.must_equal "NUMEROCOD05"
187
187
  pagamento.data_vencimento.must_equal Date.parse('06/05/2016')
188
188
  pagamento.valor_titulo.must_equal 47.37
189
189
  pagamento.banco_recebedor.must_equal "104"
@@ -23,7 +23,7 @@ describe BrBoleto::Retorno::Cnab240::Sicoob do
23
23
  pagamento.dv_conta_e_agencia.must_equal "0"
24
24
  pagamento.nosso_numero.must_equal "0000000330"
25
25
  pagamento.carteira.must_equal "1"
26
- pagamento.numero_codumento.must_equal "000000000000330"
26
+ pagamento.numero_documento.must_equal "000000000000330"
27
27
  pagamento.data_vencimento.must_equal Date.parse('03/05/2016')
28
28
  pagamento.valor_titulo.must_equal 129.39
29
29
  pagamento.banco_recebedor.must_equal "756"
@@ -63,7 +63,7 @@ describe BrBoleto::Retorno::Cnab240::Sicoob do
63
63
  pagamento.dv_conta_e_agencia.must_equal "0"
64
64
  pagamento.nosso_numero.must_equal "0000000348"
65
65
  pagamento.carteira.must_equal "1"
66
- pagamento.numero_codumento.must_equal "000000000000348"
66
+ pagamento.numero_documento.must_equal "000000000000348"
67
67
  pagamento.data_vencimento.must_equal Date.parse('06/05/2016')
68
68
  pagamento.valor_titulo.must_equal 29.0
69
69
  pagamento.banco_recebedor.must_equal "756"
@@ -103,7 +103,7 @@ describe BrBoleto::Retorno::Cnab240::Sicoob do
103
103
  pagamento.dv_conta_e_agencia.must_equal "0"
104
104
  pagamento.nosso_numero.must_equal "0000000355"
105
105
  pagamento.carteira.must_equal "1"
106
- pagamento.numero_codumento.must_equal "000000000000355"
106
+ pagamento.numero_documento.must_equal "000000000000355"
107
107
  pagamento.data_vencimento.must_equal Date.parse('06/05/2016')
108
108
  pagamento.valor_titulo.must_equal 89.1
109
109
  pagamento.banco_recebedor.must_equal "756"
@@ -143,7 +143,7 @@ describe BrBoleto::Retorno::Cnab240::Sicoob do
143
143
  pagamento.dv_conta_e_agencia.must_equal "0"
144
144
  pagamento.nosso_numero.must_equal "0000000362"
145
145
  pagamento.carteira.must_equal "1"
146
- pagamento.numero_codumento.must_equal "000000000000362"
146
+ pagamento.numero_documento.must_equal "000000000000362"
147
147
  pagamento.data_vencimento.must_equal Date.parse('06/05/2016')
148
148
  pagamento.valor_titulo.must_equal 29.0
149
149
  pagamento.banco_recebedor.must_equal "104"
@@ -183,7 +183,7 @@ describe BrBoleto::Retorno::Cnab240::Sicoob do
183
183
  pagamento.dv_conta_e_agencia.must_equal "0"
184
184
  pagamento.nosso_numero.must_equal "0000000362"
185
185
  pagamento.carteira.must_equal "1"
186
- pagamento.numero_codumento.must_equal "000000000000362"
186
+ pagamento.numero_documento.must_equal "000000000000362"
187
187
  pagamento.data_vencimento.must_equal Date.parse('06/05/2016')
188
188
  pagamento.valor_titulo.must_equal 47.37
189
189
  pagamento.banco_recebedor.must_equal "104"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: br_boleto
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bruno M. Mergen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-10 00:00:00.000000000 Z
11
+ date: 2016-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -154,6 +154,7 @@ files:
154
154
  - test/br_boleto/remessa/cnab240/sicoob_test.rb
155
155
  - test/br_boleto/remessa/lote_test.rb
156
156
  - test/br_boleto/remessa/pagamento_test.rb
157
+ - test/br_boleto/retorno/base_test.rb
157
158
  - test/br_boleto/retorno/cnab240/base_test.rb
158
159
  - test/br_boleto/retorno/cnab240/caixa_test.rb
159
160
  - test/br_boleto/retorno/cnab240/sicoob_test.rb
@@ -228,6 +229,7 @@ test_files:
228
229
  - test/br_boleto/remessa/cnab240/sicoob_test.rb
229
230
  - test/br_boleto/remessa/lote_test.rb
230
231
  - test/br_boleto/remessa/pagamento_test.rb
232
+ - test/br_boleto/retorno/base_test.rb
231
233
  - test/br_boleto/retorno/cnab240/base_test.rb
232
234
  - test/br_boleto/retorno/cnab240/caixa_test.rb
233
235
  - test/br_boleto/retorno/cnab240/sicoob_test.rb