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,42 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module BrBoleto
3
+ module Retorno
4
+ module Cnab400
5
+ class Bradesco < BrBoleto::Retorno::Cnab400::Base
6
+ private
7
+ def detalhe_fields #:doc:
8
+ { # ATRIBUTO POSIÇÃO DA LINHA
9
+
10
+ sacado_documento: 4..17,
11
+ carteira: 23..24,
12
+ agencia_sem_dv: 25..29,
13
+ # agencia_com_dv: 25..29,
14
+ numero_conta: 30..35,
15
+ numero_conta_dv: 36,
16
+ nosso_numero: 71..82,
17
+ data_ocorrencia: 111..116,
18
+ data_ocorrencia_sacado: 111..116,
19
+ numero_documento: 117..126,
20
+ data_vencimento: 147..152,
21
+ valor_titulo: 153..165,
22
+ agencia_recebedora_com_dv: 169..173,
23
+ banco_recebedor: 166..168,
24
+ especie_titulo: 174..175,
25
+ valor_tarifa: 176..188,
26
+ valor_outras_despesas: 189..201,
27
+ valor_juros_multa: 267..279,
28
+ valor_iof: 215..227,
29
+ valor_abatimento: 228..240,
30
+ valor_desconto: 241..253,
31
+ valor_pago: 254..266,
32
+ valor_ocorrencia_sacado: 254..266,
33
+ valor_liquido: 254..266,
34
+ valor_outros_creditos: 280..292,
35
+ data_credito: 296..301,
36
+
37
+ }
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,43 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module BrBoleto
3
+ module Retorno
4
+ module Cnab400
5
+ class Itau < BrBoleto::Retorno::Cnab400::Base
6
+ private
7
+ def detalhe_fields #:doc:
8
+ { # ATRIBUTO POSIÇÃO DA LINHA
9
+
10
+ sacado_documento: 4..17,
11
+ agencia_sem_dv: 18..21,
12
+ numero_conta: 24..28,
13
+ numero_conta_dv: 29,
14
+ numero_documento: 53..70,
15
+ carteira: 83..85,
16
+ nosso_numero: 86..93,
17
+ nosso_numero_dv: 94,
18
+ cod_carteira: 108,
19
+ codigo_ocorrencia_banco_correspondente: 109..110,
20
+ data_ocorrencia: 111..116,
21
+ data_ocorrencia_sacado: 111..116,
22
+ data_vencimento: 147..152,
23
+ valor_titulo: 153..165,
24
+ banco_recebedor: 166..168,
25
+ agencia_recebedora_com_dv: 169..173,
26
+ especie_titulo: 174..175,
27
+ valor_tarifa: 176..188,
28
+ valor_iof: 215..227,
29
+ valor_abatimento: 228..240,
30
+ valor_desconto: 241..253,
31
+ valor_pago: 254..266,
32
+ valor_ocorrencia_sacado: 254..266,
33
+ valor_liquido: 254..266,
34
+ valor_juros_multa: 267..279,
35
+ valor_outros_creditos: 280..292,
36
+ data_credito: 296..301,
37
+ sacado_nome: 325..354,
38
+ }
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -8,8 +8,8 @@ module BrBoleto
8
8
  { # ATRIBUTO POSIÇÃO DA LINHA
9
9
  agencia_sem_dv: 18..21,
10
10
  agencia_com_dv: 18..22,
11
- numero_conta_com_dv: 23..31,
12
- numero_conta_sem_dv: 23..30,
11
+ numero_conta_dv: 31,
12
+ numero_conta: 23..30,
13
13
  nosso_numero: 63..74,
14
14
  parcela: 75..76,
15
15
  modalidade: 107..108,
@@ -0,0 +1,43 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module BrBoleto
3
+ module Retorno
4
+ module Cnab400
5
+ class Sicredi < BrBoleto::Retorno::Cnab400::Base
6
+ private
7
+ def detalhe_fields #:doc:
8
+ { # ATRIBUTO POSIÇÃO DA LINHA
9
+
10
+
11
+ carteira: 14..14,
12
+ numero_conta_dv: '',
13
+ numero_conta: 15..19,
14
+ nosso_numero: 48..62,
15
+ data_ocorrencia: 111..116,
16
+ data_ocorrencia_sacado: 111..116,
17
+ numero_documento: 117..126,
18
+ data_vencimento: 147..152,
19
+ valor_titulo: 153..165,
20
+ especie_titulo: 175..175,
21
+ valor_tarifa: 176..188,
22
+ valor_outras_despesas: 189..201,
23
+ valor_abatimento: 228..240,
24
+ valor_desconto: 241..253,
25
+ valor_pago: 254..266,
26
+ valor_ocorrencia_sacado: 254..266,
27
+ valor_liquido: 254..266,
28
+ valor_juros_multa: 267..279,
29
+ valor_outros_creditos: 280..292,
30
+
31
+
32
+ # sacado_documento: 4..17,
33
+ # agencia_sem_dv: 25..29,
34
+ # agencia_recebedora_com_dv: 169..173,
35
+ # banco_recebedor: 166..168,
36
+ # data_credito: 296..301,
37
+
38
+ }
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,10 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module BrBoleto
3
+ module Retorno
4
+ module Cnab400
5
+ class Unicred < BrBoleto::Retorno::Cnab400::Bradesco
6
+ # A Unicred (através do CobExpress) utiliza e o layout de boleto os arquivos de remessa/retorno disponibilizados pelo Banco Bradesco.
7
+ end
8
+ end
9
+ end
10
+ end
@@ -11,11 +11,19 @@ module BrBoleto
11
11
  attr_accessor :agencia_sem_dv # tamanho = 5
12
12
 
13
13
  # NÚMERO DA CONTA CORRENTE/CEDENTE
14
- attr_accessor :numero_conta_com_dv # tamanho = 13
15
- attr_accessor :numero_conta_sem_dv # tamanho = 12
16
- alias_attribute :codigo_cedente, :numero_conta_sem_dv
17
- alias_attribute :numero_conta, :numero_conta_sem_dv
14
+ attr_accessor :numero_conta # tamanho = 12
15
+ attr_accessor :numero_conta_dv # tamanho = 1
16
+ alias_attribute :codigo_cedente, :numero_conta
17
+ def numero_conta_com_dv
18
+ "#{numero_conta}#{numero_conta_dv}" # tamanho = 13
19
+ end
20
+
18
21
 
22
+ # CÓDIGO DE MOVIMENTO RETORNO
23
+ # Tamanho Posição
24
+ # 2 16-17
25
+ attr_accessor :codigo_movimento_retorno
26
+
19
27
  # IDENTIFICAÇÃO DO TÍTULO
20
28
  # Tamanho Posição
21
29
  # 1 37-37
@@ -25,11 +33,15 @@ module BrBoleto
25
33
  # Tamanho Posição
26
34
  # 20 38-57
27
35
  attr_accessor :nosso_numero
36
+
37
+ # DÍGITO VERIFICADOR NOSSO NÚMERO
38
+ attr_accessor :nosso_numero_dv
28
39
 
29
40
  # CÓDIGO DA CARTEIRA
30
41
  # Tamanho Posição
31
42
  # 1 58-58
32
43
  attr_accessor :carteira
44
+ attr_accessor :cod_carteira
33
45
 
34
46
  # NÚMERO DO DOCUMENTO
35
47
  # Tamanho Posição
@@ -243,6 +255,8 @@ module BrBoleto
243
255
  self.instance_variable_set("@#{attr_name}", BrBoleto::Helper::FormatValue.string_to_date(value) )
244
256
  end
245
257
  end
258
+
259
+
246
260
  end
247
261
  end
248
262
  end
@@ -1,8 +1,8 @@
1
1
  module BrBoleto
2
2
  module Version
3
3
  MAJOR = 2 #inclui alterações de API e pode quebrar compatibilidade com versões anteriores
4
- MINOR = 0 #inclui novas funcionalidades, sem quebrar APIs existentes
5
- PATCH = 1 #corrige bugs ou traz melhorias em implementações já existentes
4
+ MINOR = 1 #inclui novas funcionalidades, sem quebrar APIs existentes
5
+ PATCH = 0 #corrige bugs ou traz melhorias em implementações já existentes
6
6
  CURRENT = "#{MAJOR}.#{MINOR}.#{PATCH}"
7
7
  end
8
8
  end
data/lib/br_boleto.rb CHANGED
@@ -72,6 +72,11 @@ module BrBoleto
72
72
  autoload :Base
73
73
  autoload :Sicoob
74
74
  autoload :Caixa
75
+ autoload :Bradesco
76
+ autoload :Unicred
77
+ autoload :Sicredi
78
+ autoload :Cecred
79
+ autoload :Itau
75
80
  end
76
81
 
77
82
  module Boleto
@@ -80,6 +85,11 @@ module BrBoleto
80
85
  autoload :Base
81
86
  autoload :Sicoob
82
87
  autoload :Caixa
88
+ autoload :Bradesco
89
+ autoload :Unicred
90
+ autoload :Sicredi
91
+ autoload :Cecred
92
+ autoload :Itau
83
93
  end
84
94
 
85
95
 
@@ -94,11 +104,20 @@ module BrBoleto
94
104
  autoload :Base
95
105
  autoload :Sicoob
96
106
  autoload :Caixa
107
+ autoload :Bradesco
108
+ autoload :Unicred
109
+ autoload :Sicredi
110
+ autoload :Cecred
111
+ autoload :Itau
97
112
  end
98
113
  module Cnab400
99
114
  extend ActiveSupport::Autoload
100
115
  autoload :Base
101
116
  autoload :Sicoob
117
+ autoload :Bradesco
118
+ autoload :Unicred
119
+ autoload :Sicredi
120
+ autoload :Itau
102
121
  end
103
122
  end
104
123
 
@@ -111,11 +130,20 @@ module BrBoleto
111
130
  autoload :Base
112
131
  autoload :Sicoob
113
132
  autoload :Caixa
133
+ autoload :Bradesco
134
+ autoload :Unicred
135
+ autoload :Sicredi
136
+ autoload :Cecred
137
+ autoload :Itau
114
138
  end
115
139
  module Cnab400
116
140
  extend ActiveSupport::Autoload
117
141
  autoload :Base
118
142
  autoload :Sicoob
143
+ autoload :Bradesco
144
+ autoload :Unicred
145
+ autoload :Sicredi
146
+ autoload :Itau
119
147
  end
120
148
  end
121
149
 
@@ -13,6 +13,7 @@ en:
13
13
  other: "must have %{count} digits"
14
14
  custom_inclusion: 'must contain one of the following values: %{list}'
15
15
  at_least_one: must be at least 1
16
+ column_is_required: "%{column} can't be blank"
16
17
  attributes:
17
18
  br_boleto/pagador:
18
19
  nome: Name
@@ -13,6 +13,7 @@ pt-BR:
13
13
  other: "deve ter %{count} dígitos"
14
14
  custom_inclusion: 'deve conter um dos valores a seguir: %{list}'
15
15
  at_least_one: deve ter no mínimo 1
16
+ column_is_required: "%{column} não pode ficar em branco"
16
17
  attributes:
17
18
  br_boleto/pagador:
18
19
  nome: Nome
@@ -85,6 +85,7 @@ describe BrBoleto::HavePagador do
85
85
  must_be_message_error(:base, "#{BrBoleto::Pagador.human_attribute_name(:uf)} #{get_message(:blank, {})}")
86
86
  end
87
87
 
88
+
88
89
  context "o valor setado nas validações devem obedecer a classe que inclui a pagador. Mesmo que a pagador tenha uma validação diferente" do
89
90
  before do
90
91
  subject.pagador.valid_endereco_required = true
@@ -107,4 +108,27 @@ describe BrBoleto::HavePagador do
107
108
  must_be_message_error(:base, "#{BrBoleto::Pagador.human_attribute_name(:uf)} #{get_message(:blank, {})}")
108
109
  end
109
110
  end
111
+
112
+ it 'Validação para avalsita' do
113
+ subject.stubs(:valid_avalista_required).returns(true)
114
+ must_be_message_error(:base, "#{BrBoleto::Pagador.human_attribute_name(:nome_avalista)} #{get_message(:blank, {})}")
115
+ must_be_message_error(:base, "#{BrBoleto::Pagador.human_attribute_name(:documento_avalista)} #{get_message(:blank, {})}")
116
+ end
117
+ context "o valor setado nas validações devem obedecer a classe que inclui a pagador. Mesmo que a pagador tenha uma validação diferente" do
118
+ before do
119
+ subject.pagador.valid_avalista_required = true
120
+ end
121
+
122
+ it "Se os metodos do objeto que temm a pagador tiverem valor nos seus metodos deve permanecer esses valores" do
123
+ subject.stubs(:valid_avalista_required).returns(false)
124
+ wont_be_message_error(:base, "#{BrBoleto::Pagador.human_attribute_name(:nome_avalista)} #{get_message(:blank, {})}")
125
+ wont_be_message_error(:base, "#{BrBoleto::Pagador.human_attribute_name(:documento_avalista)} #{get_message(:blank, {})}")
126
+ end
127
+
128
+ it "Deve considerar as validações setadas na pagador se não houver os metodos sobrescritos no objeto que tem a pagador" do
129
+ must_be_message_error(:base, "#{BrBoleto::Pagador.human_attribute_name(:nome_avalista)} #{get_message(:blank, {})}")
130
+ must_be_message_error(:base, "#{BrBoleto::Pagador.human_attribute_name(:documento_avalista)} #{get_message(:blank, {})}")
131
+ end
132
+ end
133
+
110
134
  end
@@ -0,0 +1,125 @@
1
+ # encoding: utf-8
2
+ require 'test_helper'
3
+
4
+ describe BrBoleto::Boleto::Bradesco do
5
+ subject { FactoryGirl.build(:boleto_bradesco, conta: conta) }
6
+ let(:conta) { FactoryGirl.build(:conta_bradesco) }
7
+
8
+ context "on validations" do
9
+ it { must validate_length_of(:numero_documento).is_at_most(11).with_message(:custom_length_maximum) }
10
+
11
+ context '#conta.carteira' do
12
+ it { subject.valid_carteira_inclusion.must_equal ['06','09','19','21','22'] }
13
+ it "validação da carteira da conta" do
14
+ subject.conta.carteira = '4'
15
+ conta_must_be_msg_error(:carteira, :custom_inclusion, {list: '06, 09, 19, 21, 22'})
16
+ subject.conta.carteira = '06'
17
+ conta_wont_be_msg_error(:carteira, :custom_inclusion, {list: '06, 09, 19, 21, 22'})
18
+ end
19
+ end
20
+
21
+ describe '#conta.convenio / codigo_cedente' do
22
+ it { subject.valid_convenio_maximum.must_equal 7 }
23
+ it { subject.valid_convenio_required.must_equal true }
24
+
25
+ it "validação obrigatoriedade do codigo_cedente da conta" do
26
+ subject.conta.codigo_cedente = ''
27
+ conta_must_be_msg_error(:convenio, :blank)
28
+ subject.conta.codigo_cedente = '123456'
29
+ conta_wont_be_msg_error(:convenio, :blank)
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ def conta_must_be_msg_error(attr_validation, msg_key, options_msg={})
36
+ must_be_message_error(:base, "#{BrBoleto::Conta::Bradesco.human_attribute_name(attr_validation)} #{get_message(msg_key, options_msg)}")
37
+ end
38
+ def conta_wont_be_msg_error(attr_validation, msg_key, options_msg={})
39
+ wont_be_message_error(:base, "#{BrBoleto::Conta::Bradesco.human_attribute_name(attr_validation)} #{get_message(msg_key, options_msg)}")
40
+ end
41
+ end
42
+
43
+ describe "#default_values" do
44
+ it "local_pagamento deve ter o valor padrão conforme a documentação" do
45
+ BrBoleto::Boleto::Bradesco.new.local_pagamento.must_equal 'PAGÁVEL PREFERENCIALMENTE NA REDE BRADESCO OU NO BRADESCO EXPRESSO'
46
+ end
47
+ end
48
+
49
+ describe "#digito_verificador_nosso_numero" do
50
+ it "deve calcular pelo Modulo11Fator3197" do
51
+ subject.conta.agencia = 21
52
+ subject.numero_documento = 111
53
+ BrBoleto::Calculos::Modulo11FatorDe2a7.expects(:new).with("2100000000111").returns("meu_resultado")
54
+ subject.digito_verificador_nosso_numero.must_equal "meu_resultado"
55
+ end
56
+ end
57
+
58
+ describe "#nosso_numero" do
59
+ subject { FactoryGirl.build(:boleto_bradesco, numero_documento: '68315') }
60
+
61
+ it "deve retornar o numero do documento com o digito_verificador_nosso_numero" do
62
+ subject.stubs(:digito_verificador_nosso_numero).returns('9')
63
+ subject.numero_documento = '3646'
64
+ subject.nosso_numero.must_equal "21/00000003646-9"
65
+ end
66
+ end
67
+
68
+ describe "#codigo_de_barras_do_banco" do
69
+ subject do
70
+ FactoryGirl.build(:boleto_bradesco, conta: {
71
+ carteira: '21',
72
+ agencia: '78',
73
+ conta_corrente: '668',
74
+ },
75
+ numero_documento: '395'
76
+ )
77
+ end
78
+ it "deve montar o codigo corretamente com as informações" do
79
+ subject.stubs(:nosso_numero).returns('21/00000003646-9')
80
+
81
+ result = subject.codigo_de_barras_do_banco
82
+ result.size.must_equal 25
83
+
84
+ result[0..3].must_equal '0078' # Agencia
85
+ result[4..5].must_equal '21' # Carteira
86
+ result[6..16].must_equal '00000000395' # Numero documento
87
+ result[17..23].must_equal '0000668' # Conta Corrente
88
+ result[24].must_equal '0' # Zero
89
+
90
+ subject.codigo_de_barras_do_banco.must_equal '0078210000000039500006680'
91
+
92
+
93
+ end
94
+ end
95
+
96
+ describe "#codigo_de_barras" do
97
+ subject do
98
+ FactoryGirl.build(:boleto_bradesco) do |bradesco|
99
+ bradesco.conta.agencia = 3069
100
+ bradesco.conta.codigo_cedente = 828_19 # Para o bradesco é o código do cliente
101
+ bradesco.conta.codigo_cedente_dv = '0' # Para o bradesco é o código do cliente
102
+ bradesco.conta.carteira = '06'
103
+ bradesco.numero_documento = 100_10
104
+ bradesco.valor_documento = 93015.78
105
+ bradesco.data_vencimento = Date.parse('2020-02-17')
106
+ end
107
+ end
108
+
109
+ it { subject.codigo_de_barras.must_equal '23799816800093015783069060000001001000897550' }
110
+ it { subject.linha_digitavel.must_equal '23793.06901 60000.001002 10008.975509 9 81680009301578' }
111
+
112
+ it "codigo de barras de um boleto de exemplo" do
113
+ subject.conta.agencia = 3069
114
+ subject.conta.codigo_cedente = 82819 # Para o bradesco é o código do cliente
115
+ subject.conta.codigo_cedente_dv = 0 # Para o bradesco é o código do cliente
116
+ subject.conta.carteira = '06'
117
+ subject.numero_documento = 15_679
118
+ subject.valor_documento = 408.50
119
+ subject.data_vencimento = Date.parse('2016-09-01')
120
+
121
+ subject.linha_digitavel.must_equal '23793.06901 60000.001564 79008.975504 7 69040000040850'
122
+ subject.codigo_de_barras.must_equal '23797690400000408503069060000001567900897550'
123
+ end
124
+ end
125
+ end
@@ -5,13 +5,13 @@ describe BrBoleto::Boleto::Caixa do
5
5
  subject { FactoryGirl.build(:boleto_caixa) }
6
6
 
7
7
  context "on validations" do
8
- it { must validate_length_of(:numero_documento).is_at_most(15).with_message(:custom_length_maximum) }
8
+ it { must validate_length_of(:numero_documento).is_at_most(11).with_message(:custom_length_maximum) }
9
9
 
10
10
  context '#conta.carteira' do
11
11
  it { subject.valid_carteira_inclusion.must_equal ['14','24'] }
12
12
  it 'carteira deve ter 2 digitos' do
13
13
  subject.valid_carteira_length.must_equal 2
14
- subject.conta.carteira = '1'
14
+ subject.conta.carteira = '2'
15
15
  conta_must_be_msg_error(:carteira, :custom_length_is, {count: 2})
16
16
  subject.conta.carteira = '123'
17
17
  conta_must_be_msg_error(:carteira, :custom_length_is, {count: 2})
@@ -98,18 +98,18 @@ describe BrBoleto::Boleto::Caixa do
98
98
  end
99
99
  end
100
100
 
101
- describe "#tipo_cobranca" do
102
- it "deve pegar o primeiro caracter da carteira se houver valor na carteira" do
103
- subject.conta.carteira = 'X7'
104
- subject.tipo_cobranca.must_equal 'X'
105
- subject.conta.carteira = 'A7'
106
- subject.tipo_cobranca.must_equal 'A'
107
- end
108
- it "se carteira for nil não deve dar erro" do
109
- subject.conta.carteira = nil
110
- subject.tipo_cobranca.must_be_nil
111
- end
112
- end
101
+ # describe "#tipo_cobranca" do
102
+ # it "deve pegar o primeiro caracter da carteira se houver valor na carteira" do
103
+ # subject.conta.carteira = 'X7'
104
+ # subject.tipo_cobranca.must_equal 'X'
105
+ # subject.conta.carteira = 'A7'
106
+ # subject.tipo_cobranca.must_equal 'A'
107
+ # end
108
+ # it "se carteira for nil não deve dar erro" do
109
+ # subject.conta.carteira = nil
110
+ # subject.tipo_cobranca.must_be_nil
111
+ # end
112
+ # end
113
113
 
114
114
  describe "#identificador_de_emissao" do
115
115
  it "deve retornar o ultimo caractere da carteira" do
@@ -129,7 +129,7 @@ describe BrBoleto::Boleto::Caixa do
129
129
  end
130
130
 
131
131
  it "codigo completo conforme a documentação" do
132
- subject.composicao_codigo_barras.must_equal '1234560ABC1DEF4GHIJKLMNO'
132
+ subject.composicao_codigo_barras.must_equal '123456000010AB4CDEFGHIJK'
133
133
  end
134
134
 
135
135
  it "da posição 0 até 5 deve ter o valor de codigo_beneficiario " do
@@ -141,7 +141,7 @@ describe BrBoleto::Boleto::Caixa do
141
141
  end
142
142
 
143
143
  it "da posição 7 até 9 deve ter o valor de nosso_numero_de_3_a_5 " do
144
- subject.composicao_codigo_barras[7..9].must_equal 'ABC'
144
+ subject.composicao_codigo_barras[7..9].must_equal '000'
145
145
  end
146
146
 
147
147
  it "da posição 10 até 10 deve ter o valor de tipo_cobranca " do
@@ -149,7 +149,7 @@ describe BrBoleto::Boleto::Caixa do
149
149
  end
150
150
 
151
151
  it "da posição 11 até 13 deve ter o valor de nosso_numero_de_6_a_8 " do
152
- subject.composicao_codigo_barras[11..13].must_equal 'DEF'
152
+ subject.composicao_codigo_barras[11..13].must_equal '0AB'
153
153
  end
154
154
 
155
155
  it "da posição 14 até 14 deve ter o valor de identificador_de_emissao " do
@@ -157,7 +157,7 @@ describe BrBoleto::Boleto::Caixa do
157
157
  end
158
158
 
159
159
  it "da posição 15 até 23 deve ter o valor de nosso_numero_de_9_a_17 " do
160
- subject.composicao_codigo_barras[15..23].must_equal 'GHIJKLMNO'
160
+ subject.composicao_codigo_barras[15..23].must_equal 'CDEFGHIJK'
161
161
  end
162
162
 
163
163
  it "a posição 24 deve ser nil " do
@@ -0,0 +1,115 @@
1
+ # encoding: utf-8
2
+ require 'test_helper'
3
+
4
+ describe BrBoleto::Boleto::Cecred do
5
+ subject { FactoryGirl.build(:boleto_cecred, conta: conta) }
6
+ let(:conta) { FactoryGirl.build(:conta_cecred) }
7
+
8
+ context "on validations" do
9
+ it { must validate_length_of(:numero_documento).is_at_most(9).with_message(:custom_length_maximum) }
10
+
11
+ context '#conta.carteira' do
12
+ it { subject.valid_carteira_inclusion.must_equal ['1'] }
13
+ it "validação da carteira da conta" do
14
+ subject.conta.carteira = '6'
15
+ conta_must_be_msg_error(:carteira, :custom_inclusion, {list: '1'})
16
+ subject.conta.carteira = '1'
17
+ conta_wont_be_msg_error(:carteira, :custom_inclusion, {list: '1'})
18
+ end
19
+ end
20
+
21
+ describe '#conta.convenio / codigo_cedente' do
22
+ it { subject.valid_convenio_maximum.must_equal 6 }
23
+ it { subject.valid_convenio_required.must_equal true }
24
+
25
+ it "validação obrigatoriedade do codigo_cedente da conta" do
26
+ subject.conta.codigo_cedente = ''
27
+ conta_must_be_msg_error(:convenio, :blank)
28
+ subject.conta.codigo_cedente = '123456'
29
+ conta_wont_be_msg_error(:convenio, :blank)
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ def conta_must_be_msg_error(attr_validation, msg_key, options_msg={})
36
+ must_be_message_error(:base, "#{BrBoleto::Conta::Cecred.human_attribute_name(attr_validation)} #{get_message(msg_key, options_msg)}")
37
+ end
38
+ def conta_wont_be_msg_error(attr_validation, msg_key, options_msg={})
39
+ wont_be_message_error(:base, "#{BrBoleto::Conta::Cecred.human_attribute_name(attr_validation)} #{get_message(msg_key, options_msg)}")
40
+ end
41
+ end
42
+
43
+ describe "#default_values" do
44
+ it "local_pagamento deve ter o valor padrão conforme a documentação" do
45
+ BrBoleto::Boleto::Cecred.new.local_pagamento.must_equal 'PAGAVEL PREFERENCIALMENTE NAS COOPERATIVAS DO SISTEMA CECRED.'
46
+ end
47
+ end
48
+
49
+ describe "#nosso_numero" do
50
+ subject { FactoryGirl.build(:boleto_cecred, numero_documento: '68315') }
51
+
52
+ it "deve retornar a conta corrente com DV e o numero do documento" do
53
+ subject.numero_documento = '3646'
54
+ subject.conta.conta_corrente = '1234567'
55
+ subject.conta.conta_corrente_dv = '9'
56
+ subject.nosso_numero.must_equal "12345679000003646"
57
+ end
58
+ end
59
+
60
+ describe "#codigo_de_barras_do_banco" do
61
+ subject do
62
+ FactoryGirl.build(:boleto_cecred, conta: {
63
+ carteira: '1',
64
+ conta_corrente: '668',
65
+ conta_corrente_dv: '7',
66
+ convenio: '987',
67
+ },
68
+ numero_documento: '395'
69
+ )
70
+ end
71
+ it "deve montar o codigo corretamente com as informações" do
72
+ subject.stubs(:nosso_numero).returns('21/00000003646-9')
73
+
74
+ result = subject.codigo_de_barras_do_banco
75
+ result.size.must_equal 25
76
+
77
+ result[0..5].must_equal '000987' # Convênio
78
+ result[6..13].must_equal '00006687' # Conta Corrente com DV
79
+ result[14..22].must_equal '000000395' # Numero documento
80
+ result[23..24].must_equal '01' # Carteira
81
+
82
+ subject.codigo_de_barras_do_banco.must_equal '0009870000668700000039501'
83
+ end
84
+ end
85
+
86
+ describe "#codigo_de_barras" do
87
+ subject do
88
+ FactoryGirl.build(:boleto_cecred) do |cecred|
89
+ cecred.conta.agencia = 3069
90
+ cecred.conta.codigo_cedente = 828_19 # Para o cecred é o código do cliente
91
+ cecred.conta.codigo_cedente_dv = '0' # Para o cecred é o código do cliente
92
+ cecred.conta.carteira = '06'
93
+ cecred.numero_documento = 100_10
94
+ cecred.valor_documento = 93015.78
95
+ cecred.data_vencimento = Date.parse('2020-02-17')
96
+ end
97
+ end
98
+
99
+ it { subject.codigo_de_barras.must_equal '08595816800093015780828198975599800001001006' }
100
+ it { subject.linha_digitavel.must_equal '08590.82810 98975.599808 00010.010064 5 81680009301578' }
101
+
102
+ it "codigo de barras de um boleto de exemplo" do
103
+ subject.conta.agencia = 3069
104
+ subject.conta.codigo_cedente = 82819 # Para o cecred é o código do cliente
105
+ subject.conta.codigo_cedente_dv = 0 # Para o cecred é o código do cliente
106
+ subject.conta.carteira = '06'
107
+ subject.numero_documento = 15_679
108
+ subject.valor_documento = 408.50
109
+ subject.data_vencimento = Date.parse('2016-09-01')
110
+
111
+ subject.linha_digitavel.must_equal '08590.82810 98975.599808 00015.679061 6 69040000040850'
112
+ subject.codigo_de_barras.must_equal '08596690400000408500828198975599800001567906'
113
+ end
114
+ end
115
+ end