br_boleto 2.0.1 → 2.1.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.
Files changed (137) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/.travis.yml +1 -1
  4. data/Gemfile.lock +2 -2
  5. data/br_boleto.gemspec +2 -3
  6. data/lib/br_boleto/association/have_conta.rb +27 -25
  7. data/lib/br_boleto/association/have_pagador.rb +2 -0
  8. data/lib/br_boleto/boleto/base.rb +0 -4
  9. data/lib/br_boleto/boleto/bradesco.rb +80 -0
  10. data/lib/br_boleto/boleto/caixa.rb +10 -12
  11. data/lib/br_boleto/boleto/cecred.rb +76 -0
  12. data/lib/br_boleto/boleto/itau.rb +114 -0
  13. data/lib/br_boleto/boleto/sicredi.rb +101 -0
  14. data/lib/br_boleto/boleto/unicred.rb +21 -0
  15. data/lib/br_boleto/conta/base.rb +28 -3
  16. data/lib/br_boleto/conta/bradesco.rb +120 -0
  17. data/lib/br_boleto/conta/caixa.rb +22 -12
  18. data/lib/br_boleto/conta/cecred.rb +67 -0
  19. data/lib/br_boleto/conta/itau.rb +199 -0
  20. data/lib/br_boleto/conta/sicoob.rb +40 -11
  21. data/lib/br_boleto/conta/sicredi.rb +171 -0
  22. data/lib/br_boleto/conta/unicred.rb +38 -0
  23. data/lib/br_boleto/helper/default_codes.rb +535 -26
  24. data/lib/br_boleto/pagador.rb +4 -0
  25. data/lib/br_boleto/remessa/base.rb +2 -0
  26. data/lib/br_boleto/remessa/cnab240/base.rb +21 -6
  27. data/lib/br_boleto/remessa/cnab240/bradesco.rb +141 -0
  28. data/lib/br_boleto/remessa/cnab240/caixa.rb +8 -1
  29. data/lib/br_boleto/remessa/cnab240/cecred.rb +169 -0
  30. data/lib/br_boleto/remessa/cnab240/helper/segmento_p.rb +29 -21
  31. data/lib/br_boleto/remessa/cnab240/helper/segmento_q.rb +4 -3
  32. data/lib/br_boleto/remessa/cnab240/helper/segmento_r.rb +5 -5
  33. data/lib/br_boleto/remessa/cnab240/helper/segmento_s.rb +4 -3
  34. data/lib/br_boleto/remessa/cnab240/itau.rb +186 -0
  35. data/lib/br_boleto/remessa/cnab240/sicoob.rb +4 -16
  36. data/lib/br_boleto/remessa/cnab240/sicredi.rb +205 -0
  37. data/lib/br_boleto/remessa/cnab240/unicred.rb +40 -0
  38. data/lib/br_boleto/remessa/cnab400/bradesco.rb +235 -0
  39. data/lib/br_boleto/remessa/cnab400/helper/detalhe.rb +6 -5
  40. data/lib/br_boleto/remessa/cnab400/itau.rb +190 -0
  41. data/lib/br_boleto/remessa/cnab400/sicoob.rb +3 -3
  42. data/lib/br_boleto/remessa/cnab400/sicredi.rb +276 -0
  43. data/lib/br_boleto/remessa/cnab400/unicred.rb +62 -0
  44. data/lib/br_boleto/remessa/pagamento.rb +93 -43
  45. data/lib/br_boleto/retorno/cnab240/base.rb +13 -12
  46. data/lib/br_boleto/retorno/cnab240/bradesco.rb +10 -0
  47. data/lib/br_boleto/retorno/cnab240/caixa.rb +2 -3
  48. data/lib/br_boleto/retorno/cnab240/cecred.rb +10 -0
  49. data/lib/br_boleto/retorno/cnab240/itau.rb +24 -0
  50. data/lib/br_boleto/retorno/cnab240/sicredi.rb +10 -0
  51. data/lib/br_boleto/retorno/cnab240/unicred.rb +10 -0
  52. data/lib/br_boleto/retorno/cnab400/bradesco.rb +42 -0
  53. data/lib/br_boleto/retorno/cnab400/itau.rb +43 -0
  54. data/lib/br_boleto/retorno/cnab400/sicoob.rb +2 -2
  55. data/lib/br_boleto/retorno/cnab400/sicredi.rb +43 -0
  56. data/lib/br_boleto/retorno/cnab400/unicred.rb +10 -0
  57. data/lib/br_boleto/retorno/pagamento.rb +18 -4
  58. data/lib/br_boleto/version.rb +2 -2
  59. data/lib/br_boleto.rb +28 -0
  60. data/lib/config/locales/br-boleto-en.yml +1 -0
  61. data/lib/config/locales/br-boleto-pt-BR.yml +1 -0
  62. data/test/br_boleto/association/have_pagador_test.rb +24 -0
  63. data/test/br_boleto/boleto/bradesco_test.rb +125 -0
  64. data/test/br_boleto/boleto/caixa_test.rb +18 -18
  65. data/test/br_boleto/boleto/cecred_test.rb +115 -0
  66. data/test/br_boleto/boleto/itau_test.rb +160 -0
  67. data/test/br_boleto/boleto/sicredi_test.rb +136 -0
  68. data/test/br_boleto/boleto/unicred_test.rb +128 -0
  69. data/test/br_boleto/conta/base_test.rb +298 -3
  70. data/test/br_boleto/conta/bradesco_test.rb +142 -0
  71. data/test/br_boleto/conta/caixa_test.rb +7 -6
  72. data/test/br_boleto/conta/cecred_test.rb +119 -0
  73. data/test/br_boleto/conta/itau_test.rb +189 -0
  74. data/test/br_boleto/conta/sicoob_test.rb +32 -2
  75. data/test/br_boleto/conta/sicredi_test.rb +180 -0
  76. data/test/br_boleto/conta/unicred_test.rb +154 -0
  77. data/test/br_boleto/pagador_test.rb +22 -2
  78. data/test/br_boleto/remessa/cnab240/base_test.rb +24 -12
  79. data/test/br_boleto/remessa/cnab240/bradesco_test.rb +196 -0
  80. data/test/br_boleto/remessa/cnab240/caixa_test.rb +51 -0
  81. data/test/br_boleto/remessa/cnab240/cecred_test.rb +242 -0
  82. data/test/br_boleto/remessa/cnab240/helper/segmento_p_test.rb +78 -71
  83. data/test/br_boleto/remessa/cnab240/helper/segmento_q_test.rb +4 -3
  84. data/test/br_boleto/remessa/cnab240/helper/segmento_r_test.rb +10 -18
  85. data/test/br_boleto/remessa/cnab240/helper/segmento_s_test.rb +6 -5
  86. data/test/br_boleto/remessa/cnab240/itau_test.rb +201 -0
  87. data/test/br_boleto/remessa/cnab240/sicoob_test.rb +1 -58
  88. data/test/br_boleto/remessa/cnab240/sicredi_test.rb +207 -0
  89. data/test/br_boleto/remessa/cnab240/unicred_test.rb +250 -0
  90. data/test/br_boleto/remessa/cnab400/base_test.rb +4 -4
  91. data/test/br_boleto/remessa/cnab400/bradesco_test.rb +164 -0
  92. data/test/br_boleto/remessa/cnab400/itau_test.rb +173 -0
  93. data/test/br_boleto/remessa/cnab400/sicoob_test.rb +2 -2
  94. data/test/br_boleto/remessa/cnab400/sicredi_test.rb +241 -0
  95. data/test/br_boleto/remessa/cnab400/unicred_test.rb +169 -0
  96. data/test/br_boleto/retorno/cnab240/base_test.rb +20 -10
  97. data/test/br_boleto/retorno/cnab240/bradesco_test.rb +228 -0
  98. data/test/br_boleto/retorno/cnab240/caixa_test.rb +20 -10
  99. data/test/br_boleto/retorno/cnab240/cecred_test.rb +228 -0
  100. data/test/br_boleto/retorno/cnab240/itau_test.rb +228 -0
  101. data/test/br_boleto/retorno/cnab240/sicoob_test.rb +20 -10
  102. data/test/br_boleto/retorno/cnab240/sicredi_test.rb +228 -0
  103. data/test/br_boleto/retorno/cnab240/unicred_test.rb +228 -0
  104. data/test/br_boleto/retorno/cnab400/bradesco_test.rb +255 -0
  105. data/test/br_boleto/retorno/cnab400/itau_test.rb +96 -0
  106. data/test/br_boleto/retorno/cnab400/sicoob_test.rb +10 -5
  107. data/test/br_boleto/retorno/cnab400/sicredi_test.rb +7 -0
  108. data/test/br_boleto/retorno/cnab400/unicred.rb +255 -0
  109. data/test/br_boleto/retorno/pagamento_test.rb +7 -0
  110. data/test/factories/boleto/boleto_bradesco.rb +18 -0
  111. data/test/factories/boleto/boleto_cecred.rb +18 -0
  112. data/test/factories/boleto/boleto_itau.rb +18 -0
  113. data/test/factories/boleto/boleto_sicredi.rb +18 -0
  114. data/test/factories/boleto/boleto_unicred.rb +18 -0
  115. data/test/factories/conta/bradesco.rb +16 -0
  116. data/test/factories/conta/caixa.rb +2 -1
  117. data/test/factories/conta/cecred.rb +15 -0
  118. data/test/factories/conta/itau.rb +15 -0
  119. data/test/factories/conta/sicoob.rb +2 -1
  120. data/test/factories/conta/sicredi.rb +15 -0
  121. data/test/factories/conta/unicred.rb +15 -0
  122. data/test/factories/remessa/cnab240/bradesco.rb +9 -0
  123. data/test/factories/remessa/cnab240/cecred.rb +9 -0
  124. data/test/factories/remessa/cnab240/itau.rb +9 -0
  125. data/test/factories/remessa/cnab240/sicredi.rb +9 -0
  126. data/test/factories/remessa/cnab240/unicred.rb +9 -0
  127. data/test/factories/remessa/cnab400/bradesco.rb +8 -0
  128. data/test/factories/remessa/cnab400/itau.rb +8 -0
  129. data/test/factories/remessa/cnab400/sicredi.rb +8 -0
  130. data/test/factories/remessa/cnab400/unicred.rb +8 -0
  131. data/test/fixtures/remessa/cnab240/caixa.rem +8 -0
  132. data/test/fixtures/remessa/cnab240/cecred.rem +8 -0
  133. data/test/fixtures/remessa/cnab240/sicoob.rem +8 -8
  134. data/test/fixtures/remessa/cnab240/unicred.rem +7 -0
  135. data/test/fixtures/retorno/cnab400/bradesco.ret +8 -0
  136. data/test/fixtures/retorno/cnab400/itau.ret +54 -0
  137. metadata +138 -3
