br_boleto 1.2.2 → 2.0.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 (104) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Gemfile.lock +1 -1
  4. data/README.markdown +278 -98
  5. data/br_boleto.gemspec +5 -3
  6. data/lib/br_boleto/active_model_base.rb +1 -1
  7. data/lib/br_boleto/association/have_conta.rb +109 -0
  8. data/lib/br_boleto/association/have_pagador.rb +38 -0
  9. data/lib/br_boleto/association/have_pagamentos.rb +44 -0
  10. data/lib/br_boleto/boleto/base.rb +50 -379
  11. data/lib/br_boleto/boleto/caixa.rb +28 -143
  12. data/lib/br_boleto/boleto/sicoob.rb +24 -144
  13. data/lib/br_boleto/conta/base.rb +288 -0
  14. data/lib/br_boleto/conta/caixa.rb +109 -0
  15. data/lib/br_boleto/conta/sicoob.rb +64 -0
  16. data/lib/br_boleto/helper/default_codes.rb +33 -0
  17. data/lib/br_boleto/helper/format_value.rb +1 -0
  18. data/lib/br_boleto/helper/number.rb +30 -0
  19. data/lib/br_boleto/pagador.rb +82 -0
  20. data/lib/br_boleto/remessa/base.rb +28 -50
  21. data/lib/br_boleto/remessa/cnab240/base.rb +22 -131
  22. data/lib/br_boleto/remessa/cnab240/caixa.rb +16 -62
  23. data/lib/br_boleto/remessa/cnab240/helper/header_arquivo.rb +7 -7
  24. data/lib/br_boleto/remessa/cnab240/helper/header_lote.rb +6 -6
  25. data/lib/br_boleto/remessa/cnab240/helper/segmento_p.rb +22 -22
  26. data/lib/br_boleto/remessa/cnab240/helper/segmento_q.rb +16 -16
  27. data/lib/br_boleto/remessa/cnab240/helper/segmento_r.rb +3 -3
  28. data/lib/br_boleto/remessa/cnab240/helper/segmento_s.rb +3 -3
  29. data/lib/br_boleto/remessa/cnab240/helper/trailer_arquivo.rb +3 -3
  30. data/lib/br_boleto/remessa/cnab240/helper/trailer_lote.rb +3 -3
  31. data/lib/br_boleto/remessa/cnab240/sicoob.rb +36 -73
  32. data/lib/br_boleto/remessa/cnab400/base.rb +95 -0
  33. data/lib/br_boleto/remessa/cnab400/helper/detalhe.rb +136 -0
  34. data/lib/br_boleto/remessa/cnab400/helper/header.rb +114 -0
  35. data/lib/br_boleto/remessa/cnab400/helper/trailer.rb +50 -0
  36. data/lib/br_boleto/remessa/cnab400/sicoob.rb +249 -0
  37. data/lib/br_boleto/remessa/lote.rb +1 -23
  38. data/lib/br_boleto/remessa/pagamento.rb +188 -51
  39. data/lib/br_boleto/retorno/base.rb +9 -0
  40. data/lib/br_boleto/retorno/cnab240/base.rb +2 -10
  41. data/lib/br_boleto/retorno/cnab400/base.rb +48 -0
  42. data/lib/br_boleto/retorno/cnab400/sicoob.rb +42 -0
  43. data/lib/br_boleto/retorno/pagamento.rb +12 -6
  44. data/lib/br_boleto/string_methods.rb +8 -2
  45. data/lib/br_boleto/validations.rb +19 -0
  46. data/lib/br_boleto/version.rb +3 -3
  47. data/lib/br_boleto.rb +38 -8
  48. data/lib/config/locales/br-boleto-en.yml +89 -0
  49. data/lib/config/locales/br-boleto-pt-BR.yml +89 -0
  50. data/test/br_boleto/association/have_conta_test.rb +319 -0
  51. data/test/br_boleto/association/have_pagador_test.rb +110 -0
  52. data/test/br_boleto/association/have_pagamentos_test.rb +113 -0
  53. data/test/br_boleto/boleto/base_test.rb +127 -201
  54. data/test/br_boleto/boleto/caixa_test.rb +58 -72
  55. data/test/br_boleto/boleto/sicoob_test.rb +88 -147
  56. data/test/br_boleto/conta/base_test.rb +490 -0
  57. data/test/br_boleto/conta/caixa_test.rb +154 -0
  58. data/test/br_boleto/conta/sicoob_test.rb +144 -0
  59. data/test/br_boleto/helper/number_test.rb +29 -0
  60. data/test/br_boleto/pagador_test.rb +158 -0
  61. data/test/br_boleto/remessa/base_test.rb +37 -62
  62. data/test/br_boleto/remessa/cnab240/base_test.rb +75 -95
  63. data/test/br_boleto/remessa/cnab240/caixa_test.rb +61 -96
  64. data/test/br_boleto/remessa/cnab240/helper/header_arquivo_test.rb +11 -11
  65. data/test/br_boleto/remessa/cnab240/helper/header_lote_test.rb +8 -8
  66. data/test/br_boleto/remessa/cnab240/helper/segmento_p_test.rb +17 -15
  67. data/test/br_boleto/remessa/cnab240/helper/segmento_q_test.rb +13 -13
  68. data/test/br_boleto/remessa/cnab240/helper/segmento_r_test.rb +2 -2
  69. data/test/br_boleto/remessa/cnab240/helper/segmento_s_test.rb +3 -3
  70. data/test/br_boleto/remessa/cnab240/helper/trailer_arquivo_test.rb +1 -1
  71. data/test/br_boleto/remessa/cnab240/helper/trailer_lote_test.rb +1 -1
  72. data/test/br_boleto/remessa/cnab240/sicoob_test.rb +136 -131
  73. data/test/br_boleto/remessa/cnab400/base_test.rb +263 -0
  74. data/test/br_boleto/remessa/cnab400/sicoob_test.rb +179 -0
  75. data/test/br_boleto/remessa/lote_test.rb +2 -41
  76. data/test/br_boleto/remessa/pagamento_test.rb +186 -188
  77. data/test/br_boleto/retorno/base_test.rb +0 -1
  78. data/test/br_boleto/retorno/cnab240/base_test.rb +12 -11
  79. data/test/br_boleto/retorno/cnab240/caixa_test.rb +11 -11
  80. data/test/br_boleto/retorno/cnab240/sicoob_test.rb +11 -11
  81. data/test/br_boleto/retorno/cnab400/sicoob_test.rb +227 -0
  82. data/test/br_boleto/retorno/pagamento_test.rb +6 -6
  83. data/test/factories/boleto/base.rb +9 -7
  84. data/test/factories/boleto/boleto_caixa.rb +2 -9
  85. data/test/factories/boleto/boleto_sicoob.rb +10 -8
  86. data/test/factories/conta/base.rb +10 -0
  87. data/test/factories/conta/caixa.rb +15 -0
  88. data/test/factories/conta/sicoob.rb +16 -0
  89. data/test/factories/pagador.rb +15 -0
  90. data/test/factories/remessa/base.rb +0 -6
  91. data/test/factories/remessa/cnab240/base.rb +0 -10
  92. data/test/factories/remessa/cnab240/caixa.rb +1 -6
  93. data/test/factories/remessa/cnab240/sicoob.rb +1 -10
  94. data/test/factories/remessa/cnab400/base.rb +8 -0
  95. data/test/factories/remessa/cnab400/sicoob.rb +8 -0
  96. data/test/factories/remessa/pagamento.rb +8 -7
  97. data/test/fixtures/remessa/cnab240/sicoob.rem +8 -0
  98. data/test/{files → fixtures}/retorno/cnab240/caixa.ret +0 -0
  99. data/test/{files → fixtures}/retorno/cnab240/padrao240.ret +0 -0
  100. data/test/fixtures/retorno/cnab400/sicoob.ret +7 -0
  101. data/test/inheritance/boleto_test.rb +4 -1
  102. data/test/inheritance/sicoob_test.rb +23 -7
  103. data/test/test_helper.rb +70 -0
  104. metadata +63 -6
