br_boleto 1.2.2 → 2.0.0

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