br_boleto 2.1.0 → 2.2.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 (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