br_boleto 2.0.1 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +2 -1
- data/.travis.yml +1 -1
- data/Gemfile.lock +2 -2
- data/br_boleto.gemspec +2 -3
- data/lib/br_boleto/association/have_conta.rb +27 -25
- data/lib/br_boleto/association/have_pagador.rb +2 -0
- data/lib/br_boleto/boleto/base.rb +0 -4
- data/lib/br_boleto/boleto/bradesco.rb +80 -0
- data/lib/br_boleto/boleto/caixa.rb +10 -12
- data/lib/br_boleto/boleto/cecred.rb +76 -0
- data/lib/br_boleto/boleto/itau.rb +114 -0
- data/lib/br_boleto/boleto/sicredi.rb +101 -0
- data/lib/br_boleto/boleto/unicred.rb +21 -0
- data/lib/br_boleto/conta/base.rb +28 -3
- data/lib/br_boleto/conta/bradesco.rb +120 -0
- data/lib/br_boleto/conta/caixa.rb +22 -12
- data/lib/br_boleto/conta/cecred.rb +67 -0
- data/lib/br_boleto/conta/itau.rb +199 -0
- data/lib/br_boleto/conta/sicoob.rb +40 -11
- data/lib/br_boleto/conta/sicredi.rb +171 -0
- data/lib/br_boleto/conta/unicred.rb +38 -0
- data/lib/br_boleto/helper/default_codes.rb +535 -26
- data/lib/br_boleto/pagador.rb +4 -0
- data/lib/br_boleto/remessa/base.rb +2 -0
- data/lib/br_boleto/remessa/cnab240/base.rb +21 -6
- data/lib/br_boleto/remessa/cnab240/bradesco.rb +141 -0
- data/lib/br_boleto/remessa/cnab240/caixa.rb +8 -1
- data/lib/br_boleto/remessa/cnab240/cecred.rb +169 -0
- data/lib/br_boleto/remessa/cnab240/helper/segmento_p.rb +29 -21
- data/lib/br_boleto/remessa/cnab240/helper/segmento_q.rb +4 -3
- data/lib/br_boleto/remessa/cnab240/helper/segmento_r.rb +5 -5
- data/lib/br_boleto/remessa/cnab240/helper/segmento_s.rb +4 -3
- data/lib/br_boleto/remessa/cnab240/itau.rb +186 -0
- data/lib/br_boleto/remessa/cnab240/sicoob.rb +4 -16
- data/lib/br_boleto/remessa/cnab240/sicredi.rb +205 -0
- data/lib/br_boleto/remessa/cnab240/unicred.rb +40 -0
- data/lib/br_boleto/remessa/cnab400/bradesco.rb +235 -0
- data/lib/br_boleto/remessa/cnab400/helper/detalhe.rb +6 -5
- data/lib/br_boleto/remessa/cnab400/itau.rb +190 -0
- data/lib/br_boleto/remessa/cnab400/sicoob.rb +3 -3
- data/lib/br_boleto/remessa/cnab400/sicredi.rb +276 -0
- data/lib/br_boleto/remessa/cnab400/unicred.rb +62 -0
- data/lib/br_boleto/remessa/pagamento.rb +93 -43
- data/lib/br_boleto/retorno/cnab240/base.rb +13 -12
- data/lib/br_boleto/retorno/cnab240/bradesco.rb +10 -0
- data/lib/br_boleto/retorno/cnab240/caixa.rb +2 -3
- data/lib/br_boleto/retorno/cnab240/cecred.rb +10 -0
- data/lib/br_boleto/retorno/cnab240/itau.rb +24 -0
- data/lib/br_boleto/retorno/cnab240/sicredi.rb +10 -0
- data/lib/br_boleto/retorno/cnab240/unicred.rb +10 -0
- data/lib/br_boleto/retorno/cnab400/bradesco.rb +42 -0
- data/lib/br_boleto/retorno/cnab400/itau.rb +43 -0
- data/lib/br_boleto/retorno/cnab400/sicoob.rb +2 -2
- data/lib/br_boleto/retorno/cnab400/sicredi.rb +43 -0
- data/lib/br_boleto/retorno/cnab400/unicred.rb +10 -0
- data/lib/br_boleto/retorno/pagamento.rb +18 -4
- data/lib/br_boleto/version.rb +2 -2
- data/lib/br_boleto.rb +28 -0
- data/lib/config/locales/br-boleto-en.yml +1 -0
- data/lib/config/locales/br-boleto-pt-BR.yml +1 -0
- data/test/br_boleto/association/have_pagador_test.rb +24 -0
- data/test/br_boleto/boleto/bradesco_test.rb +125 -0
- data/test/br_boleto/boleto/caixa_test.rb +18 -18
- data/test/br_boleto/boleto/cecred_test.rb +115 -0
- data/test/br_boleto/boleto/itau_test.rb +160 -0
- data/test/br_boleto/boleto/sicredi_test.rb +136 -0
- data/test/br_boleto/boleto/unicred_test.rb +128 -0
- data/test/br_boleto/conta/base_test.rb +298 -3
- data/test/br_boleto/conta/bradesco_test.rb +142 -0
- data/test/br_boleto/conta/caixa_test.rb +7 -6
- data/test/br_boleto/conta/cecred_test.rb +119 -0
- data/test/br_boleto/conta/itau_test.rb +189 -0
- data/test/br_boleto/conta/sicoob_test.rb +32 -2
- data/test/br_boleto/conta/sicredi_test.rb +180 -0
- data/test/br_boleto/conta/unicred_test.rb +154 -0
- data/test/br_boleto/pagador_test.rb +22 -2
- data/test/br_boleto/remessa/cnab240/base_test.rb +24 -12
- data/test/br_boleto/remessa/cnab240/bradesco_test.rb +196 -0
- data/test/br_boleto/remessa/cnab240/caixa_test.rb +51 -0
- data/test/br_boleto/remessa/cnab240/cecred_test.rb +242 -0
- data/test/br_boleto/remessa/cnab240/helper/segmento_p_test.rb +78 -71
- data/test/br_boleto/remessa/cnab240/helper/segmento_q_test.rb +4 -3
- data/test/br_boleto/remessa/cnab240/helper/segmento_r_test.rb +10 -18
- data/test/br_boleto/remessa/cnab240/helper/segmento_s_test.rb +6 -5
- data/test/br_boleto/remessa/cnab240/itau_test.rb +201 -0
- data/test/br_boleto/remessa/cnab240/sicoob_test.rb +1 -58
- data/test/br_boleto/remessa/cnab240/sicredi_test.rb +207 -0
- data/test/br_boleto/remessa/cnab240/unicred_test.rb +250 -0
- data/test/br_boleto/remessa/cnab400/base_test.rb +4 -4
- data/test/br_boleto/remessa/cnab400/bradesco_test.rb +164 -0
- data/test/br_boleto/remessa/cnab400/itau_test.rb +173 -0
- data/test/br_boleto/remessa/cnab400/sicoob_test.rb +2 -2
- data/test/br_boleto/remessa/cnab400/sicredi_test.rb +241 -0
- data/test/br_boleto/remessa/cnab400/unicred_test.rb +169 -0
- data/test/br_boleto/retorno/cnab240/base_test.rb +20 -10
- data/test/br_boleto/retorno/cnab240/bradesco_test.rb +228 -0
- data/test/br_boleto/retorno/cnab240/caixa_test.rb +20 -10
- data/test/br_boleto/retorno/cnab240/cecred_test.rb +228 -0
- data/test/br_boleto/retorno/cnab240/itau_test.rb +228 -0
- data/test/br_boleto/retorno/cnab240/sicoob_test.rb +20 -10
- data/test/br_boleto/retorno/cnab240/sicredi_test.rb +228 -0
- data/test/br_boleto/retorno/cnab240/unicred_test.rb +228 -0
- data/test/br_boleto/retorno/cnab400/bradesco_test.rb +255 -0
- data/test/br_boleto/retorno/cnab400/itau_test.rb +96 -0
- data/test/br_boleto/retorno/cnab400/sicoob_test.rb +10 -5
- data/test/br_boleto/retorno/cnab400/sicredi_test.rb +7 -0
- data/test/br_boleto/retorno/cnab400/unicred.rb +255 -0
- data/test/br_boleto/retorno/pagamento_test.rb +7 -0
- data/test/factories/boleto/boleto_bradesco.rb +18 -0
- data/test/factories/boleto/boleto_cecred.rb +18 -0
- data/test/factories/boleto/boleto_itau.rb +18 -0
- data/test/factories/boleto/boleto_sicredi.rb +18 -0
- data/test/factories/boleto/boleto_unicred.rb +18 -0
- data/test/factories/conta/bradesco.rb +16 -0
- data/test/factories/conta/caixa.rb +2 -1
- data/test/factories/conta/cecred.rb +15 -0
- data/test/factories/conta/itau.rb +15 -0
- data/test/factories/conta/sicoob.rb +2 -1
- data/test/factories/conta/sicredi.rb +15 -0
- data/test/factories/conta/unicred.rb +15 -0
- data/test/factories/remessa/cnab240/bradesco.rb +9 -0
- data/test/factories/remessa/cnab240/cecred.rb +9 -0
- data/test/factories/remessa/cnab240/itau.rb +9 -0
- data/test/factories/remessa/cnab240/sicredi.rb +9 -0
- data/test/factories/remessa/cnab240/unicred.rb +9 -0
- data/test/factories/remessa/cnab400/bradesco.rb +8 -0
- data/test/factories/remessa/cnab400/itau.rb +8 -0
- data/test/factories/remessa/cnab400/sicredi.rb +8 -0
- data/test/factories/remessa/cnab400/unicred.rb +8 -0
- data/test/fixtures/remessa/cnab240/caixa.rem +8 -0
- data/test/fixtures/remessa/cnab240/cecred.rem +8 -0
- data/test/fixtures/remessa/cnab240/sicoob.rem +8 -8
- data/test/fixtures/remessa/cnab240/unicred.rem +7 -0
- data/test/fixtures/retorno/cnab400/bradesco.ret +8 -0
- data/test/fixtures/retorno/cnab400/itau.ret +54 -0
- metadata +138 -3
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
describe BrBoleto::Remessa::Cnab240::Bradesco do
|
|
4
|
+
subject { FactoryGirl.build(:remessa_cnab240_bradesco, 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.send(:valid_carteira_required).must_equal true
|
|
16
|
+
subject.conta.carteira = ''
|
|
17
|
+
conta_must_be_msg_error(:carteira, :blank)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'valid_carteira_length' do
|
|
21
|
+
# subject.send(:valid_carteira_length).must_equal 2
|
|
22
|
+
subject.conta.carteira = '1234567890123456'
|
|
23
|
+
conta_must_be_msg_error(:carteira, :custom_length_is, {count: 2})
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it 'valid_convenio_required' do
|
|
27
|
+
# subject.send(:valid_convenio_required).must_equal true
|
|
28
|
+
subject.conta.convenio = ''
|
|
29
|
+
conta_must_be_msg_error(:convenio, :blank)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it 'valid_convenio_length' do
|
|
33
|
+
# subject.send(:valid_convenio_length).must_equal 2
|
|
34
|
+
subject.conta.convenio = '1234567890123456'
|
|
35
|
+
conta_must_be_msg_error(:convenio, :custom_length_maximum, {count: 7})
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it 'agencia_required' do
|
|
39
|
+
# subject.send(:agencia_required).must_equal true
|
|
40
|
+
subject.conta.agencia = ''
|
|
41
|
+
conta_must_be_msg_error(:agencia, :blank)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it 'agencia_length' do
|
|
45
|
+
# subject.send(:agencia_length).must_equal 2
|
|
46
|
+
subject.conta.agencia = '1234567890123456'
|
|
47
|
+
conta_must_be_msg_error(:agencia, :custom_length_is, {count: 4})
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
private
|
|
51
|
+
|
|
52
|
+
def conta_must_be_msg_error(attr_validation, msg_key, options_msg={})
|
|
53
|
+
must_be_message_error(:base, "#{BrBoleto::Conta::Bradesco.human_attribute_name(attr_validation)} #{get_message(msg_key, options_msg)}")
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
describe "#convenio_lote" do
|
|
60
|
+
it "as 7 primeiras posições deve ser o valor do convenio ajustado com zeros a esquerda" do
|
|
61
|
+
subject.conta.codigo_cedente = '88'
|
|
62
|
+
subject.convenio_lote(lote).must_equal '00000000000000000088'
|
|
63
|
+
|
|
64
|
+
subject.conta.convenio = '7374'
|
|
65
|
+
subject.convenio_lote(lote).must_equal '00000000000000007374'
|
|
66
|
+
end
|
|
67
|
+
it "deve ter 20 caracteres" do
|
|
68
|
+
subject.convenio_lote(lote).size.must_equal 20
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
describe "#informacoes_da_conta" do
|
|
73
|
+
it "deve ter 20 posições" do
|
|
74
|
+
subject.informacoes_da_conta.size.must_equal 20
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it "1 - Primeira parte = agencia 5 posicoes - ajustados com zeros a esquerda" do
|
|
78
|
+
subject.conta.agencia = '47'
|
|
79
|
+
subject.informacoes_da_conta[0..4].must_equal '00047'
|
|
80
|
+
|
|
81
|
+
subject.conta.agencia = '1234'
|
|
82
|
+
subject.informacoes_da_conta[0..4].must_equal '01234'
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it "2 - Segunda parte = agencia_dv" do
|
|
86
|
+
subject.conta.agencia_dv = '7'
|
|
87
|
+
subject.informacoes_da_conta[5].must_equal "7"
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it "3 - Terceira parte = conta_corrente 12 posicoes - ajustados com zeros a esquerda" do
|
|
91
|
+
subject.conta.conta_corrente = '89755'
|
|
92
|
+
subject.informacoes_da_conta[6..17].must_equal '000000089755'
|
|
93
|
+
|
|
94
|
+
subject.conta.conta_corrente = '1234567890'
|
|
95
|
+
subject.informacoes_da_conta[6..17].must_equal '001234567890'
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
it "4 - Quarta parte = Conta Corrente DV" do
|
|
99
|
+
subject.conta.conta_corrente_dv = '8'
|
|
100
|
+
subject.informacoes_da_conta[18..18].must_equal('8')
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
it "5 - Quinta parte = Se o conta_corrente_dv não for 2 digitos deve ter 1 espaço em branco" do
|
|
104
|
+
subject.informacoes_da_conta[19].must_equal(' ')
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
describe "#complemento_header_arquivo" do
|
|
109
|
+
it "deve ter 29 posições" do
|
|
110
|
+
subject.complemento_header_arquivo.size.must_equal 29
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
it "2 - Segunda parte = USO FEBRABAN com 25 posições em branco" do
|
|
114
|
+
subject.complemento_header_arquivo[4..28].must_equal ' ' * 25
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
describe "#complemento_p" do
|
|
119
|
+
|
|
120
|
+
it "deve ter 34 posições" do
|
|
121
|
+
subject.complemento_p(pagamento).size.must_equal 34
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
it "1 - Primeira parte = conta_corrente com 12 posicoes - ajustados com zeros a esquerda" do
|
|
125
|
+
subject.conta.conta_corrente = '1234'
|
|
126
|
+
subject.complemento_p(pagamento)[0..11].must_equal '000000001234'
|
|
127
|
+
|
|
128
|
+
subject.conta.conta_corrente = '264631'
|
|
129
|
+
subject.complemento_p(pagamento)[0..11].must_equal '000000264631'
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
it "2 - Seguna parte = Conta Corrente DV - 1 posicao" do
|
|
133
|
+
subject.conta.conta_corrente_dv = '7'
|
|
134
|
+
subject.complemento_p(pagamento)[12..12].must_equal '7'
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
it "3 - Terceira parte = Se o conta_corrente_dv não for 2 digitos deve ter 1 espaço em branco" do
|
|
138
|
+
subject.complemento_p(pagamento)[13..13].must_equal ' '
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
it "4 - Quarta parte = carteira com 3 posicoes ajustados com zeros a esquerda" do
|
|
142
|
+
subject.conta.conta_corrente_dv = '21'
|
|
143
|
+
subject.complemento_p(pagamento)[14..16].must_equal '021'
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
it "5 - Quinta parte = Exclusivo Banco com 5 posicoes preenchidas com zeros" do
|
|
147
|
+
subject.complemento_p(pagamento)[17..21].must_equal '00000'
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
it "6 - Sexta parte = Numero documento com 11 posicoes" do
|
|
151
|
+
pagamento.numero_documento = '89378'
|
|
152
|
+
subject.complemento_p(pagamento)[22..32].must_equal '00000089378'
|
|
153
|
+
|
|
154
|
+
pagamento.numero_documento = '12345678901'
|
|
155
|
+
subject.complemento_p(pagamento)[22..32].must_equal '12345678901'
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
it "7 - Setima parte = numero_documento DV com 1 posicao - Deve ser o ultimo digito do nosso numero" do
|
|
159
|
+
pagamento.nosso_numero = '99/99999999999-9'
|
|
160
|
+
subject.complemento_p(pagamento)[33..33].must_equal '9'
|
|
161
|
+
|
|
162
|
+
pagamento.nosso_numero = '99/99999999999-0'
|
|
163
|
+
subject.complemento_p(pagamento)[33..33].must_equal '0'
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
describe "#segmento_p_numero_do_documento" do
|
|
169
|
+
it "deve ter 15 posições" do
|
|
170
|
+
subject.segmento_p_numero_do_documento(pagamento).size.must_equal 15
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
it "deve conter o numero do documento 15 posicoes - ajustados com zeros a esquerda" do
|
|
174
|
+
pagamento.expects(:numero_documento).returns("977897")
|
|
175
|
+
subject.segmento_p_numero_do_documento(pagamento).must_equal '000000000977897'
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
describe "#complemento_trailer_lote" do
|
|
180
|
+
it "deve ter 217 posições" do
|
|
181
|
+
subject.complemento_trailer_lote(lote, 5).size.must_equal 217
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
it "1 - Primeira parte = 92 posições todas preenchidas com zeros (VALORES UTILIZADOS APENAS PARA ARQUIVO DE RETORNO)" do
|
|
185
|
+
subject.complemento_trailer_lote(lote, 5)[0..91].must_equal '0' * 92
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
it "2 - Segunda parte = 8 posições todas preenchidas com zeros (Nr. do aviso de lançamento do crédito referente aos títulos de cobrança)" do
|
|
189
|
+
subject.complemento_trailer_lote(lote, 5)[92..99].must_equal ('0' * 8)
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
it "3 - Terceira parte = EXCLUSIVO FEBRABAN com 117 posicoes em branco" do
|
|
193
|
+
subject.complemento_trailer_lote(lote, 5)[100..216].must_equal (' ' * 117)
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
end
|
|
@@ -233,4 +233,55 @@ describe BrBoleto::Remessa::Cnab240::Caixa do
|
|
|
233
233
|
subject.complemento_trailer_lote(lote, 5)[69..216].must_equal (' ' * 148)
|
|
234
234
|
end
|
|
235
235
|
end
|
|
236
|
+
|
|
237
|
+
describe 'Geração do arquivo' do
|
|
238
|
+
let(:conta) do
|
|
239
|
+
{
|
|
240
|
+
razao_social: 'EMPRESA EMITENTE',
|
|
241
|
+
cpf_cnpj: '33.486.451/0001-30',
|
|
242
|
+
carteira: '14',
|
|
243
|
+
agencia: '7506',
|
|
244
|
+
codigo_cedente: '828196',
|
|
245
|
+
conta_corrente: '1354843'
|
|
246
|
+
}
|
|
247
|
+
end
|
|
248
|
+
let(:pagador) {
|
|
249
|
+
{
|
|
250
|
+
nome: 'Benjamin Francisco Marcos Vinicius Fernandes',
|
|
251
|
+
cpf_cnpj: '787.933.211-12',
|
|
252
|
+
endereco: 'Rua Principal s/n 881',
|
|
253
|
+
bairro: 'Centro',
|
|
254
|
+
cep: '79210-972',
|
|
255
|
+
cidade: 'Anastácio',
|
|
256
|
+
uf: 'MS',
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
let(:pagamento) {
|
|
260
|
+
BrBoleto::Remessa::Pagamento.new({
|
|
261
|
+
nosso_numero: '140000000000000029',
|
|
262
|
+
numero_documento: '00000000002',
|
|
263
|
+
data_vencimento: Date.parse('14/11/2016'),
|
|
264
|
+
valor_documento: 10.00,
|
|
265
|
+
pagador: pagador,
|
|
266
|
+
especie_titulo: '02',
|
|
267
|
+
codigo_juros: '0',
|
|
268
|
+
data_juros: Date.parse('16/11/2016'),
|
|
269
|
+
valor_juros: 0.00,
|
|
270
|
+
codigo_multa: '0',
|
|
271
|
+
data_multa: Date.parse('15/11/2016'),
|
|
272
|
+
valor_multa: 0.00,
|
|
273
|
+
data_emissao: Date.parse('14/11/2016'),
|
|
274
|
+
})
|
|
275
|
+
}
|
|
276
|
+
let(:lote) { BrBoleto::Remessa::Lote.new(pagamentos: pagamento) }
|
|
277
|
+
it "deve gerar o arquivo de remessa corretamente com as informações passadas" do
|
|
278
|
+
remessa = BrBoleto::Remessa::Cnab240::Caixa.new({
|
|
279
|
+
data_hora_arquivo: Time.parse('14/11/2016 09:31:47'),
|
|
280
|
+
sequencial_remessa: 1,
|
|
281
|
+
conta: conta,
|
|
282
|
+
lotes: [lote],
|
|
283
|
+
})
|
|
284
|
+
remessa.dados_do_arquivo.must_equal read_fixture('remessa/cnab240/caixa.rem')
|
|
285
|
+
end
|
|
286
|
+
end
|
|
236
287
|
end
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
describe BrBoleto::Remessa::Cnab240::Cecred do
|
|
4
|
+
subject { FactoryGirl.build(:remessa_cnab240_cecred, 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: 1})
|
|
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: 6})
|
|
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::Cecred.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 "as 7 primeiras posições deve ser o valor do convenio ajustado com zeros a esquerda" do
|
|
55
|
+
subject.conta.codigo_cedente = '88'
|
|
56
|
+
subject.convenio_lote(lote).must_equal '000088 '
|
|
57
|
+
|
|
58
|
+
subject.conta.convenio = '7374'
|
|
59
|
+
subject.convenio_lote(lote).must_equal '007374 '
|
|
60
|
+
end
|
|
61
|
+
it "deve ter 20 caracteres" do
|
|
62
|
+
subject.convenio_lote(lote).size.must_equal 20
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
describe "#informacoes_da_conta" do
|
|
67
|
+
it "deve ter 20 posições" do
|
|
68
|
+
subject.informacoes_da_conta.size.must_equal 20
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it "1 - Primeira parte = agencia 5 posicoes - ajustados com zeros a esquerda" do
|
|
72
|
+
subject.conta.agencia = '47'
|
|
73
|
+
subject.informacoes_da_conta[0..4].must_equal '00047'
|
|
74
|
+
|
|
75
|
+
subject.conta.agencia = '1234'
|
|
76
|
+
subject.informacoes_da_conta[0..4].must_equal '01234'
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it "2 - Segunda parte = agencia_dv" do
|
|
80
|
+
subject.conta.agencia_dv = '7'
|
|
81
|
+
subject.informacoes_da_conta[5].must_equal "7"
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it "3 - Terceira parte = conta_corrente 12 posicoes - ajustados com zeros a esquerda" do
|
|
85
|
+
subject.conta.conta_corrente = '89755'
|
|
86
|
+
subject.informacoes_da_conta[6..17].must_equal '000000089755'
|
|
87
|
+
|
|
88
|
+
subject.conta.conta_corrente = '1234567890'
|
|
89
|
+
subject.informacoes_da_conta[6..17].must_equal '001234567890'
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it "4 - Quarta parte = Conta Corrente DV" do
|
|
93
|
+
subject.conta.conta_corrente_dv = '8'
|
|
94
|
+
subject.informacoes_da_conta[18..18].must_equal('8')
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it "5 - Quinta parte = Se o conta_corrente_dv não for 2 digitos deve ter 1 espaço em branco" do
|
|
98
|
+
subject.informacoes_da_conta[19].must_equal(' ')
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
describe "#complemento_header_arquivo" do
|
|
103
|
+
it "deve ter 29 posições" do
|
|
104
|
+
subject.complemento_header_arquivo.size.must_equal 29
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it "2 - Segunda parte = USO FEBRABAN com 25 posições em branco" do
|
|
108
|
+
subject.complemento_header_arquivo[4..28].must_equal ' ' * 25
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
describe "#complemento_p" do
|
|
113
|
+
|
|
114
|
+
it "deve ter 34 posições" do
|
|
115
|
+
subject.complemento_p(pagamento).size.must_equal 34
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
it "1 - Primeira parte = conta_corrente com 12 posicoes - ajustados com zeros a esquerda" do
|
|
119
|
+
subject.conta.conta_corrente = '1234'
|
|
120
|
+
subject.complemento_p(pagamento)[0..11].must_equal '000000001234'
|
|
121
|
+
|
|
122
|
+
subject.conta.conta_corrente = '264631'
|
|
123
|
+
subject.complemento_p(pagamento)[0..11].must_equal '000000264631'
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
it "2 - Seguna parte = Conta Corrente DV - 1 posicao" do
|
|
127
|
+
subject.conta.conta_corrente_dv = '7'
|
|
128
|
+
subject.complemento_p(pagamento)[12..12].must_equal '7'
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
it "3 - Terceira parte = Se o conta_corrente_dv não for 2 digitos deve ter 1 espaço em branco" do
|
|
132
|
+
subject.complemento_p(pagamento)[13..13].must_equal ' '
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
it "4 - Quarta parte = Identificação do Título na Cooperativa " do
|
|
136
|
+
pagamento.nosso_numero = '99999998000000001'
|
|
137
|
+
subject.complemento_p(pagamento)[14..33].must_equal '99999998000000001 '
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
describe "#segmento_p_numero_do_documento" do
|
|
143
|
+
it "deve ter 15 posições" do
|
|
144
|
+
subject.segmento_p_numero_do_documento(pagamento).size.must_equal 15
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
it "deve conter o numero do documento 15 posicoes - ajustados com zeros a esquerda" do
|
|
148
|
+
pagamento.expects(:numero_documento).returns("977897")
|
|
149
|
+
subject.segmento_p_numero_do_documento(pagamento).must_equal '000000000977897'
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
describe "#segmento_p_posicao_221_a_221(pagamento)" do
|
|
154
|
+
it "deve ter 1 posição" do
|
|
155
|
+
subject.segmento_p_posicao_221_a_221(pagamento).size.must_equal 1
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
it "deve conter o Código para Protesto" do
|
|
159
|
+
subject.segmento_p_posicao_221_a_221(pagamento).must_equal '3'
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
describe "#segmento_p_posicao_224_a_224" do
|
|
164
|
+
it "deve ter 1 posição" do
|
|
165
|
+
subject.segmento_p_posicao_224_a_224.size.must_equal 1
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
it "deve conter o Código para Baixa/Devolução" do
|
|
169
|
+
subject.segmento_p_posicao_224_a_224.must_equal '2'
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
describe "#complemento_trailer_lote" do
|
|
175
|
+
it "deve ter 217 posições" do
|
|
176
|
+
subject.complemento_trailer_lote(lote, 5).size.must_equal 217
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
it "1 - Primeira parte = 92 posições todas preenchidas com zeros (VALORES UTILIZADOS APENAS PARA ARQUIVO DE RETORNO)" do
|
|
180
|
+
subject.complemento_trailer_lote(lote, 5)[0..91].must_equal '0' * 92
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
it "2 - Segunda parte = 8 posições todas preenchidas com zeros (Nr. do aviso de lançamento do crédito referente aos títulos de cobrança)" do
|
|
184
|
+
subject.complemento_trailer_lote(lote, 5)[92..99].must_equal ('0' * 8)
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
it "3 - Terceira parte = EXCLUSIVO FEBRABAN com 117 posicoes em branco" do
|
|
188
|
+
subject.complemento_trailer_lote(lote, 5)[100..216].must_equal (' ' * 117)
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
describe 'Geração do arquivo' do
|
|
193
|
+
let(:conta) do
|
|
194
|
+
{
|
|
195
|
+
razao_social: 'EMPRESA EMITENTE',
|
|
196
|
+
cpf_cnpj: '33.486.451/0001-30',
|
|
197
|
+
carteira: '1',
|
|
198
|
+
agencia: '7506',
|
|
199
|
+
codigo_cedente: '828196',
|
|
200
|
+
conta_corrente: '1354843'
|
|
201
|
+
}
|
|
202
|
+
end
|
|
203
|
+
let(:pagador) {
|
|
204
|
+
{
|
|
205
|
+
nome: 'Benjamin Francisco Marcos Vinicius Fernandes',
|
|
206
|
+
cpf_cnpj: '787.933.211-12',
|
|
207
|
+
endereco: 'Rua Principal s/n 881',
|
|
208
|
+
bairro: 'Centro',
|
|
209
|
+
cep: '79210-972',
|
|
210
|
+
cidade: 'Anastácio',
|
|
211
|
+
uf: 'MS',
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
let(:pagamento) {
|
|
215
|
+
BrBoleto::Remessa::Pagamento.new({
|
|
216
|
+
nosso_numero: '09142444000000001',
|
|
217
|
+
numero_documento: '000000001',
|
|
218
|
+
data_vencimento: Date.parse('15/12/2016'),
|
|
219
|
+
valor_documento: 10.00,
|
|
220
|
+
pagador: pagador,
|
|
221
|
+
especie_titulo: '02',
|
|
222
|
+
codigo_juros: '0',
|
|
223
|
+
data_juros: Date.parse('17/12/2016'),
|
|
224
|
+
valor_juros: 0.00,
|
|
225
|
+
codigo_multa: '0',
|
|
226
|
+
data_multa: Date.parse('16/12/2016'),
|
|
227
|
+
valor_multa: 0.00,
|
|
228
|
+
data_emissao: Date.parse('08/11/2016'),
|
|
229
|
+
})
|
|
230
|
+
}
|
|
231
|
+
let(:lote) { BrBoleto::Remessa::Lote.new(pagamentos: pagamento) }
|
|
232
|
+
it "deve gerar o arquivo de remessa corretamente com as informações passadas" do
|
|
233
|
+
remessa = BrBoleto::Remessa::Cnab240::Cecred.new({
|
|
234
|
+
data_hora_arquivo: Time.parse('08/11/2016 09:31:47'),
|
|
235
|
+
sequencial_remessa: 1,
|
|
236
|
+
conta: conta,
|
|
237
|
+
lotes: [lote],
|
|
238
|
+
})
|
|
239
|
+
remessa.dados_do_arquivo.must_equal read_fixture('remessa/cnab240/cecred.rem')
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
end
|