br_boleto 2.1.0 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -0
  3. data/Gemfile.lock +1 -1
  4. data/README.markdown +157 -8
  5. data/br_boleto.gemspec +1 -1
  6. data/lib/br_boleto.rb +12 -1
  7. data/lib/br_boleto/association/have_conta.rb +31 -27
  8. data/lib/br_boleto/boleto/banco_brasil.rb +130 -0
  9. data/lib/br_boleto/boleto/santander.rb +77 -0
  10. data/lib/br_boleto/conta/banco_brasil.rb +156 -0
  11. data/lib/br_boleto/conta/itau.rb +8 -3
  12. data/lib/br_boleto/conta/santander.rb +208 -0
  13. data/lib/br_boleto/remessa/cnab240/banco_brasil.rb +132 -0
  14. data/lib/br_boleto/remessa/cnab240/bradesco.rb +1 -3
  15. data/lib/br_boleto/remessa/cnab240/itau.rb +0 -6
  16. data/lib/br_boleto/remessa/cnab240/santander.rb +266 -0
  17. data/lib/br_boleto/remessa/cnab400/banco_brasil.rb +264 -0
  18. data/lib/br_boleto/remessa/cnab400/bradesco.rb +1 -1
  19. data/lib/br_boleto/remessa/cnab400/santander.rb +215 -0
  20. data/lib/br_boleto/retorno/cnab240/banco_brasil.rb +10 -0
  21. data/lib/br_boleto/retorno/cnab240/base.rb +3 -2
  22. data/lib/br_boleto/retorno/cnab240/caixa.rb +3 -2
  23. data/lib/br_boleto/retorno/cnab240/itau.rb +1 -2
  24. data/lib/br_boleto/retorno/cnab240/santander.rb +38 -0
  25. data/lib/br_boleto/retorno/cnab240/sicoob.rb +3 -2
  26. data/lib/br_boleto/retorno/cnab400/banco_brasil.rb +46 -0
  27. data/lib/br_boleto/retorno/cnab400/bradesco.rb +4 -3
  28. data/lib/br_boleto/retorno/cnab400/itau.rb +2 -2
  29. data/lib/br_boleto/retorno/cnab400/santander.rb +44 -0
  30. data/lib/br_boleto/retorno/cnab400/sicoob.rb +3 -2
  31. data/lib/br_boleto/retorno/cnab400/sicredi.rb +20 -6
  32. data/lib/br_boleto/retorno/pagamento.rb +28 -7
  33. data/lib/br_boleto/version.rb +1 -1
  34. data/test/br_boleto/boleto/banco_brasil_test.rb +183 -0
  35. data/test/br_boleto/boleto/santander_test.rb +122 -0
  36. data/test/br_boleto/conta/banco_brasil_test.rb +209 -0
  37. data/test/br_boleto/conta/santantader_test.rb +222 -0
  38. data/test/br_boleto/remessa/cnab240/banco_brasil_test.rb +187 -0
  39. data/test/br_boleto/remessa/cnab240/itau_test.rb +4 -0
  40. data/test/br_boleto/remessa/cnab240/santander_test.rb +144 -0
  41. data/test/br_boleto/remessa/cnab400/banco_brasil_test.rb +285 -0
  42. data/test/br_boleto/remessa/cnab400/bradesco_test.rb +7 -0
  43. data/test/br_boleto/remessa/cnab400/santander_test.rb +174 -0
  44. data/test/br_boleto/retorno/cnab240/banco_brasil_test.rb +271 -0
  45. data/test/br_boleto/retorno/cnab240/base_test.rb +20 -10
  46. data/test/br_boleto/retorno/cnab240/bradesco_test.rb +15 -15
  47. data/test/br_boleto/retorno/cnab240/caixa_test.rb +10 -10
  48. data/test/br_boleto/retorno/cnab240/cecred_test.rb +55 -138
  49. data/test/br_boleto/retorno/cnab240/itau_test.rb +15 -15
  50. data/test/br_boleto/retorno/cnab240/santander_test.rb +282 -0
  51. data/test/br_boleto/retorno/cnab240/sicoob_test.rb +25 -15
  52. data/test/br_boleto/retorno/cnab240/sicredi_test.rb +15 -15
  53. data/test/br_boleto/retorno/cnab240/unicred_test.rb +15 -15
  54. data/test/br_boleto/retorno/cnab400/banco_brasil_test.rb +7 -0
  55. data/test/br_boleto/retorno/cnab400/bradesco_test.rb +24 -12
  56. data/test/br_boleto/retorno/cnab400/itau_test.rb +6 -4
  57. data/test/br_boleto/retorno/cnab400/santander_test.rb +7 -0
  58. data/test/br_boleto/retorno/cnab400/sicoob_test.rb +20 -10
  59. data/test/br_boleto/retorno/cnab400/sicredi_test.rb +97 -1
  60. data/test/br_boleto/retorno/cnab400/unicred.rb +18 -18
  61. data/test/br_boleto/retorno/pagamento_test.rb +2 -2
  62. data/test/factories/boleto/boleto_banco_brasil.rb +18 -0
  63. data/test/factories/boleto/boleto_santander.rb +18 -0
  64. data/test/factories/conta/banco_brasil.rb +16 -0
  65. data/test/factories/conta/santander.rb +15 -0
  66. data/test/factories/remessa/cnab240/banco_brasil.rb +9 -0
  67. data/test/factories/remessa/cnab240/santander.rb +9 -0
  68. data/test/factories/remessa/cnab400/banco_brasil.rb +8 -0
  69. data/test/factories/remessa/cnab400/santander.rb +8 -0
  70. data/test/fixtures/retorno/cnab240/banco_brasil.ret +74 -0
  71. data/test/fixtures/retorno/cnab240/cecred.ret +10 -0
  72. data/test/fixtures/retorno/cnab240/santander.ret +16 -0
  73. data/test/fixtures/retorno/cnab400/sicredi.ret +4 -0
  74. metadata +64 -7
