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,160 @@
1
+ # encoding: utf-8
2
+ require 'test_helper'
3
+
4
+ describe BrBoleto::Boleto::Itau do
5
+ subject { FactoryGirl.build(:boleto_itau, conta: conta) }
6
+ let(:conta) { FactoryGirl.build(:conta_itau) }
7
+
8
+ context "on validations" do
9
+ it { must validate_length_of(:numero_documento).is_at_most(8).with_message(:custom_length_maximum) }
10
+
11
+ context '#conta.carteira' do
12
+ it { subject.valid_carteira_inclusion.must_equal ['104', '105', '107', '108', '109', '112', '113', '116', '117', '119', '121', '122', '126', '131', '134', '135', '136', '142', '143', '146', '147', '150', '168', '169', '174', '175', '180', '191', '196', '198'] }
13
+ it "validação da carteira da conta" do
14
+ subject.conta.carteira = '4'
15
+ conta_must_be_msg_error(:carteira, :custom_inclusion, {list: '104, 105, 107, 108, 109, 112, 113, 116, 117, 119, 121, 122, 126, 131, 134, 135, 136, 142, 143, 146, 147, 150, 168, 169, 174, 175, 180, 191, 196, 198'})
16
+ subject.conta.carteira = '109'
17
+ conta_wont_be_msg_error(:carteira, :custom_inclusion, {list: '104, 105, 107, 108, 109, 112, 113, 116, 117, 119, 121, 122, 126, 131, 134, 135, 136, 142, 143, 146, 147, 150, 168, 169, 174, 175, 180, 191, 196, 198'})
18
+ end
19
+ end
20
+
21
+ describe '#conta.convenio / codigo_cedente' do
22
+ it { subject.valid_convenio_maximum.must_equal 5 }
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::Itau.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::Itau.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::Itau.new.local_pagamento.must_equal 'PAGÁVEL EM QUALQUER BANCO OU CORRESPONDENTE ATÉ O VENCIMENTO.'
46
+ end
47
+ end
48
+
49
+ describe "#digito_verificador_nosso_numero" do
50
+ it "Se for uma carteiras_especiais_nosso_numero_dv (126 131 146 150 168) deve calcular pelo Modulo10 com o carteira e numero do documento" do
51
+ subject.conta.carteira = 126
52
+ subject.numero_documento = 111
53
+ BrBoleto::Calculos::Modulo10.expects(:new).with("12600000111").returns("meu_resultado")
54
+ subject.digito_verificador_nosso_numero.must_equal "meu_resultado"
55
+ end
56
+ it "Demais carteiras deve calcular pelo Modulo10 com o agencia, conta_corrente, carteira e numero do documento" do
57
+ subject.conta.agencia = 1234
58
+ subject.conta.conta_corrente = 12345
59
+ subject.conta.carteira = 109
60
+ subject.numero_documento = 111
61
+ BrBoleto::Calculos::Modulo10.expects(:new).with("12341234510900000111").returns("meu_resultado")
62
+ subject.digito_verificador_nosso_numero.must_equal "meu_resultado"
63
+ end
64
+ end
65
+
66
+ describe "#nosso_numero" do
67
+ subject { FactoryGirl.build(:boleto_itau, numero_documento: '68315') }
68
+
69
+ it "deve retornar o numero do documento com o digito_verificador_nosso_numero" do
70
+ subject.stubs(:digito_verificador_nosso_numero).returns('9')
71
+ subject.numero_documento = '3646'
72
+ subject.nosso_numero.must_equal "109/00003646-9"
73
+ end
74
+ end
75
+
76
+ describe "#codigo_de_barras_do_banco (com as carteiras especiais de cobrança 107, 122, 142, 143, 196 e 198)" do
77
+ subject do
78
+ FactoryGirl.build(:boleto_itau, conta: {
79
+ carteira: '122',
80
+ agencia: '78',
81
+ conta_corrente: '668',
82
+ convenio: '12345',
83
+ },
84
+ numero_documento: '395'
85
+ )
86
+ end
87
+ it "deve montar o codigo corretamente com as informações" do
88
+ subject.stubs(:nosso_numero).returns('122/00000395-9')
89
+ result = subject.codigo_de_barras_do_banco
90
+ result.size.must_equal 25
91
+
92
+ result[0..2].must_equal '122' # Carteira
93
+ result[3..10].must_equal '00000395' # Numero documento
94
+ result[11..17].must_equal '0000039' # Seu número
95
+ result[18..22].must_equal '12345' # Código cedente
96
+ result[23].must_equal '6' # DV codigo de barras
97
+ result[24].must_equal '0' # Zero
98
+
99
+ subject.codigo_de_barras_do_banco.must_equal '1220000039500000391234560'
100
+ end
101
+ end
102
+
103
+ describe "#codigo_de_barras_do_banco (para as demais carteiras)" do
104
+ subject do
105
+ FactoryGirl.build(:boleto_itau, conta: {
106
+ carteira: '109',
107
+ agencia: '78',
108
+ conta_corrente: '668',
109
+ conta_corrente_dv: '5',
110
+ },
111
+ numero_documento: '395'
112
+ )
113
+ end
114
+ it "deve montar o codigo corretamente com as informações" do
115
+ subject.stubs(:nosso_numero).returns('109/00000395-2')
116
+ result = subject.codigo_de_barras_do_banco
117
+ result.size.must_equal 25
118
+
119
+ result[0..2].must_equal '109' # Carteira
120
+ result[3..10].must_equal '00000395' # Numero documento
121
+ result[11].must_equal '2' # Nosso numero DV
122
+ result[12..15].must_equal '0078' # Agencia
123
+ result[16..20].must_equal '00668' # Conta Corrente
124
+ result[21].must_equal '5' # Conta Corrente DV
125
+ result[22..24].must_equal '000' # Zeros
126
+
127
+ subject.codigo_de_barras_do_banco.must_equal '1090000039520078006685000'
128
+ end
129
+ end
130
+
131
+ describe "#codigo_de_barras" do
132
+ subject do
133
+ FactoryGirl.build(:boleto_itau) do |itau|
134
+ itau.conta.agencia = 3069
135
+ itau.conta.codigo_cedente = 828_19 # Para o itau é o código do cliente
136
+ itau.conta.codigo_cedente_dv = '0' # Para o itau é o código do cliente
137
+ itau.conta.carteira = '106'
138
+ itau.numero_documento = 100_10
139
+ itau.valor_documento = 93015.78
140
+ itau.data_vencimento = Date.parse('2020-02-17')
141
+ end
142
+ end
143
+
144
+ it { subject.codigo_de_barras.must_equal '34199816800093015781060001001043069897558000' }
145
+ it { subject.linha_digitavel.must_equal '34191.06004 01001.043064 98975.580006 9 81680009301578' }
146
+
147
+ it "codigo de barras de um boleto de exemplo" do
148
+ subject.conta.agencia = 3069
149
+ subject.conta.codigo_cedente = 82819 # Para o itau é o código do cliente
150
+ subject.conta.codigo_cedente_dv = 0 # Para o itau é o código do cliente
151
+ subject.conta.carteira = '175'
152
+ subject.numero_documento = 15_679
153
+ subject.valor_documento = 408.50
154
+ subject.data_vencimento = Date.parse('2016-09-01')
155
+
156
+ subject.linha_digitavel.must_equal '34191.75009 01567.963069 98975.580006 2 69040000040850'
157
+ subject.codigo_de_barras.must_equal '34192690400000408501750001567963069897558000'
158
+ end
159
+ end
160
+ end
@@ -0,0 +1,136 @@
1
+ # encoding: utf-8
2
+ require 'test_helper'
3
+
4
+ describe BrBoleto::Boleto::Sicredi do
5
+ subject { FactoryGirl.build(:boleto_sicredi, conta: conta) }
6
+ let(:conta) { FactoryGirl.build(:conta_sicredi) }
7
+
8
+ context "on validations" do
9
+ it { must validate_length_of(:numero_documento).is_at_most(5).with_message(:custom_length_maximum) }
10
+
11
+ context '#conta.carteira' do
12
+ it { subject.valid_carteira_inclusion.must_equal ['1','3'] }
13
+ it "validação da carteira da conta" do
14
+ subject.conta.carteira = '4'
15
+ conta_must_be_msg_error(:carteira, :custom_inclusion, {list: '1, 3'})
16
+ subject.conta.carteira = '1'
17
+ conta_wont_be_msg_error(:carteira, :custom_inclusion, {list: '1, 3'})
18
+ end
19
+ end
20
+
21
+ describe '#conta.convenio / codigo_cedente' do
22
+ it { subject.valid_convenio_maximum.must_equal 5 }
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::Sicredi.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::Sicredi.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::Sicredi.new.local_pagamento.must_equal 'PAGÁVEL PREFERENCIALMENTE NAS COOPERATIVAS DE CRÉDITO DO SICREDI'
46
+ end
47
+ end
48
+
49
+ describe "#digito_verificador_nosso_numero" do
50
+ it "deve utilizar o Modulo11FatorDe2a9RestoZero para calcular o digito passando a agencia, posto, conta_corrente, ano, byte_id e numero_documento" do
51
+ subject.stubs(:ano).returns('16')
52
+ subject.assign_attributes(conta: {agencia: '4697', posto: '02', conta_corrente: '55825', byte_id: '3'}, numero_documento: '77445')
53
+ BrBoleto::Calculos::Modulo11FatorDe2a9RestoZero.expects(:new).with("4697025582516377445").returns('8')
54
+
55
+ subject.digito_verificador_nosso_numero.must_equal '8'
56
+ end
57
+ end
58
+
59
+ describe "#nosso_numero" do
60
+ subject { FactoryGirl.build(:boleto_sicredi, numero_documento: '68315') }
61
+
62
+ it "deve retornar o numero do documento com o digito_verificador_nosso_numero" do
63
+ subject.stubs(:ano).returns('15')
64
+ subject.conta.byte_id = '7'
65
+ subject.numero_documento = '3646'
66
+ subject.stubs(:digito_verificador_nosso_numero).returns('9')
67
+ subject.nosso_numero.must_equal "15/703646-9"
68
+ end
69
+ end
70
+
71
+ describe "#codigo_de_barras_do_banco" do
72
+ subject do
73
+ FactoryGirl.build(:boleto_sicredi, conta: {
74
+ carteira: '3',
75
+ codigo_carteira: '1',
76
+ agencia: '7832',
77
+ conta_corrente: '668',
78
+ posto: '22',
79
+ },
80
+ numero_documento: '395'
81
+ )
82
+ end
83
+ it "deve montar o codigo corretamente com as informações" do
84
+ subject.stubs(:nosso_numero).returns('15/703646-9')
85
+ subject.stubs(:nosso_numero_codigo_de_barras).returns('152003952')
86
+
87
+ result = subject.codigo_de_barras_do_banco
88
+ result.size.must_equal 25
89
+
90
+ result[0].must_equal '3' # Carteira
91
+ result[1].must_equal '1' # Cod. Carteira
92
+ result[2..10].must_equal '152003952' # Nosso número com o DV
93
+ result[11..14].must_equal '7832' # Agência
94
+ result[15..16].must_equal '22' # Posto
95
+ result[17..21].must_equal '00668' # Conta Corrente
96
+ result[22].must_equal '1'
97
+ result[23].must_equal '0'
98
+ result[24].must_equal '5' # DV Campo Livre
99
+ subject.codigo_de_barras_do_banco.must_equal '3115200395278322200668105'
100
+ end
101
+ end
102
+
103
+ describe "#codigo_de_barras" do
104
+ subject do
105
+ FactoryGirl.build(:boleto_sicredi) do |sicredi|
106
+ sicredi.conta.agencia = 3069
107
+ sicredi.conta.posto = 66
108
+ sicredi.conta.codigo_cedente = 828_19 # Para o sicredi é o código do cliente
109
+ sicredi.conta.codigo_cedente_dv = '0' # Para o sicredi é o código do cliente
110
+ sicredi.conta.carteira = '1'
111
+ sicredi.conta.codigo_carteira = '1'
112
+ sicredi.numero_documento = 100_10
113
+ sicredi.valor_documento = 93015.78
114
+ sicredi.data_vencimento = Date.parse('2020-02-17')
115
+ end
116
+ end
117
+
118
+ it { subject.codigo_de_barras.must_equal '74898816800093015781116210010830696689755104' }
119
+ it { subject.linha_digitavel.must_equal '74891.11620 10010.830692 66897.551041 8 81680009301578' }
120
+
121
+ it "codigo de barras de um boleto de exemplo" do
122
+ subject.conta.agencia = 3069
123
+ subject.conta.posto = 66
124
+ subject.conta.codigo_cedente = 82819 # Para o sicredi é o código do cliente
125
+ subject.conta.codigo_cedente_dv = 0 # Para o sicredi é o código do cliente
126
+ subject.conta.carteira = '1'
127
+ subject.conta.codigo_carteira = '1'
128
+ subject.numero_documento = 15_679
129
+ subject.valor_documento = 408.50
130
+ subject.data_vencimento = Date.parse('2016-09-01')
131
+
132
+ subject.linha_digitavel.must_equal '74891.11620 15679.030690 66897.551066 9 69040000040850'
133
+ subject.codigo_de_barras.must_equal '74899690400000408501116215679030696689755106'
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,128 @@
1
+ # encoding: utf-8
2
+ require 'test_helper'
3
+
4
+ describe BrBoleto::Boleto::Unicred do
5
+ subject { FactoryGirl.build(:boleto_unicred, conta: conta) }
6
+ let(:conta) { FactoryGirl.build(:conta_unicred) }
7
+
8
+
9
+ context "on validations" do
10
+ it { must validate_length_of(:numero_documento).is_at_most(11).with_message(:custom_length_maximum) }
11
+
12
+ context '#conta.carteira' do
13
+ it { subject.valid_carteira_inclusion.must_equal ['06','09','19','21','22'] }
14
+ it "validação da carteira da conta" do
15
+ subject.conta.carteira = '4'
16
+ conta_must_be_msg_error(:carteira, :custom_inclusion, {list: '06, 09, 19, 21, 22'})
17
+ subject.conta.carteira = '06'
18
+ conta_wont_be_msg_error(:carteira, :custom_inclusion, {list: '06, 09, 19, 21, 22'})
19
+ end
20
+ end
21
+
22
+ describe '#conta.convenio / codigo_cedente' do
23
+ it { subject.valid_convenio_maximum.must_equal 7 }
24
+ it { subject.valid_convenio_required.must_equal true }
25
+
26
+ it "validação obrigatoriedade do codigo_cedente da conta" do
27
+ subject.conta.codigo_cedente = ''
28
+ conta_must_be_msg_error(:convenio, :blank)
29
+ subject.conta.codigo_cedente = '123456'
30
+ conta_wont_be_msg_error(:convenio, :blank)
31
+ end
32
+ end
33
+
34
+ context "#valid_avalista_required" do
35
+ it { subject.valid_avalista_required.must_equal true }
36
+ end
37
+
38
+ private
39
+
40
+ def conta_must_be_msg_error(attr_validation, msg_key, options_msg={})
41
+ must_be_message_error(:base, "#{BrBoleto::Conta::Unicred.human_attribute_name(attr_validation)} #{get_message(msg_key, options_msg)}")
42
+ end
43
+ def conta_wont_be_msg_error(attr_validation, msg_key, options_msg={})
44
+ wont_be_message_error(:base, "#{BrBoleto::Conta::Unicred.human_attribute_name(attr_validation)} #{get_message(msg_key, options_msg)}")
45
+ end
46
+ end
47
+
48
+ describe "#default_values" do
49
+ it "local_pagamento deve ter o valor padrão conforme a documentação" do
50
+ BrBoleto::Boleto::Unicred.new.local_pagamento.must_equal 'PAGÁVEL PREFERENCIALMENTE NA REDE BRADESCO OU NO BRADESCO EXPRESSO'
51
+ end
52
+ end
53
+
54
+ describe "#digito_verificador_nosso_numero" do
55
+ it "deve calcular pelo Modulo11Fator3197" do
56
+ # subject.carteira = 09
57
+ subject.numero_documento = 111
58
+ BrBoleto::Calculos::Modulo11FatorDe2a7.expects(:new).with("0900000000111").returns("meu_resultado")
59
+ subject.digito_verificador_nosso_numero.must_equal "meu_resultado"
60
+ end
61
+ end
62
+
63
+ describe "#nosso_numero" do
64
+ subject { FactoryGirl.build(:boleto_unicred, numero_documento: '68315') }
65
+
66
+ it "deve retornar o numero do documento com o digito_verificador_nosso_numero" do
67
+ subject.stubs(:digito_verificador_nosso_numero).returns('9')
68
+ subject.numero_documento = '3646'
69
+ subject.nosso_numero.must_equal "09/00000003646-9"
70
+ end
71
+ end
72
+
73
+ describe "#codigo_de_barras_do_banco" do
74
+ subject do
75
+ FactoryGirl.build(:boleto_unicred, conta: {
76
+ carteira: '09',
77
+ agencia: '78',
78
+ conta_corrente: '668',
79
+ },
80
+ numero_documento: '395'
81
+ )
82
+ end
83
+ it "deve montar o codigo corretamente com as informações" do
84
+ subject.stubs(:nosso_numero).returns('09/00000003646-9')
85
+
86
+ result = subject.codigo_de_barras_do_banco
87
+ result.size.must_equal 25
88
+
89
+ result[0..3].must_equal '0078' # Agencia
90
+ result[4..5].must_equal '09' # Carteira
91
+ result[6..16].must_equal '00000000395' # Numero documento
92
+ result[17..23].must_equal '0000668' # Conta Corrente
93
+ result[24].must_equal '0' # Zero
94
+
95
+ subject.codigo_de_barras_do_banco.must_equal '0078090000000039500006680'
96
+ end
97
+ end
98
+
99
+ describe "#codigo_de_barras" do
100
+ subject do
101
+ FactoryGirl.build(:boleto_unicred) do |unicred|
102
+ unicred.conta.agencia = 3069
103
+ unicred.conta.codigo_cedente = 828_19 # Para o unicred é o código do cliente
104
+ unicred.conta.codigo_cedente_dv = '0' # Para o unicred é o código do cliente
105
+ unicred.conta.carteira = '09'
106
+ unicred.numero_documento = 100_10
107
+ unicred.valor_documento = 93015.78
108
+ unicred.data_vencimento = Date.parse('2020-02-17')
109
+ end
110
+ end
111
+
112
+ it { subject.codigo_de_barras.must_equal '23795816800093015783069090000001001000897550' }
113
+ it { subject.linha_digitavel.must_equal '23793.06901 90000.001009 10008.975509 5 81680009301578' }
114
+
115
+ it "codigo de barras de um boleto de exemplo" do
116
+ subject.conta.agencia = 3069
117
+ subject.conta.codigo_cedente = 82819 # Para o unicred é o código do cliente
118
+ subject.conta.codigo_cedente_dv = 0 # Para o unicred é o código do cliente
119
+ subject.conta.carteira = '09'
120
+ subject.numero_documento = 15_679
121
+ subject.valor_documento = 408.50
122
+ subject.data_vencimento = Date.parse('2016-09-01')
123
+
124
+ subject.linha_digitavel.must_equal '23793.06901 90000.001561 79008.975504 3 69040000040850'
125
+ subject.codigo_de_barras.must_equal '23793690400000408503069090000001567900897550'
126
+ end
127
+ end
128
+ end