br_boleto 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
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