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.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/Gemfile.lock +1 -1
- data/README.markdown +157 -8
- data/br_boleto.gemspec +1 -1
- data/lib/br_boleto.rb +12 -1
- data/lib/br_boleto/association/have_conta.rb +31 -27
- data/lib/br_boleto/boleto/banco_brasil.rb +130 -0
- data/lib/br_boleto/boleto/santander.rb +77 -0
- data/lib/br_boleto/conta/banco_brasil.rb +156 -0
- data/lib/br_boleto/conta/itau.rb +8 -3
- data/lib/br_boleto/conta/santander.rb +208 -0
- data/lib/br_boleto/remessa/cnab240/banco_brasil.rb +132 -0
- data/lib/br_boleto/remessa/cnab240/bradesco.rb +1 -3
- data/lib/br_boleto/remessa/cnab240/itau.rb +0 -6
- data/lib/br_boleto/remessa/cnab240/santander.rb +266 -0
- data/lib/br_boleto/remessa/cnab400/banco_brasil.rb +264 -0
- data/lib/br_boleto/remessa/cnab400/bradesco.rb +1 -1
- data/lib/br_boleto/remessa/cnab400/santander.rb +215 -0
- data/lib/br_boleto/retorno/cnab240/banco_brasil.rb +10 -0
- data/lib/br_boleto/retorno/cnab240/base.rb +3 -2
- data/lib/br_boleto/retorno/cnab240/caixa.rb +3 -2
- data/lib/br_boleto/retorno/cnab240/itau.rb +1 -2
- data/lib/br_boleto/retorno/cnab240/santander.rb +38 -0
- data/lib/br_boleto/retorno/cnab240/sicoob.rb +3 -2
- data/lib/br_boleto/retorno/cnab400/banco_brasil.rb +46 -0
- data/lib/br_boleto/retorno/cnab400/bradesco.rb +4 -3
- data/lib/br_boleto/retorno/cnab400/itau.rb +2 -2
- data/lib/br_boleto/retorno/cnab400/santander.rb +44 -0
- data/lib/br_boleto/retorno/cnab400/sicoob.rb +3 -2
- data/lib/br_boleto/retorno/cnab400/sicredi.rb +20 -6
- data/lib/br_boleto/retorno/pagamento.rb +28 -7
- data/lib/br_boleto/version.rb +1 -1
- data/test/br_boleto/boleto/banco_brasil_test.rb +183 -0
- data/test/br_boleto/boleto/santander_test.rb +122 -0
- data/test/br_boleto/conta/banco_brasil_test.rb +209 -0
- data/test/br_boleto/conta/santantader_test.rb +222 -0
- data/test/br_boleto/remessa/cnab240/banco_brasil_test.rb +187 -0
- data/test/br_boleto/remessa/cnab240/itau_test.rb +4 -0
- data/test/br_boleto/remessa/cnab240/santander_test.rb +144 -0
- data/test/br_boleto/remessa/cnab400/banco_brasil_test.rb +285 -0
- data/test/br_boleto/remessa/cnab400/bradesco_test.rb +7 -0
- data/test/br_boleto/remessa/cnab400/santander_test.rb +174 -0
- data/test/br_boleto/retorno/cnab240/banco_brasil_test.rb +271 -0
- data/test/br_boleto/retorno/cnab240/base_test.rb +20 -10
- data/test/br_boleto/retorno/cnab240/bradesco_test.rb +15 -15
- data/test/br_boleto/retorno/cnab240/caixa_test.rb +10 -10
- data/test/br_boleto/retorno/cnab240/cecred_test.rb +55 -138
- data/test/br_boleto/retorno/cnab240/itau_test.rb +15 -15
- data/test/br_boleto/retorno/cnab240/santander_test.rb +282 -0
- data/test/br_boleto/retorno/cnab240/sicoob_test.rb +25 -15
- data/test/br_boleto/retorno/cnab240/sicredi_test.rb +15 -15
- data/test/br_boleto/retorno/cnab240/unicred_test.rb +15 -15
- data/test/br_boleto/retorno/cnab400/banco_brasil_test.rb +7 -0
- data/test/br_boleto/retorno/cnab400/bradesco_test.rb +24 -12
- data/test/br_boleto/retorno/cnab400/itau_test.rb +6 -4
- data/test/br_boleto/retorno/cnab400/santander_test.rb +7 -0
- data/test/br_boleto/retorno/cnab400/sicoob_test.rb +20 -10
- data/test/br_boleto/retorno/cnab400/sicredi_test.rb +97 -1
- data/test/br_boleto/retorno/cnab400/unicred.rb +18 -18
- data/test/br_boleto/retorno/pagamento_test.rb +2 -2
- data/test/factories/boleto/boleto_banco_brasil.rb +18 -0
- data/test/factories/boleto/boleto_santander.rb +18 -0
- data/test/factories/conta/banco_brasil.rb +16 -0
- data/test/factories/conta/santander.rb +15 -0
- data/test/factories/remessa/cnab240/banco_brasil.rb +9 -0
- data/test/factories/remessa/cnab240/santander.rb +9 -0
- data/test/factories/remessa/cnab400/banco_brasil.rb +8 -0
- data/test/factories/remessa/cnab400/santander.rb +8 -0
- data/test/fixtures/retorno/cnab240/banco_brasil.ret +74 -0
- data/test/fixtures/retorno/cnab240/cecred.ret +10 -0
- data/test/fixtures/retorno/cnab240/santander.ret +16 -0
- data/test/fixtures/retorno/cnab400/sicredi.ret +4 -0
- 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
|