br_boleto 2.0.1 → 2.1.0

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