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,196 @@
1
+ require 'test_helper'
2
+
3
+ describe BrBoleto::Remessa::Cnab240::Bradesco do
4
+ subject { FactoryGirl.build(:remessa_cnab240_bradesco, 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.send(:valid_carteira_required).must_equal true
16
+ subject.conta.carteira = ''
17
+ conta_must_be_msg_error(:carteira, :blank)
18
+ end
19
+
20
+ it 'valid_carteira_length' do
21
+ # subject.send(:valid_carteira_length).must_equal 2
22
+ subject.conta.carteira = '1234567890123456'
23
+ conta_must_be_msg_error(:carteira, :custom_length_is, {count: 2})
24
+ end
25
+
26
+ it 'valid_convenio_required' do
27
+ # subject.send(:valid_convenio_required).must_equal true
28
+ subject.conta.convenio = ''
29
+ conta_must_be_msg_error(:convenio, :blank)
30
+ end
31
+
32
+ it 'valid_convenio_length' do
33
+ # subject.send(:valid_convenio_length).must_equal 2
34
+ subject.conta.convenio = '1234567890123456'
35
+ conta_must_be_msg_error(:convenio, :custom_length_maximum, {count: 7})
36
+ end
37
+
38
+ it 'agencia_required' do
39
+ # subject.send(:agencia_required).must_equal true
40
+ subject.conta.agencia = ''
41
+ conta_must_be_msg_error(:agencia, :blank)
42
+ end
43
+
44
+ it 'agencia_length' do
45
+ # subject.send(:agencia_length).must_equal 2
46
+ subject.conta.agencia = '1234567890123456'
47
+ conta_must_be_msg_error(:agencia, :custom_length_is, {count: 4})
48
+ end
49
+
50
+ private
51
+
52
+ def conta_must_be_msg_error(attr_validation, msg_key, options_msg={})
53
+ must_be_message_error(:base, "#{BrBoleto::Conta::Bradesco.human_attribute_name(attr_validation)} #{get_message(msg_key, options_msg)}")
54
+ end
55
+ end
56
+ end
57
+
58
+
59
+ describe "#convenio_lote" do
60
+ it "as 7 primeiras posições deve ser o valor do convenio ajustado com zeros a esquerda" do
61
+ subject.conta.codigo_cedente = '88'
62
+ subject.convenio_lote(lote).must_equal '00000000000000000088'
63
+
64
+ subject.conta.convenio = '7374'
65
+ subject.convenio_lote(lote).must_equal '00000000000000007374'
66
+ end
67
+ it "deve ter 20 caracteres" do
68
+ subject.convenio_lote(lote).size.must_equal 20
69
+ end
70
+ end
71
+
72
+ describe "#informacoes_da_conta" do
73
+ it "deve ter 20 posições" do
74
+ subject.informacoes_da_conta.size.must_equal 20
75
+ end
76
+
77
+ it "1 - Primeira parte = agencia 5 posicoes - ajustados com zeros a esquerda" do
78
+ subject.conta.agencia = '47'
79
+ subject.informacoes_da_conta[0..4].must_equal '00047'
80
+
81
+ subject.conta.agencia = '1234'
82
+ subject.informacoes_da_conta[0..4].must_equal '01234'
83
+ end
84
+
85
+ it "2 - Segunda parte = agencia_dv" do
86
+ subject.conta.agencia_dv = '7'
87
+ subject.informacoes_da_conta[5].must_equal "7"
88
+ end
89
+
90
+ it "3 - Terceira parte = conta_corrente 12 posicoes - ajustados com zeros a esquerda" do
91
+ subject.conta.conta_corrente = '89755'
92
+ subject.informacoes_da_conta[6..17].must_equal '000000089755'
93
+
94
+ subject.conta.conta_corrente = '1234567890'
95
+ subject.informacoes_da_conta[6..17].must_equal '001234567890'
96
+ end
97
+
98
+ it "4 - Quarta parte = Conta Corrente DV" do
99
+ subject.conta.conta_corrente_dv = '8'
100
+ subject.informacoes_da_conta[18..18].must_equal('8')
101
+ end
102
+
103
+ it "5 - Quinta parte = Se o conta_corrente_dv não for 2 digitos deve ter 1 espaço em branco" do
104
+ subject.informacoes_da_conta[19].must_equal(' ')
105
+ end
106
+ end
107
+
108
+ describe "#complemento_header_arquivo" do
109
+ it "deve ter 29 posições" do
110
+ subject.complemento_header_arquivo.size.must_equal 29
111
+ end
112
+
113
+ it "2 - Segunda parte = USO FEBRABAN com 25 posições em branco" do
114
+ subject.complemento_header_arquivo[4..28].must_equal ' ' * 25
115
+ end
116
+ end
117
+
118
+ describe "#complemento_p" do
119
+
120
+ it "deve ter 34 posições" do
121
+ subject.complemento_p(pagamento).size.must_equal 34
122
+ end
123
+
124
+ it "1 - Primeira parte = conta_corrente com 12 posicoes - ajustados com zeros a esquerda" do
125
+ subject.conta.conta_corrente = '1234'
126
+ subject.complemento_p(pagamento)[0..11].must_equal '000000001234'
127
+
128
+ subject.conta.conta_corrente = '264631'
129
+ subject.complemento_p(pagamento)[0..11].must_equal '000000264631'
130
+ end
131
+
132
+ it "2 - Seguna parte = Conta Corrente DV - 1 posicao" do
133
+ subject.conta.conta_corrente_dv = '7'
134
+ subject.complemento_p(pagamento)[12..12].must_equal '7'
135
+ end
136
+
137
+ it "3 - Terceira parte = Se o conta_corrente_dv não for 2 digitos deve ter 1 espaço em branco" do
138
+ subject.complemento_p(pagamento)[13..13].must_equal ' '
139
+ end
140
+
141
+ it "4 - Quarta parte = carteira com 3 posicoes ajustados com zeros a esquerda" do
142
+ subject.conta.conta_corrente_dv = '21'
143
+ subject.complemento_p(pagamento)[14..16].must_equal '021'
144
+ end
145
+
146
+ it "5 - Quinta parte = Exclusivo Banco com 5 posicoes preenchidas com zeros" do
147
+ subject.complemento_p(pagamento)[17..21].must_equal '00000'
148
+ end
149
+
150
+ it "6 - Sexta parte = Numero documento com 11 posicoes" do
151
+ pagamento.numero_documento = '89378'
152
+ subject.complemento_p(pagamento)[22..32].must_equal '00000089378'
153
+
154
+ pagamento.numero_documento = '12345678901'
155
+ subject.complemento_p(pagamento)[22..32].must_equal '12345678901'
156
+ end
157
+
158
+ it "7 - Setima parte = numero_documento DV com 1 posicao - Deve ser o ultimo digito do nosso numero" do
159
+ pagamento.nosso_numero = '99/99999999999-9'
160
+ subject.complemento_p(pagamento)[33..33].must_equal '9'
161
+
162
+ pagamento.nosso_numero = '99/99999999999-0'
163
+ subject.complemento_p(pagamento)[33..33].must_equal '0'
164
+ end
165
+
166
+ end
167
+
168
+ describe "#segmento_p_numero_do_documento" do
169
+ it "deve ter 15 posições" do
170
+ subject.segmento_p_numero_do_documento(pagamento).size.must_equal 15
171
+ end
172
+
173
+ it "deve conter o numero do documento 15 posicoes - ajustados com zeros a esquerda" do
174
+ pagamento.expects(:numero_documento).returns("977897")
175
+ subject.segmento_p_numero_do_documento(pagamento).must_equal '000000000977897'
176
+ end
177
+ end
178
+
179
+ describe "#complemento_trailer_lote" do
180
+ it "deve ter 217 posições" do
181
+ subject.complemento_trailer_lote(lote, 5).size.must_equal 217
182
+ end
183
+
184
+ it "1 - Primeira parte = 92 posições todas preenchidas com zeros (VALORES UTILIZADOS APENAS PARA ARQUIVO DE RETORNO)" do
185
+ subject.complemento_trailer_lote(lote, 5)[0..91].must_equal '0' * 92
186
+ end
187
+
188
+ 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
189
+ subject.complemento_trailer_lote(lote, 5)[92..99].must_equal ('0' * 8)
190
+ end
191
+
192
+ it "3 - Terceira parte = EXCLUSIVO FEBRABAN com 117 posicoes em branco" do
193
+ subject.complemento_trailer_lote(lote, 5)[100..216].must_equal (' ' * 117)
194
+ end
195
+ end
196
+ end
@@ -233,4 +233,55 @@ describe BrBoleto::Remessa::Cnab240::Caixa do
233
233
  subject.complemento_trailer_lote(lote, 5)[69..216].must_equal (' ' * 148)
234
234
  end
235
235
  end
236
+
237
+ describe 'Geração do arquivo' do
238
+ let(:conta) do
239
+ {
240
+ razao_social: 'EMPRESA EMITENTE',
241
+ cpf_cnpj: '33.486.451/0001-30',
242
+ carteira: '14',
243
+ agencia: '7506',
244
+ codigo_cedente: '828196',
245
+ conta_corrente: '1354843'
246
+ }
247
+ end
248
+ let(:pagador) {
249
+ {
250
+ nome: 'Benjamin Francisco Marcos Vinicius Fernandes',
251
+ cpf_cnpj: '787.933.211-12',
252
+ endereco: 'Rua Principal s/n 881',
253
+ bairro: 'Centro',
254
+ cep: '79210-972',
255
+ cidade: 'Anastácio',
256
+ uf: 'MS',
257
+ }
258
+ }
259
+ let(:pagamento) {
260
+ BrBoleto::Remessa::Pagamento.new({
261
+ nosso_numero: '140000000000000029',
262
+ numero_documento: '00000000002',
263
+ data_vencimento: Date.parse('14/11/2016'),
264
+ valor_documento: 10.00,
265
+ pagador: pagador,
266
+ especie_titulo: '02',
267
+ codigo_juros: '0',
268
+ data_juros: Date.parse('16/11/2016'),
269
+ valor_juros: 0.00,
270
+ codigo_multa: '0',
271
+ data_multa: Date.parse('15/11/2016'),
272
+ valor_multa: 0.00,
273
+ data_emissao: Date.parse('14/11/2016'),
274
+ })
275
+ }
276
+ let(:lote) { BrBoleto::Remessa::Lote.new(pagamentos: pagamento) }
277
+ it "deve gerar o arquivo de remessa corretamente com as informações passadas" do
278
+ remessa = BrBoleto::Remessa::Cnab240::Caixa.new({
279
+ data_hora_arquivo: Time.parse('14/11/2016 09:31:47'),
280
+ sequencial_remessa: 1,
281
+ conta: conta,
282
+ lotes: [lote],
283
+ })
284
+ remessa.dados_do_arquivo.must_equal read_fixture('remessa/cnab240/caixa.rem')
285
+ end
286
+ end
236
287
  end
@@ -0,0 +1,242 @@
1
+ require 'test_helper'
2
+
3
+ describe BrBoleto::Remessa::Cnab240::Cecred do
4
+ subject { FactoryGirl.build(:remessa_cnab240_cecred, 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: 6})
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::Cecred.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 "as 7 primeiras posições deve ser o valor do convenio ajustado com zeros a esquerda" do
55
+ subject.conta.codigo_cedente = '88'
56
+ subject.convenio_lote(lote).must_equal '000088 '
57
+
58
+ subject.conta.convenio = '7374'
59
+ subject.convenio_lote(lote).must_equal '007374 '
60
+ end
61
+ it "deve ter 20 caracteres" do
62
+ subject.convenio_lote(lote).size.must_equal 20
63
+ end
64
+ end
65
+
66
+ describe "#informacoes_da_conta" do
67
+ it "deve ter 20 posições" do
68
+ subject.informacoes_da_conta.size.must_equal 20
69
+ end
70
+
71
+ it "1 - Primeira parte = agencia 5 posicoes - ajustados com zeros a esquerda" do
72
+ subject.conta.agencia = '47'
73
+ subject.informacoes_da_conta[0..4].must_equal '00047'
74
+
75
+ subject.conta.agencia = '1234'
76
+ subject.informacoes_da_conta[0..4].must_equal '01234'
77
+ end
78
+
79
+ it "2 - Segunda parte = agencia_dv" do
80
+ subject.conta.agencia_dv = '7'
81
+ subject.informacoes_da_conta[5].must_equal "7"
82
+ end
83
+
84
+ it "3 - Terceira parte = conta_corrente 12 posicoes - ajustados com zeros a esquerda" do
85
+ subject.conta.conta_corrente = '89755'
86
+ subject.informacoes_da_conta[6..17].must_equal '000000089755'
87
+
88
+ subject.conta.conta_corrente = '1234567890'
89
+ subject.informacoes_da_conta[6..17].must_equal '001234567890'
90
+ end
91
+
92
+ it "4 - Quarta parte = Conta Corrente DV" do
93
+ subject.conta.conta_corrente_dv = '8'
94
+ subject.informacoes_da_conta[18..18].must_equal('8')
95
+ end
96
+
97
+ it "5 - Quinta parte = Se o conta_corrente_dv não for 2 digitos deve ter 1 espaço em branco" do
98
+ subject.informacoes_da_conta[19].must_equal(' ')
99
+ end
100
+ end
101
+
102
+ describe "#complemento_header_arquivo" do
103
+ it "deve ter 29 posições" do
104
+ subject.complemento_header_arquivo.size.must_equal 29
105
+ end
106
+
107
+ it "2 - Segunda parte = USO FEBRABAN com 25 posições em branco" do
108
+ subject.complemento_header_arquivo[4..28].must_equal ' ' * 25
109
+ end
110
+ end
111
+
112
+ describe "#complemento_p" do
113
+
114
+ it "deve ter 34 posições" do
115
+ subject.complemento_p(pagamento).size.must_equal 34
116
+ end
117
+
118
+ it "1 - Primeira parte = conta_corrente com 12 posicoes - ajustados com zeros a esquerda" do
119
+ subject.conta.conta_corrente = '1234'
120
+ subject.complemento_p(pagamento)[0..11].must_equal '000000001234'
121
+
122
+ subject.conta.conta_corrente = '264631'
123
+ subject.complemento_p(pagamento)[0..11].must_equal '000000264631'
124
+ end
125
+
126
+ it "2 - Seguna parte = Conta Corrente DV - 1 posicao" do
127
+ subject.conta.conta_corrente_dv = '7'
128
+ subject.complemento_p(pagamento)[12..12].must_equal '7'
129
+ end
130
+
131
+ it "3 - Terceira parte = Se o conta_corrente_dv não for 2 digitos deve ter 1 espaço em branco" do
132
+ subject.complemento_p(pagamento)[13..13].must_equal ' '
133
+ end
134
+
135
+ it "4 - Quarta parte = Identificação do Título na Cooperativa " do
136
+ pagamento.nosso_numero = '99999998000000001'
137
+ subject.complemento_p(pagamento)[14..33].must_equal '99999998000000001 '
138
+ end
139
+
140
+ end
141
+
142
+ describe "#segmento_p_numero_do_documento" do
143
+ it "deve ter 15 posições" do
144
+ subject.segmento_p_numero_do_documento(pagamento).size.must_equal 15
145
+ end
146
+
147
+ it "deve conter o numero do documento 15 posicoes - ajustados com zeros a esquerda" do
148
+ pagamento.expects(:numero_documento).returns("977897")
149
+ subject.segmento_p_numero_do_documento(pagamento).must_equal '000000000977897'
150
+ end
151
+ end
152
+
153
+ describe "#segmento_p_posicao_221_a_221(pagamento)" do
154
+ it "deve ter 1 posição" do
155
+ subject.segmento_p_posicao_221_a_221(pagamento).size.must_equal 1
156
+ end
157
+
158
+ it "deve conter o Código para Protesto" do
159
+ subject.segmento_p_posicao_221_a_221(pagamento).must_equal '3'
160
+ end
161
+ end
162
+
163
+ describe "#segmento_p_posicao_224_a_224" do
164
+ it "deve ter 1 posição" do
165
+ subject.segmento_p_posicao_224_a_224.size.must_equal 1
166
+ end
167
+
168
+ it "deve conter o Código para Baixa/Devolução" do
169
+ subject.segmento_p_posicao_224_a_224.must_equal '2'
170
+ end
171
+ end
172
+
173
+
174
+ describe "#complemento_trailer_lote" do
175
+ it "deve ter 217 posições" do
176
+ subject.complemento_trailer_lote(lote, 5).size.must_equal 217
177
+ end
178
+
179
+ it "1 - Primeira parte = 92 posições todas preenchidas com zeros (VALORES UTILIZADOS APENAS PARA ARQUIVO DE RETORNO)" do
180
+ subject.complemento_trailer_lote(lote, 5)[0..91].must_equal '0' * 92
181
+ end
182
+
183
+ 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
184
+ subject.complemento_trailer_lote(lote, 5)[92..99].must_equal ('0' * 8)
185
+ end
186
+
187
+ it "3 - Terceira parte = EXCLUSIVO FEBRABAN com 117 posicoes em branco" do
188
+ subject.complemento_trailer_lote(lote, 5)[100..216].must_equal (' ' * 117)
189
+ end
190
+ end
191
+
192
+ describe 'Geração do arquivo' do
193
+ let(:conta) do
194
+ {
195
+ razao_social: 'EMPRESA EMITENTE',
196
+ cpf_cnpj: '33.486.451/0001-30',
197
+ carteira: '1',
198
+ agencia: '7506',
199
+ codigo_cedente: '828196',
200
+ conta_corrente: '1354843'
201
+ }
202
+ end
203
+ let(:pagador) {
204
+ {
205
+ nome: 'Benjamin Francisco Marcos Vinicius Fernandes',
206
+ cpf_cnpj: '787.933.211-12',
207
+ endereco: 'Rua Principal s/n 881',
208
+ bairro: 'Centro',
209
+ cep: '79210-972',
210
+ cidade: 'Anastácio',
211
+ uf: 'MS',
212
+ }
213
+ }
214
+ let(:pagamento) {
215
+ BrBoleto::Remessa::Pagamento.new({
216
+ nosso_numero: '09142444000000001',
217
+ numero_documento: '000000001',
218
+ data_vencimento: Date.parse('15/12/2016'),
219
+ valor_documento: 10.00,
220
+ pagador: pagador,
221
+ especie_titulo: '02',
222
+ codigo_juros: '0',
223
+ data_juros: Date.parse('17/12/2016'),
224
+ valor_juros: 0.00,
225
+ codigo_multa: '0',
226
+ data_multa: Date.parse('16/12/2016'),
227
+ valor_multa: 0.00,
228
+ data_emissao: Date.parse('08/11/2016'),
229
+ })
230
+ }
231
+ let(:lote) { BrBoleto::Remessa::Lote.new(pagamentos: pagamento) }
232
+ it "deve gerar o arquivo de remessa corretamente com as informações passadas" do
233
+ remessa = BrBoleto::Remessa::Cnab240::Cecred.new({
234
+ data_hora_arquivo: Time.parse('08/11/2016 09:31:47'),
235
+ sequencial_remessa: 1,
236
+ conta: conta,
237
+ lotes: [lote],
238
+ })
239
+ remessa.dados_do_arquivo.must_equal read_fixture('remessa/cnab240/cecred.rem')
240
+ end
241
+ end
242
+ end