@@ -0,0 +1,201 @@
1
+ require 'test_helper'
2
+
3
+ describe BrBoleto::Remessa::Cnab240::Itau do
4
+ subject { FactoryGirl.build(:remessa_cnab240_itau, lotes: lote) }
5
+ let(:pagamento) { FactoryGirl.build(:remessa_pagamento, valor_documento: 879.66) }
6
+ let(:lote) { FactoryGirl.build(:remessa_lote, pagamentos: pagamento) }
7
+
8
+ it "deve herdar da class Base" do
9
+ subject.class.superclass.must_equal BrBoleto::Remessa::Cnab240::Base
10
+ end
11
+
12
+ context "validations" do
13
+ describe 'Validações personalizadas da conta' do
14
+ it 'valid_carteira_required' do
15
+ subject.conta.carteira = ''
16
+ conta_must_be_msg_error(:carteira, :blank)
17
+ end
18
+
19
+ it 'valid_carteira_length' do
20
+ subject.conta.carteira = '1234567890123456'
21
+ conta_must_be_msg_error(:carteira, :custom_length_is, {count: 3})
22
+ end
23
+
24
+ it 'valid_convenio_required' do
25
+ subject.conta.convenio = ''
26
+ conta_must_be_msg_error(:convenio, :blank)
27
+ end
28
+
29
+ it 'valid_convenio_length' do
30
+ subject.conta.convenio = '1234567890123456'
31
+ conta_must_be_msg_error(:convenio, :custom_length_maximum, {count: 5})
32
+ end
33
+
34
+ it 'agencia_required' do
35
+ subject.conta.agencia = ''
36
+ conta_must_be_msg_error(:agencia, :blank)
37
+ end
38
+
39
+ it 'agencia_length' do
40
+ subject.conta.agencia = '1234567890123456'
41
+ conta_must_be_msg_error(:agencia, :custom_length_is, {count: 4})
42
+ end
43
+
44
+ private
45
+
46
+ def conta_must_be_msg_error(attr_validation, msg_key, options_msg={})
47
+ must_be_message_error(:base, "#{BrBoleto::Conta::Itau.human_attribute_name(attr_validation)} #{get_message(msg_key, options_msg)}")
48
+ end
49
+ end
50
+ end
51
+
52
+
53
+ describe "#convenio_lote" do
54
+ it "deve ser preenchido com brancos " do
55
+ subject.convenio_lote(lote).must_equal ' ' * 20
56
+ end
57
+ it "deve ter 20 caracteres" do
58
+ subject.convenio_lote(lote).size.must_equal 20
59
+ end
60
+ end
61
+
62
+ describe "#informacoes_da_conta" do
63
+ it "deve ter 20 posições" do
64
+ subject.informacoes_da_conta.size.must_equal 20
65
+ end
66
+
67
+ it "1 - Primeira parte = agencia 5 posicoes - ajustados com zeros a esquerda" do
68
+ subject.conta.agencia = '47'
69
+ subject.informacoes_da_conta[0..4].must_equal '00047'
70
+
71
+ subject.conta.agencia = '1234'
72
+ subject.informacoes_da_conta[0..4].must_equal '01234'
73
+ end
74
+
75
+ it "2 - Segunda parte = deve ser preenchido com branco" do
76
+ subject.informacoes_da_conta[5].must_equal " "
77
+ end
78
+
79
+ it "3 - Terceira parte = deve ser preenchido com zeros" do
80
+ subject.informacoes_da_conta[6..12].must_equal '0000000'
81
+ end
82
+
83
+ it "4 - Quarta parte = conta_corrente 5 posicoes - ajustados com zeros a esquerda" do
84
+ subject.conta.conta_corrente = '89755'
85
+ subject.informacoes_da_conta[13..17].must_equal '89755'
86
+
87
+ subject.conta.conta_corrente = '1234'
88
+ subject.informacoes_da_conta[13..17].must_equal '01234'
89
+ end
90
+
91
+ it "5 - Quinta parte = Se o conta_corrente_dv não for 2 digitos deve ter 1 espaço em branco" do
92
+ subject.informacoes_da_conta[18].must_equal(' ')
93
+ end
94
+
95
+ it "6 - Sexta parte = Conta Corrente DV" do
96
+ subject.conta.conta_corrente_dv = '8'
97
+ subject.informacoes_da_conta[19..19].must_equal('8')
98
+ end
99
+ end
100
+
101
+ describe "#complemento_header_arquivo" do
102
+ it "deve ter 15 posições" do
103
+ subject.complemento_header_arquivo.size.must_equal 15
104
+ end
105
+
106
+ it "1 - Primeira parte = deve ser preenchido com zeros" do
107
+ subject.complemento_header_arquivo[0..2].must_equal '000'
108
+ end
109
+
110
+ it "2 - Segunda parte = USO FEBRABAN com 12 posições em branco" do
111
+ subject.complemento_header_arquivo[3..14].must_equal ' ' * 12
112
+ end
113
+ end
114
+
115
+ describe "#complemento_p" do
116
+
117
+ it "deve ter 34 posições" do
118
+ subject.complemento_p(pagamento).size.must_equal 34
119
+ end
120
+
121
+ it "1 - Primeira parte = deve ser preenchido com zeros" do
122
+ subject.complemento_p(pagamento)[0..6].must_equal '0000000'
123
+ end
124
+
125
+ it "2 - Segunda parte = conta_corrente com 5 posicoes - ajustados com zeros a esquerda" do
126
+ subject.conta.conta_corrente = '1234'
127
+ subject.complemento_p(pagamento)[7..11].must_equal '01234'
128
+
129
+ subject.conta.conta_corrente = '26461'
130
+ subject.complemento_p(pagamento)[7..11].must_equal '26461'
131
+ end
132
+
133
+ it "3 - Terceira parte = deve ser preenchido com 1 espaço em branco" do
134
+ subject.complemento_p(pagamento)[12..12].must_equal ' '
135
+ end
136
+
137
+ it "4 - Quarta parte = Conta Corrente DV - 1 posicao" do
138
+ subject.conta.conta_corrente_dv = '7'
139
+ subject.complemento_p(pagamento)[13..13].must_equal '7'
140
+ end
141
+
142
+ it "5 - Quinta parte = carteira com 3 posicoes ajustados com zeros a esquerda" do
143
+ subject.conta.carteira = '21'
144
+ subject.complemento_p(pagamento)[14..16].must_equal '021'
145
+ end
146
+
147
+ it "6 - Sexta parte = Numero documento com 8 posicoes" do
148
+ pagamento.numero_documento = '89378'
149
+ subject.complemento_p(pagamento)[17..24].must_equal '00089378'
150
+
151
+ pagamento.numero_documento = '12345678'
152
+ subject.complemento_p(pagamento)[17..24].must_equal '12345678'
153
+ end
154
+
155
+ it "7 - Setima parte = numero_documento DV com 1 posicao - Deve ser o ultimo digito do nosso numero" do
156
+ pagamento.nosso_numero = '999/99999999-9'
157
+ subject.complemento_p(pagamento)[25..25].must_equal '9'
158
+
159
+ pagamento.nosso_numero = '999/99999999-0'
160
+ subject.complemento_p(pagamento)[25..25].must_equal '0'
161
+ end
162
+
163
+ it "8 - Oitava parte = deve ser preenchido com brancos" do
164
+ subject.complemento_p(pagamento)[26..33].must_equal ' ' * 8
165
+ end
166
+
167
+ end
168
+
169
+ describe "#segmento_p_numero_do_documento" do
170
+ it "deve ter 15 posições" do
171
+ subject.segmento_p_numero_do_documento(pagamento).size.must_equal 15
172
+ end
173
+
174
+ it "1 - Primeira parte = deve conter o numero do documento 10 posicoes - ajustados com zeros a esquerda" do
175
+ pagamento.expects(:numero_documento).returns("977897")
176
+ subject.segmento_p_numero_do_documento(pagamento)[0..9].must_equal '0000977897'
177
+ end
178
+
179
+ it "2 - Segunda parte = deve ser preenchido com brancos" do
180
+ subject.segmento_p_numero_do_documento(pagamento)[10..14].must_equal ' ' * 5
181
+ end
182
+ end
183
+
184
+ describe "#complemento_trailer_lote" do
185
+ it "deve ter 217 posições" do
186
+ subject.complemento_trailer_lote(lote, 5).size.must_equal 217
187
+ end
188
+
189
+ it "1 - Primeira parte = 92 posições todas preenchidas com zeros (VALORES UTILIZADOS APENAS PARA ARQUIVO DE RETORNO)" do
190
+ subject.complemento_trailer_lote(lote, 5)[0..91].must_equal '0' * 92
191
+ end
192
+
193
+ it "2 - Segunda parte = 8 posições todas preenchidas com zeros (Nr. do aviso de lançamento do crédito referente aos títulos de cobrança)" do
194
+ subject.complemento_trailer_lote(lote, 5)[92..99].must_equal ('0' * 8)
195
+ end
196
+
197
+ it "3 - Terceira parte = EXCLUSIVO FEBRABAN com 117 posicoes em branco" do
198
+ subject.complemento_trailer_lote(lote, 5)[100..216].must_equal (' ' * 117)
199
+ end
200
+ end
201
+ end
@@ -233,7 +233,7 @@ describe BrBoleto::Remessa::Cnab240::Sicoob do
233
233
 
