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.
- 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
|