@@ -0,0 +1,490 @@
1
+ require 'test_helper'
2
+
3
+ describe BrBoleto::Remessa::Base do
4
+ subject { FactoryGirl.build(:conta_base) }
5
+
6
+ describe "Validations" do
7
+ it { must validate_presence_of(:agencia) }
8
+ it { must validate_presence_of(:razao_social) }
9
+ it { must validate_presence_of(:cpf_cnpj) }
10
+
11
+ context '#endereco' do
12
+ it "por padrão não deve validar nada" do
13
+ subject.endereco = nil
14
+ wont_be_message_error(:endereco)
15
+ end
16
+
17
+ context "#valid_endereco_required" do
18
+ it "quando setado deve validar a obrigatoriedade" do
19
+ wont validate_presence_of(:endereco)
20
+
21
+ subject.valid_endereco_required = true
22
+ must validate_presence_of(:endereco)
23
+ end
24
+ end
25
+ end
26
+
27
+ context "#conta_corrente" do
28
+ it "por padrão não deve validar nada" do
29
+ subject.conta_corrente = nil
30
+ wont_be_message_error(:conta_corrente)
31
+ end
32
+
33
+ context "#valid_conta_corrente_required" do
34
+ it "quando setado deve validar a obrigatoriedade" do
35
+ wont validate_presence_of(:conta_corrente)
36
+
37
+ subject.valid_conta_corrente_required = true
38
+ must validate_presence_of(:conta_corrente)
39
+ end
40
+ end
41
+ context "#valid_conta_corrente_length" do
42
+ it "quando setado um valor deve validar através do valor setado" do
43
+ subject.valid_conta_corrente_length = 7
44
+ subject.conta_corrente = '12345678'
45
+ must_be_message_error(:conta_corrente, :custom_length_is, {count: 7})
46
+ subject.conta_corrente = '1234567'
47
+ wont_be_message_error(:conta_corrente, :custom_length_is, {count: 7})
48
+ end
49
+ end
50
+ context "#valid_conta_corrente_minimum" do
51
+ it "quando setado um valor deve validar através do valor setado" do
52
+ subject.valid_conta_corrente_minimum = 5
53
+ subject.conta_corrente = '1'
54
+ must_be_message_error(:conta_corrente, :custom_length_minimum, {count: 5})
55
+ subject.conta_corrente = '1234567'
56
+ wont_be_message_error(:conta_corrente, :custom_length_minimum, {count: 5})
57
+ end
58
+ end
59
+ context "#valid_conta_corrente_maximum" do
60
+ it "quando setado um valor deve validar através do valor setado" do
61
+ subject.valid_conta_corrente_maximum = 3
62
+ subject.conta_corrente = '1234'
63
+ must_be_message_error(:conta_corrente, :custom_length_maximum, {count: 3})
64
+ subject.conta_corrente = '123'
65
+ wont_be_message_error(:conta_corrente, :custom_length_maximum, {count: 3})
66
+ end
67
+ end
68
+ context "sempre retorna o valor ajustado para o tamanho máximo" do
69
+ it "se tiver valor setado deve formatar o tamanho maximo" do
70
+ subject.valid_conta_corrente_maximum = 5
71
+ subject.conta_corrente = '123'
72
+ subject.conta_corrente.must_equal '00123'
73
+
74
+ subject.valid_conta_corrente_maximum = 7
75
+ subject.conta_corrente.must_equal '0000123'
76
+ end
77
+ it "se não tiver valor setado não ajusta os digitos para o tamanho maximo" do
78
+ subject.valid_conta_corrente_maximum = 5
79
+ subject.conta_corrente = ''
80
+ subject.conta_corrente.must_equal ''
81
+ end
82
+ it "se não tiver tamanho maximo definido deve retornar o valor setado" do
83
+ subject.valid_conta_corrente_maximum = nil
84
+ subject.conta_corrente = 456
85
+ subject.conta_corrente.must_equal '456'
86
+ end
87
+ end
88
+ end
89
+
90
+ context "#modalidade" do
91
+ it "por padrão não deve validar nada" do
92
+ subject.modalidade = nil
93
+ wont_be_message_error(:modalidade)
94
+ end
95
+
96
+ context "#valid_modalidade_required" do
97
+ it "quando setado deve validar a obrigatoriedade" do
98
+ wont validate_presence_of(:modalidade)
99
+
100
+ subject.valid_modalidade_required = true
101
+ must validate_presence_of(:modalidade)
102
+ end
103
+ end
104
+ context "#valid_modalidade_length" do
105
+ it "quando setado um valor deve validar através do valor setado" do
106
+ subject.valid_modalidade_length = 7
107
+ subject.modalidade = '12345678'
108
+ must_be_message_error(:modalidade, :custom_length_is, {count: 7})
109
+ subject.modalidade = '1234567'
110
+ wont_be_message_error(:modalidade, :custom_length_is, {count: 7})
111
+ end
112
+ end
113
+ context "#valid_modalidade_minimum" do
114
+ it "quando setado um valor deve validar através do valor setado" do
115
+ subject.valid_modalidade_minimum = 5
116
+ subject.modalidade = '1'
117
+ must_be_message_error(:modalidade, :custom_length_minimum, {count: 5})
118
+ subject.modalidade = '1234567'
119
+ wont_be_message_error(:modalidade, :custom_length_minimum, {count: 5})
120
+ end
121
+ end
122
+ context "#valid_modalidade_maximum" do
123
+ it "quando setado um valor deve validar através do valor setado" do
124
+ subject.valid_modalidade_maximum = 3
125
+ subject.modalidade = '1234'
126
+ must_be_message_error(:modalidade, :custom_length_maximum, {count: 3})
127
+ subject.modalidade = '123'
128
+ wont_be_message_error(:modalidade, :custom_length_maximum, {count: 3})
129
+ end
130
+ end
131
+
132
+ context "#valid_modalidade_inclusion" do
133
+ it "deve validar que o valor deve estar entre um dos valores passados" do
134
+ subject.valid_modalidade_inclusion = 3
135
+ subject.modalidade = '4'
136
+ must_be_message_error(:modalidade, :custom_inclusion, {list: '3'})
137
+ subject.valid_modalidade_inclusion = [1,2,'03']
138
+ subject.modalidade = '04'
139
+ must_be_message_error(:modalidade, :custom_inclusion, {list: '1, 2, 03'})
140
+
141
+ subject.modalidade = '2'
142
+ wont_be_message_error(:modalidade)
143
+ end
144
+ end
145
+
146
+ context "sempre retorna o valor ajustado para o tamanho máximo" do
147
+ it "se tiver valor setado deve formatar o tamanho maximo" do
148
+ subject.valid_modalidade_maximum = 5
149
+ subject.modalidade = '123'
150
+ subject.modalidade.must_equal '00123'
151
+
152
+ subject.valid_modalidade_maximum = 7
153
+ subject.modalidade.must_equal '0000123'
154
+ end
155
+ it "se não tiver valor setado não ajusta os digitos para o tamanho maximo" do
156
+ subject.valid_modalidade_maximum = 5
157
+ subject.modalidade = ''
158
+ subject.modalidade.must_equal ''
159
+ end
160
+ it "se não tiver tamanho maximo definido deve retornar o valor setado" do
161
+ subject.valid_modalidade_maximum = nil
162
+ subject.modalidade = 456
163
+ subject.modalidade.must_equal '456'
164
+ end
165
+ end
166
+ end
167
+
168
+ context "#codigo_cedente" do
169
+ it "por padrão não deve validar nada" do
170
+ subject.codigo_cedente = nil
171
+ wont_be_message_error(:codigo_cedente)
172
+ wont_be_message_error(:convenio)
173
+ end
174
+
175
+ context "#valid_codigo_cedente_required" do
176
+ it "quando setado deve validar a obrigatoriedade" do
177
+ wont validate_presence_of(:convenio)
178
+
179
+ subject.valid_codigo_cedente_required = true
180
+ must validate_presence_of(:convenio)
181
+ end
182
+ end
183
+ context "#valid_codigo_cedente_length" do
184
+ it "quando setado um valor deve validar através do valor setado" do
185
+ subject.valid_codigo_cedente_length = 7
186
+ subject.codigo_cedente = '12345678'
187
+ must_be_message_error(:convenio, :custom_length_is, {count: 7})
188
+ subject.codigo_cedente = '1234567'
189
+ wont_be_message_error(:convenio, :custom_length_is, {count: 7})
190
+ end
191
+ end
192
+ context "#valid_codigo_cedente_minimum" do
193
+ it "quando setado um valor deve validar através do valor setado" do
194
+ subject.valid_codigo_cedente_minimum = 5
195
+ subject.codigo_cedente = '1'
196
+ must_be_message_error(:convenio, :custom_length_minimum, {count: 5})
197
+ subject.codigo_cedente = '1234567'
198
+ wont_be_message_error(:convenio, :custom_length_minimum, {count: 5})
199
+ end
200
+ end
201
+ context "#valid_codigo_cedente_maximum" do
202
+ it "quando setado um valor deve validar através do valor setado" do
203
+ subject.valid_codigo_cedente_maximum = 3
204
+ subject.codigo_cedente = '1234'
205
+ must_be_message_error(:convenio, :custom_length_maximum, {count: 3})
206
+ subject.codigo_cedente = '123'
207
+ wont_be_message_error(:convenio, :custom_length_maximum, {count: 3})
208
+ end
209
+ end
210
+ end
211
+
212
+ context "#carteira" do
213
+ it "por padrão não deve validar nada" do
214
+ subject.carteira = nil
215
+ wont_be_message_error(:carteira)
216
+ end
217
+
218
+ context "#valid_carteira_required" do
219
+ it "quando setado deve validar a obrigatoriedade" do
220
+ wont validate_presence_of(:carteira)
221
+
222
+ subject.valid_carteira_required = true
223
+ must validate_presence_of(:carteira)
224
+ end
225
+ end
226
+ context "#valid_carteira_length" do
227
+ it "quando setado um valor deve validar através do valor setado" do
228
+ subject.valid_carteira_length = 7
229
+ subject.carteira = '12345678'
230
+ must_be_message_error(:carteira, :custom_length_is, {count: 7})
231
+ subject.carteira = '1234567'
232
+ wont_be_message_error(:carteira, :custom_length_is, {count: 7})
233
+ end
234
+ end
235
+ context "#valid_carteira_minimum" do
236
+ it "quando setado um valor deve validar através do valor setado" do
237
+ subject.valid_carteira_minimum = 5
238
+ subject.carteira = '1'
239
+ must_be_message_error(:carteira, :custom_length_minimum, {count: 5})
240
+ subject.carteira = '1234567'
241
+ wont_be_message_error(:carteira, :custom_length_minimum, {count: 5})
242
+ end
243
+ end
244
+ context "#valid_carteira_maximum" do
245
+ it "quando setado um valor deve validar através do valor setado" do
246
+ subject.valid_carteira_maximum = 3
247
+ subject.carteira = '1234'
248
+ must_be_message_error(:carteira, :custom_length_maximum, {count: 3})
249
+ subject.carteira = '123'
250
+ wont_be_message_error(:carteira, :custom_length_maximum, {count: 3})
251
+ end
252
+ end
253
+ context "#valid_carteira_inclusion" do
254
+ it "deve validar que o valor deve estar entre um dos valores passados" do
255
+ subject.valid_carteira_inclusion = 3
256
+ subject.carteira = '4'
257
+ must_be_message_error(:carteira, :custom_inclusion, {list: '3'})
258
+ subject.valid_carteira_inclusion = [1,2,'03']
259
+ subject.carteira = '04'
260
+ must_be_message_error(:carteira, :custom_inclusion, {list: '1, 2, 03'})
261
+
262
+ subject.carteira = '2'
263
+ wont_be_message_error(:carteira)
264
+ end
265
+ end
266
+ context "sempre retorna o valor ajustado para o tamanho máximo" do
267
+ it "se tiver valor setado deve formatar o tamanho maximo" do
268
+ subject.valid_carteira_maximum = 5
269
+ subject.carteira = '123'
270
+ subject.carteira.must_equal '00123'
271
+
272
+ subject.valid_carteira_maximum = 7
273
+ subject.carteira.must_equal '0000123'
274
+ end
275
+ it "se não tiver valor setado não ajusta os digitos para o tamanho maximo" do
276
+ subject.valid_carteira_maximum = 5
277
+ subject.carteira = ''
278
+ subject.carteira.must_equal ''
279
+ end
280
+ it "se não tiver tamanho maximo definido deve retornar o valor setado" do
281
+ subject.valid_carteira_maximum = nil
282
+ subject.carteira = 456
283
+ subject.carteira.must_equal '456'
284
+ end
285
+ end
286
+ end
287
+
288
+ context "#convenio" do
289
+ it "por padrão não deve validar nada" do
290
+ subject.convenio = nil
291
+ wont_be_message_error(:convenio)
292
+ end
293
+
294
+ context "#valid_convenio_required" do
295
+ it "quando setado deve validar a obrigatoriedade" do
296
+ wont validate_presence_of(:convenio)
297
+
298
+ subject.valid_convenio_required = true
299
+ must validate_presence_of(:convenio)
300
+ end
301
+ end
302
+ context "#valid_convenio_length" do
303
+ it "quando setado um valor deve validar através do valor setado" do
304
+ subject.valid_convenio_length = 7
305
+ subject.convenio = '12345678'
306
+ must_be_message_error(:convenio, :custom_length_is, {count: 7})
307
+ subject.convenio = '1234567'
308
+ wont_be_message_error(:convenio, :custom_length_is, {count: 7})
309
+ end
310
+ end
311
+ context "#valid_convenio_minimum" do
312
+ it "quando setado um valor deve validar através do valor setado" do
313
+ subject.valid_convenio_minimum = 5
314
+ subject.convenio = '1'
315
+ must_be_message_error(:convenio, :custom_length_minimum, {count: 5})
316
+ subject.convenio = '1234567'
317
+ wont_be_message_error(:convenio, :custom_length_minimum, {count: 5})
318
+ end
319
+ end
320
+ context "#valid_convenio_maximum" do
321
+ it "quando setado um valor deve validar através do valor setado" do
322
+ subject.valid_convenio_maximum = 3
323
+ subject.convenio = '1234'
324
+ must_be_message_error(:convenio, :custom_length_maximum, {count: 3})
325
+ subject.convenio = '123'
326
+ wont_be_message_error(:convenio, :custom_length_maximum, {count: 3})
327
+ end
328
+ end
329
+ context "#valid_convenio_inclusion" do
330
+ it "deve validar que o valor deve estar entre um dos valores passados" do
331
+ subject.valid_convenio_inclusion = 3
332
+ subject.convenio = '4'
333
+ must_be_message_error(:convenio, :custom_inclusion, {list: '3'})
334
+ subject.valid_convenio_inclusion = [1,2,'03']
335
+ subject.convenio = '04'
336
+ must_be_message_error(:convenio, :custom_inclusion, {list: '1, 2, 03'})
337
+
338
+ subject.convenio = '2'
339
+ wont_be_message_error(:convenio)
340
+ end
341
+ end
342
+ context "sempre retorna o valor ajustado para o tamanho máximo" do
343
+ it "se tiver valor setado deve formatar o tamanho maximo" do
344
+ subject.valid_convenio_maximum = 5
345
+ subject.convenio = '123'
346
+ subject.convenio.must_equal '00123'
347
+
348
+ subject.valid_convenio_maximum = 7
349
+ subject.convenio.must_equal '0000123'
350
+ end
351
+ it "se não tiver valor setado não ajusta os digitos para o tamanho maximo" do
352
+ subject.valid_convenio_maximum = 5
353
+ subject.convenio = ''
354
+ subject.convenio.must_equal ''
355
+ end
356
+ it "se não tiver tamanho maximo definido deve retornar o valor setado" do
357
+ subject.valid_convenio_maximum = nil
358
+ subject.convenio = 456
359
+ subject.convenio.must_equal '456'
360
+ end
361
+ end
362
+ end
363
+ end
364
+
365
+ it "carteira deve retornar sempre uma string se tiver um valor" do
366
+ subject.carteira = 123
367
+ subject.carteira.must_equal '123'
368
+ subject.carteira = nil
369
+ subject.carteira.must_be_nil
370
+ end
371
+
372
+ it "agencia deve retornar sempre uma string se tiver um valor" do
373
+ subject.agencia = 1230
374
+ subject.agencia.must_equal '1230'
375
+ subject.agencia = nil
376
+ subject.agencia.must_be_nil
377
+ end
378
+
379
+ it "codigo_cedente deve retornar sempre uma string se tiver um valor" do
380
+ subject.codigo_cedente = 123
381
+ subject.codigo_cedente.must_equal '123'
382
+ subject.codigo_cedente = nil
383
+ subject.codigo_cedente.must_be_nil
384
+ end
385
+
386
+ describe "NotImplementedError" do
387
+ it "codigo_banco" do
388
+ assert_raises NotImplementedError do
389
+ subject.codigo_banco
390
+ end
391
+ end
392
+
393
+ it "nome_banco" do
394
+ subject.nome_banco = nil
395
+ assert_raises NotImplementedError do
396
+ subject.nome_banco
397
+ end
398
+ end
399
+
400
+ it "codigo_banco_dv" do
401
+ assert_raises NotImplementedError do
402
+ subject.codigo_banco_dv
403
+ end
404
+ end
405
+ it "versao_layout_arquivo_cnab_240" do
406
+ assert_raises NotImplementedError do
407
+ subject.versao_layout_lote_cnab_240
408
+ end
409
+ end
410
+ it "versao_layout_lote_cnab_240" do
411
+ assert_raises NotImplementedError do
412
+ subject.versao_layout_lote_cnab_240
413
+ end
414
+ end
415
+ end
416
+
417
+ describe "#codigo_banco_formatado" do
418
+ it "deve trazer o codigo do banco e o dv separados por ifen" do
419
+ subject.expects(:codigo_banco).returns(6578)
420
+ subject.expects(:codigo_banco_dv).returns(9)
421
+ subject.codigo_banco_formatado.must_equal '6578-9'
422
+ end
423
+ end
424
+
425
+ describe "#agencia_codigo_cedente" do
426
+ it "deve trazer a agencia e o dv separados por /" do
427
+ subject.expects(:agencia).returns(956781)
428
+ subject.expects(:codigo_cedente).returns(9)
429
+ subject.agencia_codigo_cedente.must_equal '956781 / 9'
430
+ end
431
+ end
432
+
433
+ describe "#cpf_cnpj" do
434
+ it "se setar o cnpj com a pontuação deve sempre retornar apenas os numeros" do
435
+ subject.cpf_cnpj = '84.059.146/0001-00'
436
+ subject.cpf_cnpj.must_equal '84059146000100'
437
+ end
438
+ it "se setar o CPF com a pontuação deve sempre retornar apenas os numeros" do
439
+ subject.cpf_cnpj = '725.211.506-22'
440
+ subject.cpf_cnpj.must_equal '72521150622'
441
+ end
442
+ end
443
+
444
+ describe "#tipo_cpf_cnpj" do
445
+ context "#CPF retorna 01" do
446
+ it "por padrão deve retornar 01 (com 2 digitos)" do
447
+ subject.cpf_cnpj = '725.211.506-22'
448
+ subject.tipo_cpf_cnpj.must_equal '01'
449
+ end
450
+ it "posso passar a quantidade de digitos a retornar" do
451
+ subject.cpf_cnpj = '83944180313'
452
+ subject.tipo_cpf_cnpj(1).must_equal '1'
453
+ end
454
+ end
455
+ context "#CNPJ retorna 02" do
456
+ it "por padrão deve retornar 02 (com 2 digitos)" do
457
+ subject.cpf_cnpj = '84059146000100'
458
+ subject.tipo_cpf_cnpj.must_equal '02'
459
+ end
460
+ it "posso passar a quantidade de digitos a retornar" do
461
+ subject.cpf_cnpj = '32.131.445/0001-05'
462
+ subject.tipo_cpf_cnpj(1).must_equal '2'
463
+ end
464
+ end
465
+ end
466
+
467
+ describe "#cpf_cnpj_formatado" do
468
+ it "deve retornar o cnpj com a pontuação correta" do
469
+ subject.cpf_cnpj = '84059146000100'
470
+ subject.cpf_cnpj_formatado.must_equal '84.059.146/0001-00'
471
+ end
472
+ it "deve retornar o CPF com a pontuação correta" do
473
+ subject.cpf_cnpj = '72521150622'
474
+ subject.cpf_cnpj_formatado.must_equal '725.211.506-22'
475
+ end
476
+ end
477
+
478
+ describe "#cpf_cnpj_formatado_com_label" do
479
+ it "deve retornar o cnpj com a pontuação correta e com o label CNPJ" do
480
+ subject.cpf_cnpj = '84059146000100'
481
+ subject.cpf_cnpj_formatado_com_label.must_equal 'CNPJ 84.059.146/0001-00'
482
+ end
483
+ it "deve retornar o CPF com a pontuação correta e com o label CPF" do
484
+ subject.cpf_cnpj = '72521150622'
485
+ subject.cpf_cnpj_formatado_com_label.must_equal 'CPF 725.211.506-22'
486
+ end
487
+ end
488
+
489
+
490
+ end
@@ -0,0 +1,154 @@
1
+ require 'test_helper'
2
+
3
+ describe BrBoleto::Conta::Caixa do
4
+ subject { FactoryGirl.build(:conta_caixa) }
5
+
6
+ it "deve herdar de Conta::Base" do
7
+ subject.class.superclass.must_equal BrBoleto::Conta::Base
8
+ end
9
+
10
+ context "valores padrões" do
11
+ it "deve setar a carteira com 14'" do
12
+ subject.class.new.carteira.must_equal '14'
13
+ end
14
+ it "deve setar a valid_carteira_required com true" do
15
+ subject.class.new.valid_carteira_required.must_equal true
16
+ end
17
+ it "deve setar a valid_carteira_length com 2" do
18
+ subject.class.new.valid_carteira_length.must_equal 2
19
+ end
20
+ it "deve setar a valid_carteira_inclusion com %w[11 14 21]" do
21
+ subject.class.new.valid_carteira_inclusion.must_equal %w[11 14 21]
22
+ end
23
+ it "deve setar a valid_convenio_maximum com 6" do
24
+ subject.class.new.valid_convenio_maximum.must_equal 6
25
+ end
26
+ it "deve setar a versao_aplicativo com '0'" do
27
+ subject.class.new.versao_aplicativo.must_equal '0000'
28
+ end
29
+ end
30
+ describe "Validations" do
31
+ it { must validate_presence_of(:agencia) }
32
+ it { must validate_presence_of(:razao_social) }
33
+ it { must validate_presence_of(:cpf_cnpj) }
34
+ it do
35
+ subject.agencia_dv = 21
36
+ must_be_message_error(:agencia_dv, :custom_length_is, {count: 1})
37
+ end
38
+
39
+ it 'versao_aplicativo deve ter no maximo 4 digitos' do
40
+ subject.versao_aplicativo = '12345'
41
+ must_be_message_error(:versao_aplicativo, :custom_length_maximum, {count: 4})
42
+ subject.versao_aplicativo = '1234'
43
+ wont_be_message_error(:versao_aplicativo, :custom_length_maximum, {count: 4})
44
+ end
45
+
46
+ context 'Validações padrões da carteira' do
47
+ subject { BrBoleto::Conta::Caixa.new }
48
+ it { must validate_presence_of(:carteira) }
49
+ it 'Tamanho deve ser de 2' do
50
+ subject.carteira = '132'
51
+ must_be_message_error(:carteira, :custom_length_is, {count: 2})
52
+ end
53
+ it "valores aceitos" do
54
+ subject.carteira = '04'
55
+ must_be_message_error(:carteira, :custom_inclusion, {list: '11, 14, 21'})
56
+ end
57
+ end
58
+
59
+ context 'Validações padrões da convenio' do
60
+ subject { BrBoleto::Conta::Caixa.new }
61
+ it { must validate_presence_of(:convenio) }
62
+ it 'Tamanho deve ter o tamanho maximo de 6' do
63
+ subject.convenio = '1234567'
64
+ must_be_message_error(:convenio, :custom_length_maximum, {count: 6})
65
+ end
66
+ end
67
+ end
68
+
69
+ it "codigo do banco" do
70
+ subject.codigo_banco.must_equal '104'
71
+ end
72
+ it '#codigo_banco_dv' do
73
+ subject.codigo_banco_dv.must_equal '0'
74
+ end
75
+
76
+ describe "#nome_banco" do
77
+ it "valor padrão para o nome_banco" do
78
+ subject.nome_banco.must_equal 'CAIXA ECONOMICA FEDERAL'
79
+ end
80
+ it "deve ser possível mudar o valor do nome do banco" do
81
+ subject.nome_banco = 'MEU'
82
+ subject.nome_banco.must_equal 'MEU'
83
+ end
84
+ end
85
+
86
+ it "#versao_layout_arquivo_cnab_240" do
87
+ subject.versao_layout_arquivo_cnab_240.must_equal '050'
88
+ end
89
+ it "#versao_layout_lote_cnab_240" do
90
+ subject.versao_layout_lote_cnab_240.must_equal '030'
91
+ end
92
+
93
+ describe '#agencia_dv' do
94
+ it "deve ser personalizavel pelo usuario" do
95
+ subject.agencia_dv = 88
96
+ subject.agencia_dv.must_equal 88
97
+ end
98
+ it "se não passar valor deve calcular automatico" do
99
+ subject.agencia = '1234'
100
+ BrBoleto::Calculos::Modulo11FatorDe2a9RestoZero.expects(:new).with('1234').returns(stub(to_s: 5))
101
+
102
+ subject.agencia_dv.must_equal 5
103
+ end
104
+ end
105
+
106
+
107
+ describe '#conta_corrente_dv' do
108
+ it "deve ser personalizavel pelo usuario" do
109
+ subject.conta_corrente_dv = 88
110
+ subject.conta_corrente_dv.must_equal 88
111
+ end
112
+ it "se não passar valor deve calcular automatico" do
113
+ subject.conta_corrente_dv = nil
114
+ subject.conta_corrente = '6688'
115
+ BrBoleto::Calculos::Modulo11FatorDe2a9RestoZero.expects(:new).with('6688').returns(stub(to_s: 5))
116
+
117
+ subject.conta_corrente_dv.must_equal 5
118
+ end
119
+ end
120
+
121
+ describe '#convenio_dv' do
122
+ it "deve ser personalizavel pelo usuario" do
123
+ subject.convenio_dv = 88
124
+ subject.convenio_dv.must_equal 88
125
+ end
126
+ it "se não passar valor deve calcular automatico" do
127
+ subject.convenio_dv = nil
128
+ subject.convenio = '6688'
129
+ BrBoleto::Calculos::Modulo11FatorDe2a9RestoZero.expects(:new).with('006688').returns(stub(to_s: 5))
130
+
131
+ subject.convenio_dv.must_equal 5
132
+ end
133
+ end
134
+
135
+ describe '#versao_aplicativo' do
136
+ it "deve ajustar valor para 4 digitos" do
137
+ subject.versao_aplicativo = 14
138
+ subject.versao_aplicativo.must_equal '0014'
139
+ end
140
+ end
141
+
142
+ describe "#carteira_formatada - Conforme o manual da caixa deve retornar RG para carteira com registro e SR para carteira sem registro" do
143
+ it "para a carteira 14 deve retornar RG" do
144
+ subject.carteira = '14'
145
+ subject.carteira_formatada.must_equal 'RG'
146
+ end
147
+ it "para a carteira 24 deve retornar SR" do
148
+ subject.carteira = '24'
149
+ subject.carteira_formatada.must_equal 'SR'
150
+ end
151
+ end
152
+
153
+
154
+ end