234
234
  describe "#dados_do_arquivo" do
235
235
  it "deve gerar os dados do arquivo" do
236
- subject.dados_do_arquivo.size.must_equal 1927
236
+ subject.dados_do_arquivo.size.must_equal 1936
237
237
  end
238
238
  end
239
239
 
@@ -293,36 +293,6 @@ describe BrBoleto::Remessa::Cnab240::Sicoob do
293
293
  end
294
294
  end
295
295
 
296
- describe "particularidades do Segmento R" do
297
- describe "#segmento_r_posicao_066_a_066 - Codigo da multa " do
298
- # Para o Sicoob o código reference a Isento é '0', diferente do padrão
299
- # estabelecido pela FEBRABAN onde o código de isento é '3'
300
-
301
- it "Se não tiver valor em codigo_multa deve considerar '0'" do
302
- pagamento.codigo_multa = nil
303
- subject.send(:segmento_r_posicao_066_a_066, pagamento).must_equal '0'
304
- end
305
- it "Se o valor de codigo_multa tiver mais caracteres que 1 deve ajustar para 1 caractere" do
306
- pagamento.codigo_multa = '123'
307
- subject.send(:segmento_r_posicao_066_a_066, pagamento).must_equal '1'
308
- end
309
- it "se o código da multa do pagamento for '1' então deve permanecer '1'" do
310
- pagamento.codigo_multa = '1'
311
- subject.send(:segmento_r_posicao_066_a_066, pagamento).must_equal '1'
312
- end
313
- it "se o código da multa do pagamento for '2' então deve permanecer '2'" do
314
- pagamento.codigo_multa = '2'
315
- subject.send(:segmento_r_posicao_066_a_066, pagamento).must_equal '2'
316
- end
317
- it "se o código da multa do pagamento for diferente de 1 ou 2 então considera '0'" do
318
- pagamento.codigo_multa = '3'
319
- subject.send(:segmento_r_posicao_066_a_066, pagamento).must_equal '0'
320
- pagamento.codigo_multa = '4'
321
- subject.send(:segmento_r_posicao_066_a_066, pagamento).must_equal '0'
322
- end
323
- end
324
- end
325
-
326
296
  describe "particularidades do Segmento P" do