@@ -0,0 +1,222 @@
1
+ require 'test_helper'
2
+
3
+ describe BrBoleto::Conta::Santander do
4
+ subject { FactoryGirl.build(:conta_santander) }
5
+
6
+ it "deve herdar de Conta::Base" do
7
+ subject.class.superclass.must_equal BrBoleto::Conta::Base
8
+ end
9
+ context "valores padrões" do
10
+ it "deve setar a carteira com '101' " do
11
+ subject.class.new.carteira.must_equal '101'
12
+ end
13
+ it "deve setar a valid_agencia_length com 4 " do
14
+ subject.class.new.valid_agencia_length.must_equal 4
15
+ end
16
+ it "deve setar a valid_carteira_required com true " do
17
+ subject.class.new.valid_carteira_required.must_equal true
18
+ end
19
+ it "deve setar a valid_carteira_length com 3 " do
20
+ subject.class.new.valid_carteira_length.must_equal 3
21
+ end
22
+ it "deve setar a valid_conta_corrente_required com true " do
23
+ subject.class.new.valid_conta_corrente_required.must_equal true
24
+ end
25
+ it "deve setar a valid_conta_corrente_maximum com 9 " do
26
+ subject.class.new.valid_conta_corrente_maximum.must_equal 9
27
+ end
28
+ it "deve setar a valid_codigo_cedente_maximum com 7 " do
29
+ subject.class.new.valid_codigo_cedente_maximum.must_equal 7
30
+ end
31
+ end
32
+ describe "Validations" do
33
+ it { must validate_presence_of(:agencia) }
34
+ it { must validate_presence_of(:razao_social) }
35
+ it { must validate_presence_of(:cpf_cnpj) }
36
+ it do
37
+ subject.agencia_dv = 21
38
+ must_be_message_error(:agencia_dv, :custom_length_is, {count: 1})
39
+ end
40
+ context 'Validações padrões da carteira' do
41
+ subject { BrBoleto::Conta::Santander.new }
42
+ it { must validate_presence_of(:carteira) }
43
+ it 'Tamanho deve ser de 3' do
44
+ subject.carteira = '1234'
45
+ must_be_message_error(:carteira, :custom_length_is, {count: 3})
46
+ end
47
+ it "valores aceitos" do
48
+ subject.carteira = '04'
49
+ must_be_message_error(:carteira, :custom_inclusion, {list: '101, 102, 121'})
50
+ end
51
+ end
52
+ context 'Validações padrões da conta_corrente' do
53
+ subject { BrBoleto::Conta::Santander.new }
54
+ it { must validate_presence_of(:conta_corrente) }
55
+ it 'Tamanho deve ter o tamanho maximo de 9' do
56
+ subject.conta_corrente = '1234567890'
57
+ must_be_message_error(:conta_corrente, :custom_length_maximum, {count: 9})
58
+ end
59
+ end
60
+ context 'Validações padrões da codigo_cedente' do
61
+ subject { BrBoleto::Conta::Santander.new }
62
+ it 'Tamanho deve ter o tamanho maximo de 7' do
63
+ subject.codigo_cedente = '12345678'
64
+ must_be_message_error(:convenio, :custom_length_maximum, {count: 7})
65
+ end
66
+ end
67
+ it 'codigo_transmissao deve ter no maximo 20 digitos' do
68
+ subject.codigo_transmissao = '123456789012345678901'
69
+ must_be_message_error(:codigo_transmissao, :custom_length_maximum, {count: 20})
70
+ subject.codigo_transmissao = '12345678901234567890'
71
+ wont_be_message_error(:codigo_transmissao, :custom_length_maximum, {count: 20})
72
+ end
73
+ end
74
+
75
+ it "codigo do banco" do
76
+ subject.codigo_banco.must_equal '033'
77
+ end
78
+ it '#codigo_banco_dv' do
79
+ subject.codigo_banco_dv.must_equal '7'
80
+ end
81
+
82
+ describe "#nome_banco" do
83
+ it "valor padrão para o nome_banco" do
84
+ subject.nome_banco.must_equal 'SANTANDER'
85
+ end
86
+ it "deve ser possível mudar o valor do nome do banco" do
87
+ subject.nome_banco = 'MEU'
88
+ subject.nome_banco.must_equal 'MEU'
89
+ end
90
+ end
91
+
92
+ it "#versao_layout_arquivo_cnab_240" do
93
+ subject.versao_layout_arquivo_cnab_240.must_equal '040'
94
+ end
95
+ it "#versao_layout_lote_cnab_240" do
96
+ subject.versao_layout_lote_cnab_240.must_equal '030'
97
+ end
98
+
99
+ describe '#agencia_dv' do
100
+ it "deve ser personalizavel pelo usuario" do
101
+ subject.agencia_dv = 88
102
+ subject.agencia_dv.must_equal 88
103
+ end
104
+ it "se não passar valor deve calcular automatico" do
105
+ subject.agencia = '1234'
106
+ BrBoleto::Calculos::Modulo11FatorDe2a9RestoZero.expects(:new).with('1234').returns(stub(to_s: 5))
107
+
108
+ subject.agencia_dv.must_equal 5
109
+ end
110
+ end
111
+
112
+ describe '#conta_corrente_dv' do
113
+ it "deve ser personalizavel pelo usuario" do
114
+ subject.conta_corrente_dv = 88
115
+ subject.conta_corrente_dv.must_equal 88
116
+ end
117
+ it "se não passar valor deve calcular automatico" do
118
+ subject.conta_corrente_dv = nil
119
+ subject.conta_corrente = '6688'
120
+ BrBoleto::Calculos::Modulo11FatorDe2a9RestoZero.expects(:new).with('000006688').returns(stub(to_s: 5))
121
+
122
+ subject.conta_corrente_dv.must_equal 5
123
+ end
124
+ end
125
+
126
+ describe '#codigo_transmissao' do
127
+ it "deve ajustar valor para 20 digitos" do
128
+ subject.codigo_transmissao = 14
129
+ subject.codigo_transmissao.must_equal '00000000000000000014'
130
+ end
131
+ end
132
+
133
+
134
+ describe "#get_especie_titulo" do
135
+ context "CÓDIGOS para o cnab 240 do Santander" do
136
+ it { subject.get_especie_titulo('02', 240).must_equal '02' } # DM - DUPLICATA MERCANTIL
137
+ it { subject.get_especie_titulo('04', 240).must_equal '04' } # DS - DUPLICATA DE SERVICO
138
+ it { subject.get_especie_titulo('07', 240).must_equal '07' } # LC - LETRA DE CÂMBIO
139
+ it { subject.get_especie_titulo('12', 240).must_equal '12' } # NP - NOTA PROMISSORIA
140
+ it { subject.get_especie_titulo('13', 240).must_equal '13' } # NR - NOTA PROMISSORIA RURAL
141
+ it { subject.get_especie_titulo('17', 240).must_equal '17' } # RC - RECIBO
142
+ it { subject.get_especie_titulo('20', 240).must_equal '20' } # AP - APOLICE DE SEGURO
143
+ it { subject.get_especie_titulo('01', 240).must_equal '97' } # CH - CHEQUE
144
+ it { subject.get_especie_titulo('98', 240).must_equal '98' } # NPD - NOTA PROMISSORIA DIRETA
145
+ end
146
+ context "CÓDIGOS para o cnab 400 do Santander" do
147
+ it { subject.get_especie_titulo('02', 400).must_equal '01' } # DM - DUPLICATA MERCANTIL
148
+ it { subject.get_especie_titulo('12', 400).must_equal '02' } # NP - NOTA PROMISSORIA
149
+ it { subject.get_especie_titulo('20', 400).must_equal '03' } # AP - APOLICE DE SEGURO
150
+ it { subject.get_especie_titulo('17', 400).must_equal '05' } # RC - RECIBO
151
+ it { subject.get_especie_titulo('04', 400).must_equal '06' } # DS - DUPLICATA DE SERVICO
152
+ it { subject.get_especie_titulo('07', 400).must_equal '07' } # LC - LETRA DE CÂMBIO
153
+ end
154
+ end
155
+
156
+ describe "#get_codigo_movimento_remessa" do
157
+ context "CÓDIGOS para o cnab 240 do Santander" do
158
+ it { subject.get_codigo_movimento_remessa('01', 240).must_equal '01' } # Entrada de título
159
+ it { subject.get_codigo_movimento_remessa('02', 240).must_equal '02' } # Pedido de baixa
160
+ it { subject.get_codigo_movimento_remessa('04', 240).must_equal '04' } # Concessão de abatimento
161
+ it { subject.get_codigo_movimento_remessa('05', 240).must_equal '05' } # Cancelamento de abatimento
162
+ it { subject.get_codigo_movimento_remessa('06', 240).must_equal '06' } # Alteração de vencimento
163
+ it { subject.get_codigo_movimento_remessa('07', 240).must_equal '10' } # Concessão de Desconto
164
+ it { subject.get_codigo_movimento_remessa('08', 240).must_equal '11' } # Cancelamento de desconto
165
+ it { subject.get_codigo_movimento_remessa('09', 240).must_equal '09' } # Pedido de Protesto
166
+ it { subject.get_codigo_movimento_remessa('10', 240).must_equal '18' } # Pedido de Sustação de Protesto
167
+ it { subject.get_codigo_movimento_remessa('21', 240).must_equal '07' } # Alteração da identificação do título na empresa
168
+ it { subject.get_codigo_movimento_remessa('22', 240).must_equal '08' } # Alteração seu número
169
+ it { subject.get_codigo_movimento_remessa('31', 240).must_equal '31' } # Alteração de outros dados
170
+ it { subject.get_codigo_movimento_remessa('41', 240).must_equal '98' } # Não Protestar
171
+ end
172
+
173
+ context "CÓDIGOS para o cnab 400 do Santander" do
174
+ it { subject.get_codigo_movimento_remessa('01', 400).must_equal '01' } # Entrada de título
175
+ it { subject.get_codigo_movimento_remessa('02', 400).must_equal '02' } # Pedido de baixa
176
+ it { subject.get_codigo_movimento_remessa('04', 400).must_equal '04' } # Concessão de abatimento
177
+ it { subject.get_codigo_movimento_remessa('05', 400).must_equal '05' } # Cancelamento de abatimento
178
+ it { subject.get_codigo_movimento_remessa('06', 400).must_equal '06' } # Alteração de vencimento
179
+ it { subject.get_codigo_movimento_remessa('21', 400).must_equal '07' } # Alteração da identificação do título na empresa
180
+ it { subject.get_codigo_movimento_remessa('22', 400).must_equal '08' } # Alteração seu número
181
+ it { subject.get_codigo_movimento_remessa('09', 400).must_equal '09' } # Pedido de Protesto
182
+ it { subject.get_codigo_movimento_remessa('10', 400).must_equal '18' } # Sustar Protesto e Baixar Título
183
+ it { subject.get_codigo_movimento_remessa('11', 400).must_equal '18' } # Sustar Protesto e Manter em Carteira
184
+ end
185
+ end
186
+
187
+ describe "#get_codigo_multa" do
188
+ context "CÓDIGOS para o Santander" do
189
+ it { subject.get_codigo_multa('1').must_equal '4' } # Com Multa
190
+ it { subject.get_codigo_multa('2').must_equal '4' } # Com Multa
191
+ it { subject.get_codigo_multa('3').must_equal '0' } # Sem Multa (Isento)
192
+ end
193
+ end
194
+
195
+ describe "#get_tipo_cobranca" do
196
+ context "CÓDIGOS para o cnab 400 do Santander" do
197
+ it { subject.get_tipo_cobranca('1', 400).must_equal '5' } # RÁPIDA COM REGISTRO
198
+ it { subject.get_tipo_cobranca('2', 400).must_equal '2' } # ELETRÔNICA COM REGISTRO
199
+ it { subject.get_tipo_cobranca('3', 400).must_equal '3' } # CAUCIONADA ELETRÔNICA
200
+ it { subject.get_tipo_cobranca('4', 400).must_equal '7' } # DESCONTADA ELETRÔNICA
201
+ it { subject.get_tipo_cobranca('5', 400).must_equal '4' } # COBRANÇA SEM REGISTRO
202
+ it { subject.get_tipo_cobranca('6', 400).must_equal '6' } # CAUCIONADA RAPIDA
203
+ end
204
+
205
+ context "CÓDIGOS para o cnab 240 do Santander" do
206
+ it { subject.get_tipo_cobranca('06', 240).must_equal '06' } # Cobrança Caucionada (Rápida com Registro)
207
+ end
208
+ end
209
+
210
+ describe "#get_codigo_protesto" do
211
+ context "CÓDIGOS para o Santander" do
212
+ it { subject.get_codigo_protesto('0').must_equal '0' } # Não Protestar
213
+ end
214
+ end
215
+
216
+ describe "#get_codigo_moeda_240" do
217
+ context "CÓDIGOS para o Santander" do
218
+ it { subject.get_codigo_moeda('09', 240).must_equal '00' } # Real
219
+ end
220
+ end
221
+
222
+ end
@@ -0,0 +1,187 @@
1
+ require 'test_helper'
2
+
3
+ describe BrBoleto::Remessa::Cnab240::BancoBrasil do
4
+ subject { FactoryGirl.build(:remessa_cnab240_banco_brasil, lotes: lote) }
5
+ let(:pagamento) { FactoryGirl.build(:remessa_pagamento, valor_documento: 879.66) }
6
+ let(:lote) { FactoryGirl.build(:remessa_lote, pagamentos: pagamento) }
7
+
8
+ it "deve herdar da class Base" do
9
+ subject.class.superclass.must_equal BrBoleto::Remessa::Cnab240::Base
10
+ end
11
+
12
+ context "validations" do
13
+ describe 'Validações personalizadas da conta' do
14
+ it 'valid_carteira_required' do
15
+ subject.conta.carteira = ''
16
+ conta_must_be_msg_error(:carteira, :blank)
17
+ end
18
+
19
+ it 'valid_carteira_length' do
20
+ subject.conta.carteira = '1234567890123456'
21
+ conta_must_be_msg_error(:carteira, :custom_length_is, {count: 2})
22
+ end
23
+
24
+ it 'valid_convenio_required' do
25
+ subject.conta.convenio = ''
26
+ conta_must_be_msg_error(:convenio, :blank)
27
+ end
28
+
29
+ # it 'valid_convenio_length' do
30
+ # subject.send(:valid_convenio_length).must_equal 2
31
+ # subject.conta.convenio = '1234567890123456'
32
+ # conta_must_be_msg_error(:convenio, :custom_length_maximum, {count: 7})
33
+ # end
34
+
35
+ it 'agencia_required' do
36
+ subject.conta.agencia = ''
37
+ conta_must_be_msg_error(:agencia, :blank)
38
+ end
39
+
40
+ it 'agencia_length' do
41
+ subject.conta.agencia = '1234567890123456'
42
+ conta_must_be_msg_error(:agencia, :custom_length_is, {count: 4})
43
+ end
44
+
45
+ private
46
+
47
+ def conta_must_be_msg_error(attr_validation, msg_key, options_msg={})
48
+ must_be_message_error(:base, "#{BrBoleto::Conta::BancoBrasil.human_attribute_name(attr_validation)} #{get_message(msg_key, options_msg)}")
49
+ end
50
+ end
51
+ end
52
+
53
+
54
+ describe "#convenio_lote" do
55
+ it "deve ter 20 caracteres" do
56
+ subject.convenio_lote(lote).size.must_equal 20
57
+ end
58
+ it "1 - Primeira parte = codigo convenio 9 posições - ajustados com zeros a esquerda" do
59
+ subject.conta.codigo_cedente = '88'
60
+ subject.convenio_lote(lote)[0..8].must_equal '000000088'
61
+
62
+ subject.conta.convenio = '7374'
63
+ subject.convenio_lote(lote)[0..8].must_equal '000007374'
64
+ end
65
+
66
+ it "2 - Segunda parte = Cobrança Cedente 4 posições - valor fixo '0014' " do
67
+ subject.convenio_lote(lote)[9..12].must_equal '0014'
68
+ end
69
+
70
+ it "3 - Terceira parte = Carteira 2 posições - ajustados com zeros a esquerda" do
71
+ subject.conta.carteira = '88'
72
+ subject.convenio_lote(lote)[13..14].must_equal '88'
73
+
74
+ subject.conta.carteira = '1'
75
+ subject.convenio_lote(lote)[13..14].must_equal '01'
76
+ end
77
+
78
+ it "4 - Quarta parte = Variação da Carteira 3 posições - ajustados com zeros a esquerda" do
79
+ subject.conta.variacao_carteira = '123'
80
+ subject.convenio_lote(lote)[15..17].must_equal '123'
81
+
82
+ subject.conta.variacao_carteira = '1'
83
+ subject.convenio_lote(lote)[15..17].must_equal '001'
84
+ end
85
+
86
+ it "5 - Quinta parte = Brancos" do
87
+ subject.convenio_lote(lote)[18..19].must_equal ' '
88
+ end
89
+
90
+ end
91
+
92
+ describe "#informacoes_da_conta" do
93
+ it "deve ter 20 posições" do
94
+ subject.informacoes_da_conta.size.must_equal 20
95
+ end
96
+
97
+ it "1 - Primeira parte = agencia 5 posicoes - ajustados com zeros a esquerda" do
98
+ subject.conta.agencia = '47'
99
+ subject.informacoes_da_conta[0..4].must_equal '00047'
100
+
101
+ subject.conta.agencia = '1234'
102
+ subject.informacoes_da_conta[0..4].must_equal '01234'
103
+ end
104
+
105
+ it "2 - Segunda parte = agencia_dv" do
106
+ subject.conta.agencia_dv = '7'
107
+ subject.informacoes_da_conta[5].must_equal "7"
108
+ end
109
+
110
+ it "3 - Terceira parte = conta_corrente 12 posicoes - ajustados com zeros a esquerda" do
111
+ subject.conta.conta_corrente = '89755'
112
+ subject.informacoes_da_conta[6..17].must_equal '000000089755'
113
+
114
+ subject.conta.conta_corrente = '1234567890'
115
+ subject.informacoes_da_conta[6..17].must_equal '001234567890'
116
+ end
117
+
118
+ it "4 - Quarta parte = Conta Corrente DV" do
119
+ subject.conta.conta_corrente_dv = '8'
120
+ subject.informacoes_da_conta[18..18].must_equal('8')
121
+ end
122
+
123
+ it "5 - Quinta parte = Se o conta_corrente_dv não for 2 digitos deve ter 1 espaço em branco" do
124
+ subject.informacoes_da_conta[19].must_equal(' ')
125
+ end
126
+ end
127
+
128
+ describe "#complemento_header_arquivo" do
129
+ it "deve ter 29 posições" do
130
+ subject.complemento_header_arquivo.size.must_equal 29
131
+ end
132
+
133
+ it "USO FEBRABAN com 25 posições em branco" do
134
+ subject.complemento_header_arquivo[0..28].must_equal ' ' * 29
135
+ end
136
+ end
137
+
138
+ describe "#complemento_p" do
139
+
140
+ it "deve ter 34 posições" do
141
+ subject.complemento_p(pagamento).size.must_equal 34
142
+ end
143
+
144
+ it "1 - Primeira parte = conta_corrente com 12 posicoes - ajustados com zeros a esquerda" do
145
+ subject.conta.conta_corrente = '1234'
146
+ subject.complemento_p(pagamento)[0..11].must_equal '000000001234'
147
+
148
+ subject.conta.conta_corrente = '264631'
149
+ subject.complemento_p(pagamento)[0..11].must_equal '000000264631'
150
+ end
151
+
152
+ it "2 - Seguna parte = Conta Corrente DV - 1 posicao" do
153
+ subject.conta.conta_corrente_dv = '7'
154
+ subject.complemento_p(pagamento)[12..13].must_equal '7 '
155
+ end
156
+
157
+ it "3 - Terceira parte = Nosso número com 20 posições ajustado com brancos a direita" do
158
+ pagamento.nosso_numero = '44447777777-1'
159
+ subject.complemento_p(pagamento)[14..33].must_equal '444477777771 '
160
+
161
+ pagamento.nosso_numero = '88888888999999999'
162
+ subject.complemento_p(pagamento)[14..33].must_equal '88888888999999999 '
163
+ end
164
+
165
+ end
166
+
167
+ describe "#segmento_p_numero_do_documento" do
168
+ it "deve ter 15 posições" do
169
+ subject.segmento_p_numero_do_documento(pagamento).size.must_equal 15
170
+ end
171
+
172
+ it "deve conter o numero do documento 15 posicoes - ajustados com brancos a direita" do
173
+ pagamento.expects(:numero_documento).returns("977897")
174
+ subject.segmento_p_numero_do_documento(pagamento).must_equal '977897 '
175
+ end
176
+ end
177
+
178
+ describe "#complemento_trailer_lote" do
179
+ it "deve ter 217 posições" do
180
+ subject.complemento_trailer_lote(lote, 5).size.must_equal 217
181
+ end
182
+
183
+ it " EXCLUSIVO FEBRABAN com 117 posicoes em branco" do
184
+ subject.complemento_trailer_lote(lote, 5).must_equal (' ' * 217)
185
+ end
186
+ end
187
+ end
@@ -198,4 +198,8 @@ describe BrBoleto::Remessa::Cnab240::Itau do
198
198
  subject.complemento_trailer_lote(lote, 5)[100..216].must_equal (' ' * 117)