327
297
  describe "#complemento_p" do
328
298
  it "posicao 0 até 11 deve ter a conta_corrente" do
@@ -342,33 +312,6 @@ describe BrBoleto::Remessa::Cnab240::Sicoob do
342
312
  subject.complemento_p(pagamento)[14..33].must_equal '12345678901234567890'
343
313
  end
344
314
  end
345
- describe "#segmento_p_posicao_118_a_118 - Codigo de Juros " do
346
- # Para o Sicoob o código reference a Isento é '0', diferente do padrão
347
- # estabelecido pela FEBRABAN onde o código de isento é '3'
348
-
349
- it "Se não tiver valor em codigo_juros deve considerar '0'" do
350
- pagamento.codigo_juros = nil
351
- subject.send(:segmento_p_posicao_118_a_118, pagamento).must_equal '0'
352
- end
353
- it "Se o valor de codigo_juros tiver mais caracteres que 1 deve ajustar para 1 caractere" do
354
- pagamento.codigo_juros = '123'
355
- subject.send(:segmento_p_posicao_118_a_118, pagamento).must_equal '1'
356
- end
357
- it "se o código da multa do pagamento for '1' então deve permanecer '1'" do
358
- pagamento.codigo_juros = '1'
359
- subject.send(:segmento_p_posicao_118_a_118, pagamento).must_equal '1'
360
- end
361
- it "se o código da multa do pagamento for '2' então deve permanecer '2'" do
362
- pagamento.codigo_juros = '2'
363
- subject.send(:segmento_p_posicao_118_a_118, pagamento).must_equal '2'
364
- end
365
- it "se o código da multa do pagamento for diferente de 1 ou 2 então considera '0'" do
366
- pagamento.codigo_juros = '3'
367
- subject.send(:segmento_p_posicao_118_a_118, pagamento).must_equal '0'
368
- pagamento.codigo_juros = '4'
369
- subject.send(:segmento_p_posicao_118_a_118, pagamento).must_equal '0'
370
- end
371
- end
372
315
  it "#segmento_p_posicao_060_a_060 deve ter 1 digito em branco" do
373
316
  subject.segmento_p_posicao_060_a_060.must_equal ' '
374
317
  end
@@ -0,0 +1,207 @@
1
+ require 'test_helper'
2
+
3
+ describe BrBoleto::Remessa::Cnab240::Sicredi do
4
+ subject { FactoryGirl.build(:remessa_cnab240_sicredi, lotes: lote) }
5
+ let(:pagamento) { FactoryGirl.build(:remessa_pagamento, valor_documento: 879.66) }
6
+ let(:lote) { FactoryGirl.build(:remessa_lote, pagamentos: pagamento) }
7
+
8
+ it "deve herdar da class Base" do
9
+ subject.class.superclass.must_equal BrBoleto::Remessa::Cnab240::Base
10
+ end
11
+
12
+ context "validations" do
13
+ describe 'Validações personalizadas da conta' do
14
+ it 'valid_carteira_required' do
15
+ subject.conta.carteira = ''
16
+ conta_must_be_msg_error(:carteira, :blank)
17
+ end
18
+
19
+ it 'valid_carteira_length' do
20
+ subject.conta.carteira = '1234567890123456'
21
+ conta_must_be_msg_error(:carteira, :custom_length_is, {count: 1})
22
+ end
23
+
24
+ it 'valid_convenio_required' do
25
+ subject.conta.convenio = ''
26
+ conta_must_be_msg_error(:convenio, :blank)
27
+ end
28
+
29
+ it 'valid_convenio_length' do
30
+ subject.conta.convenio = '1234567890123456'
31
+ conta_must_be_msg_error(:convenio, :custom_length_maximum, {count: 5})
32
+ end
33
+
34
+ it 'agencia_required' do
35
+ subject.conta.agencia = ''
36
+ conta_must_be_msg_error(:agencia, :blank)
37
+ end
38
+
39
+ it 'agencia_length' do
40
+ subject.conta.agencia = '1234567890123456'
41
+ conta_must_be_msg_error(:agencia, :custom_length_is, {count: 4})
42
+ end
43
+
44
+ private
45
+
46
+ def conta_must_be_msg_error(attr_validation, msg_key, options_msg={})
47
+ must_be_message_error(:base, "#{BrBoleto::Conta::Sicredi.human_attribute_name(attr_validation)} #{get_message(msg_key, options_msg)}")
48
+ end
49
+ end
50
+ end
51
+
52
+ context "HEADER ARQUIVO" do
53
+ describe "#codigo_convenio" do
54
+ it "deve ter 20 posições" do
55
+ subject.codigo_convenio.size.must_equal 20
56
+ end
57
+ it {subject.codigo_convenio.must_equal ' ' * 20 }
58
+ end
59
+ describe "#informacoes_da_conta" do
60
+ it "deve ter 20 posições" do
61
+ subject.informacoes_da_conta.size.must_equal 20
62
+ end
63
+
64
+ it "1 - Primeira parte = agencia 5 posicoes - ajustados com zeros a esquerda" do
65
+ subject.conta.agencia = '47'
66
+ subject.informacoes_da_conta[0..4].must_equal '00047'
67
+
68
+ subject.conta.agencia = '1234'
69
+ subject.informacoes_da_conta[0..4].must_equal '01234'
70
+ end
71
+
72
+ it "2 - Segunda parte = Espaço em Branco" do
73
+ subject.informacoes_da_conta[5].must_equal " "
74
+ end
75
+
76
+ it "3 - Terceira parte = conta_corrente 12 posicoes - ajustados com zeros a esquerda" do
77
+ subject.conta.conta_corrente = '89755'
78
+ subject.informacoes_da_conta[6..17].must_equal '000000089755'
79
+
80
+ subject.conta.conta_corrente = '1234567890'
81
+ subject.informacoes_da_conta[6..17].must_equal '001234567890'
82
+ end
83
+
84
+ it "4 - Quarta parte = Conta Corrente DV" do
85
+ subject.conta.conta_corrente_dv = '8'
86
+ subject.informacoes_da_conta[18..18].must_equal('8')
87
+ end
88
+
89
+ it "5 - Quinta parte = Espaço em Branco" do
90
+ subject.informacoes_da_conta[19].must_equal(' ')
91
+ end
92
+ end
93
+
94
+ describe "#header_arquivo_posicao_167_a_171" do
95
+ it {subject.header_arquivo_posicao_167_a_171.must_equal '01600'}
96
+ end
97
+
98
+ describe "#header_arquivo_posicao_172_a_191" do
99
+ it {subject.header_arquivo_posicao_172_a_191.must_equal ' ' * 20 }
100
+ end
101
+
102
+ describe "#header_arquivo_posicao_192_a_211" do
103
+ it {subject.header_arquivo_posicao_192_a_211.must_equal ' ' * 20 }
104
+ end
105
+
106
+ describe "#complemento_header_arquivo" do
107
+ it "deve ter 29 posições" do
108
+ subject.complemento_header_arquivo.size.must_equal 29
109
+ end
110
+
111
+ it "2 - Segunda parte = USO FEBRABAN com 25 posições em branco" do
112
+ subject.complemento_header_arquivo[4..28].must_equal ' ' * 25
113
+ end
114
+ end
115
+ end
116
+
117
+ context "HEADER LOTE" do
118
+ describe "#header_lote_posicao_012_a_013" do
119
+ it {subject.header_lote_posicao_012_a_013.must_equal ' ' * 2 }
120
+ end
121
+
122
+ describe "#convenio_lote" do
123
+ it "deve ser preenchido com espaço em branco" do
124
+ subject.convenio_lote(lote).must_equal ' ' * 20
125
+ end
126
+ it "deve ter 20 caracteres" do
127
+ subject.convenio_lote(lote).size.must_equal 20
128
+ end
129
+ end
130
+ end
131
+
132
+ context "SEGMENTO P" do
133
+ describe "#complemento_p" do
134
+ it "deve ter 34 posições" do
135
+ subject.complemento_p(pagamento).size.must_equal 34
136
+ end
137
+
138
+ it "1 - Primeira parte = conta_corrente com 12 posicoes - ajustados com zeros a esquerda" do
139
+ subject.conta.conta_corrente = '1234'
140
+ subject.complemento_p(pagamento)[0..11].must_equal '000000001234'
141
+
142
+ subject.conta.conta_corrente = '264631'
143
+ subject.complemento_p(pagamento)[0..11].must_equal '000000264631'
144
+ end
145
+
146
+ it "2 - Seguna parte = Conta Corrente DV - 1 posicao" do
147
+ subject.conta.conta_corrente_dv = '7'
148
+ subject.complemento_p(pagamento)[12..12].must_equal '7'
149
+ end
150
+
151
+ it "3 - Terceira parte = Espaço em branco" do
152
+ subject.complemento_p(pagamento)[13..13].must_equal ' '
153
+ end
154
+
155
+ it "4 - Quarta parte = Nosso Numero" do
156
+ pagamento.expects(:nosso_numero).returns("132xxxxxD")
157
+ subject.complemento_p(pagamento)[14..33].must_equal '132xxxxxD '
158
+ end
159
+ end
160
+
161
+ describe "#segmento_p_numero_do_documento" do
162
+ it "deve ter 15 posições" do
163
+ subject.segmento_p_numero_do_documento(pagamento).size.must_equal 15
164
+ end
165
+
166
+ it "deve conter o numero do documento 15 posicoes - ajustados com zeros a esquerda" do
167
+ pagamento.expects(:numero_documento).returns("977897")
168
+ subject.segmento_p_numero_do_documento(pagamento).must_equal '0000977897 '
169
+ end
170
+ end
171
+
172
+ describe "#segmento_p_posicao_224_a_224" do
173
+ it {subject.segmento_p_posicao_224_a_224.must_equal '1'}
174
+ end
175
+
176
+ describe "#segmento_p_posicao_225_a_227" do
177
+ it {subject.segmento_p_posicao_225_a_227.must_equal '060'}
178
+ end
179
+ end
180
+
181
+ context "SEGMENTO R" do
182
+ describe "#segmento_r_posicao_066_a_066(pagamento)" do
183
+ it {subject.segmento_r_posicao_066_a_066(pagamento).must_equal '2'}
184
+ end
185
+ end
186
+
187
+ context "TRAILER LOTE" do
188
+ describe "#complemento_trailer_lote" do
189
+ it "deve ter 217 posições" do
190
+ subject.complemento_trailer_lote(lote, 5).size.must_equal 217
191
+ end
192
+
193
+ it "1 - Primeira parte = 92 posições todas preenchidas com zeros (VALORES UTILIZADOS APENAS PARA ARQUIVO DE RETORNO)" do
194
+ subject.complemento_trailer_lote(lote, 5)[0..91].must_equal '0' * 92
195
+ end
196
+
197
+ it "2 - Segunda parte = 8 posições todas preenchidas com zeros (Nr. do aviso de lançamento do crédito referente aos títulos de cobrança)" do
198
+ subject.complemento_trailer_lote(lote, 5)[92..99].must_equal (' ' * 8)
199
+ end
200
+
201
+ it "3 - Terceira parte = EXCLUSIVO FEBRABAN com 117 posicoes em branco" do
202
+ subject.complemento_trailer_lote(lote, 5)[100..216].must_equal (' ' * 117)
203
+ end
204
+ end
205
+ end
206
+
207
+ end