199
199
  end
200
200
  end
201
+
202
+ describe "segmento_r_posicao_066_a_066" do
203
+ it { subject.segmento_r_posicao_066_a_066(pagamento).must_equal '0' }
204
+ end
201
205
  end
@@ -0,0 +1,144 @@
1
+ require 'test_helper'
2
+
3
+ describe BrBoleto::Remessa::Cnab240::Santander do
4
+ subject { FactoryGirl.build(:remessa_cnab240_santander, lotes: lote) }
5
+ let(:pagamento) { FactoryGirl.build(:remessa_pagamento, valor_documento: 879.66) }
6
+ let(:lote) { FactoryGirl.build(:remessa_lote, pagamentos: pagamento) }
7
+
8
+ it "deve herdar da class Base" do
9
+ subject.class.superclass.must_equal BrBoleto::Remessa::Cnab240::Base
10
+ end
11
+
12
+ context "validations" do
13
+ describe 'Validações personalizadas da conta' do
14
+ it 'valid_carteira_required' do
15
+ subject.conta.carteira = ''
16
+ conta_must_be_msg_error(:carteira, :blank)
17
+ end
18
+
19
+ it 'valid_carteira_length' do
20
+ subject.conta.carteira = '1234567890123456'
21
+ conta_must_be_msg_error(:carteira, :custom_length_is, {count: 3})
22
+ end
23
+
24
+ it 'valid_convenio_required' do
25
+ subject.conta.convenio = ''
26
+ conta_must_be_msg_error(:convenio, :blank)
27
+ end
28
+
29
+ it 'valid_convenio_length' do
30
+ subject.conta.convenio = '1234567890123456'
31
+ conta_must_be_msg_error(:convenio, :custom_length_maximum, {count: 7})
32
+ end
33
+
34
+ it 'agencia_required' do
35
+ subject.conta.agencia = ''
36
+ conta_must_be_msg_error(:agencia, :blank)
37
+ end
38
+
39
+ it 'agencia_length' do
40
+ subject.conta.agencia = '1234567890123456'
41
+ conta_must_be_msg_error(:agencia, :custom_length_is, {count: 4})
42
+ end
43
+
44
+ private
45
+
46
+ def conta_must_be_msg_error(attr_validation, msg_key, options_msg={})
47
+ must_be_message_error(:base, "#{BrBoleto::Conta::Santander.human_attribute_name(attr_validation)} #{get_message(msg_key, options_msg)}")
48
+ end
49
+ end
50
+ end
51
+
52
+
53
+ describe "#convenio_lote" do
54
+ it "deve ter 20 caracteres" do
55
+ subject.convenio_lote(lote).size.must_equal 20
56
+ end
57
+ it "deve ter 20 posições em branco" do
58
+ subject.convenio_lote(lote).must_equal (' ' * 20)
59
+ end
60
+ end
61
+
62
+ describe "#informacoes_da_conta" do
63
+ it "deve ter 25 posições" do
64
+ subject.informacoes_da_conta.size.must_equal 25
65
+ end
66
+
67
+ it "deve ter 25 posições em brancos" do
68
+ subject.informacoes_da_conta.must_equal (' ' * 25)
69
+
70
+ end
71
+ end
72
+
73
+ describe "#header_arquivo_posicao_167_a_240" do
74
+ it "deve ter 74 posições" do
75
+ subject.header_arquivo_posicao_167_a_240.size.must_equal 74
76
+ end
77
+
78
+ it "deve ter 74 posições em branco" do
79
+ subject.header_arquivo_posicao_167_a_240.must_equal (' ' * 74)
80
+ end
81
+ end
82
+
83
+ describe "#complemento_p" do
84
+
85
+ it "deve ter 35 posições" do
86
+ subject.complemento_p(pagamento).size.must_equal 35
87
+ end
88
+
89
+ it "1 - Primeira parte = conta_corrente com 12 posicoes - ajustados com zeros a esquerda" do
90
+ subject.conta.conta_corrente = '1234'
91
+ subject.complemento_p(pagamento)[0..8].must_equal '000001234'
92
+
93
+ subject.conta.conta_corrente = '264631'
94
+ subject.complemento_p(pagamento)[0..8].must_equal '000264631'
95
+ end
96
+
97
+ it "2 - Seguna parte = Conta Corrente DV - 1 posicao" do
98
+ subject.conta.conta_corrente_dv = '7'
99
+ subject.complemento_p(pagamento)[9..9].must_equal '7'
100
+ end
101
+
102
+ it "3 - Terceira parte = zeros" do
103
+ subject.complemento_p(pagamento)[10..18].must_equal '000000000'
104
+ end
105
+
106
+ it "4 - Quarta parte = zero" do
107
+ subject.complemento_p(pagamento)[19..19].must_equal '0'
108
+ end
109
+
110
+ it "5 - Quinta parte = brancos" do
111
+ subject.complemento_p(pagamento)[20..21].must_equal ' '
112
+ end
113
+
114
+ it "7 - Setima parte = numero_documento DV com 1 posicao - Deve ser o ultimo digito do nosso numero" do
115
+ pagamento.nosso_numero = '1212121212129'
116
+ subject.complemento_p(pagamento)[22..34].must_equal '1212121212129'
117
+
118
+ pagamento.nosso_numero = '9999999999990'
119
+ subject.complemento_p(pagamento)[22..34].must_equal '9999999999990'
120
+ end
121
+
122
+ end
123
+
124
+ describe "#segmento_p_numero_do_documento" do
125
+ it "deve ter 15 posições" do
126
+ subject.segmento_p_numero_do_documento(pagamento).size.must_equal 15
127
+ end
128
+
129
+ it "deve conter o numero do documento 15 posicoes - ajustados com zeros a esquerda" do
130
+ pagamento.expects(:numero_documento).returns("977897")
131
+ subject.segmento_p_numero_do_documento(pagamento).must_equal '000000000977897'
132
+ end
133
+ end
134
+
135
+ describe "#complemento_trailer_lote" do
136
+ it "deve ter 217 posições" do
137
+ subject.complemento_trailer_lote(lote, 5).size.must_equal 217
138
+ end
139
+
140
+ it "Exclusivo banco com 217 posicoes em branco" do
141
+ subject.complemento_trailer_lote(lote, 5).must_equal (' ' * 217)
142
+ end
143
+ end
144
+ end