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,201 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
describe BrBoleto::Remessa::Cnab240::Itau do
|
|
4
|
+
subject { FactoryGirl.build(:remessa_cnab240_itau, 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: 5})
|
|
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::Itau.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 ser preenchido com brancos " do
|
|
55
|
+
subject.convenio_lote(lote).must_equal ' ' * 20
|
|
56
|
+
end
|
|
57
|
+
it "deve ter 20 caracteres" do
|
|
58
|
+
subject.convenio_lote(lote).size.must_equal 20
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
describe "#informacoes_da_conta" do
|
|
63
|
+
it "deve ter 20 posições" do
|
|
64
|
+
subject.informacoes_da_conta.size.must_equal 20
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "1 - Primeira parte = agencia 5 posicoes - ajustados com zeros a esquerda" do
|
|
68
|
+
subject.conta.agencia = '47'
|
|
69
|
+
subject.informacoes_da_conta[0..4].must_equal '00047'
|
|
70
|
+
|
|
71
|
+
subject.conta.agencia = '1234'
|
|
72
|
+
subject.informacoes_da_conta[0..4].must_equal '01234'
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it "2 - Segunda parte = deve ser preenchido com branco" do
|
|
76
|
+
subject.informacoes_da_conta[5].must_equal " "
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it "3 - Terceira parte = deve ser preenchido com zeros" do
|
|
80
|
+
subject.informacoes_da_conta[6..12].must_equal '0000000'
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it "4 - Quarta parte = conta_corrente 5 posicoes - ajustados com zeros a esquerda" do
|
|
84
|
+
subject.conta.conta_corrente = '89755'
|
|
85
|
+
subject.informacoes_da_conta[13..17].must_equal '89755'
|
|
86
|
+
|
|
87
|
+
subject.conta.conta_corrente = '1234'
|
|
88
|
+
subject.informacoes_da_conta[13..17].must_equal '01234'
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it "5 - Quinta parte = Se o conta_corrente_dv não for 2 digitos deve ter 1 espaço em branco" do
|
|
92
|
+
subject.informacoes_da_conta[18].must_equal(' ')
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
it "6 - Sexta parte = Conta Corrente DV" do
|
|
96
|
+
subject.conta.conta_corrente_dv = '8'
|
|
97
|
+
subject.informacoes_da_conta[19..19].must_equal('8')
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
describe "#complemento_header_arquivo" do
|
|
102
|
+
it "deve ter 15 posições" do
|
|
103
|
+
subject.complemento_header_arquivo.size.must_equal 15
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
it "1 - Primeira parte = deve ser preenchido com zeros" do
|
|
107
|
+
subject.complemento_header_arquivo[0..2].must_equal '000'
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
it "2 - Segunda parte = USO FEBRABAN com 12 posições em branco" do
|
|
111
|
+
subject.complemento_header_arquivo[3..14].must_equal ' ' * 12
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
describe "#complemento_p" do
|
|
116
|
+
|
|
117
|
+
it "deve ter 34 posições" do
|
|
118
|
+
subject.complemento_p(pagamento).size.must_equal 34
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
it "1 - Primeira parte = deve ser preenchido com zeros" do
|
|
122
|
+
subject.complemento_p(pagamento)[0..6].must_equal '0000000'
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
it "2 - Segunda parte = conta_corrente com 5 posicoes - ajustados com zeros a esquerda" do
|
|
126
|
+
subject.conta.conta_corrente = '1234'
|
|
127
|
+
subject.complemento_p(pagamento)[7..11].must_equal '01234'
|
|
128
|
+
|
|
129
|
+
subject.conta.conta_corrente = '26461'
|
|
130
|
+
subject.complemento_p(pagamento)[7..11].must_equal '26461'
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
it "3 - Terceira parte = deve ser preenchido com 1 espaço em branco" do
|
|
134
|
+
subject.complemento_p(pagamento)[12..12].must_equal ' '
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
it "4 - Quarta parte = Conta Corrente DV - 1 posicao" do
|
|
138
|
+
subject.conta.conta_corrente_dv = '7'
|
|
139
|
+
subject.complemento_p(pagamento)[13..13].must_equal '7'
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
it "5 - Quinta parte = carteira com 3 posicoes ajustados com zeros a esquerda" do
|
|
143
|
+
subject.conta.carteira = '21'
|
|
144
|
+
subject.complemento_p(pagamento)[14..16].must_equal '021'
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
it "6 - Sexta parte = Numero documento com 8 posicoes" do
|
|
148
|
+
pagamento.numero_documento = '89378'
|
|
149
|
+
subject.complemento_p(pagamento)[17..24].must_equal '00089378'
|
|
150
|
+
|
|
151
|
+
pagamento.numero_documento = '12345678'
|
|
152
|
+
subject.complemento_p(pagamento)[17..24].must_equal '12345678'
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
it "7 - Setima parte = numero_documento DV com 1 posicao - Deve ser o ultimo digito do nosso numero" do
|
|
156
|
+
pagamento.nosso_numero = '999/99999999-9'
|
|
157
|
+
subject.complemento_p(pagamento)[25..25].must_equal '9'
|
|
158
|
+
|
|
159
|
+
pagamento.nosso_numero = '999/99999999-0'
|
|
160
|
+
subject.complemento_p(pagamento)[25..25].must_equal '0'
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
it "8 - Oitava parte = deve ser preenchido com brancos" do
|
|
164
|
+
subject.complemento_p(pagamento)[26..33].must_equal ' ' * 8
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
describe "#segmento_p_numero_do_documento" do
|
|
170
|
+
it "deve ter 15 posições" do
|
|
171
|
+
subject.segmento_p_numero_do_documento(pagamento).size.must_equal 15
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
it "1 - Primeira parte = deve conter o numero do documento 10 posicoes - ajustados com zeros a esquerda" do
|
|
175
|
+
pagamento.expects(:numero_documento).returns("977897")
|
|
176
|
+
subject.segmento_p_numero_do_documento(pagamento)[0..9].must_equal '0000977897'
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
it "2 - Segunda parte = deve ser preenchido com brancos" do
|
|
180
|
+
subject.segmento_p_numero_do_documento(pagamento)[10..14].must_equal ' ' * 5
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
describe "#complemento_trailer_lote" do
|
|
185
|
+
it "deve ter 217 posições" do
|
|
186
|
+
subject.complemento_trailer_lote(lote, 5).size.must_equal 217
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
it "1 - Primeira parte = 92 posições todas preenchidas com zeros (VALORES UTILIZADOS APENAS PARA ARQUIVO DE RETORNO)" do
|
|
190
|
+
subject.complemento_trailer_lote(lote, 5)[0..91].must_equal '0' * 92
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
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
|
|
194
|
+
subject.complemento_trailer_lote(lote, 5)[92..99].must_equal ('0' * 8)
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
it "3 - Terceira parte = EXCLUSIVO FEBRABAN com 117 posicoes em branco" do
|
|
198
|
+
subject.complemento_trailer_lote(lote, 5)[100..216].must_equal (' ' * 117)
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
end
|
|
@@ -233,7 +233,7 @@ describe BrBoleto::Remessa::Cnab240::Sicoob do
|
|
|
233
233
|
|
|
234
234
|
describe "#dados_do_arquivo" do
|
|
235
235
|
it "deve gerar os dados do arquivo" do
|
|
236
|
-
subject.dados_do_arquivo.size.must_equal
|
|
236
|
+
subject.dados_do_arquivo.size.must_equal 1936
|
|
237
237
|
end
|
|
238
238
|
end
|
|
239
239
|
|
|
@@ -293,36 +293,6 @@ describe BrBoleto::Remessa::Cnab240::Sicoob do
|
|
|
293
293
|
end
|
|
294
294
|
end
|
|
295
295
|
|
|
296
|
-
describe "particularidades do Segmento R" do
|
|
297
|
-
describe "#segmento_r_posicao_066_a_066 - Codigo da multa " do
|
|
298
|
-
# Para o Sicoob o código reference a Isento é '0', diferente do padrão
|
|
299
|
-
# estabelecido pela FEBRABAN onde o código de isento é '3'
|
|
300
|
-
|
|
301
|
-
it "Se não tiver valor em codigo_multa deve considerar '0'" do
|
|
302
|
-
pagamento.codigo_multa = nil
|
|
303
|
-
subject.send(:segmento_r_posicao_066_a_066, pagamento).must_equal '0'
|
|
304
|
-
end
|
|
305
|
-
it "Se o valor de codigo_multa tiver mais caracteres que 1 deve ajustar para 1 caractere" do
|
|
306
|
-
pagamento.codigo_multa = '123'
|
|
307
|
-
subject.send(:segmento_r_posicao_066_a_066, pagamento).must_equal '1'
|
|
308
|
-
end
|
|
309
|
-
it "se o código da multa do pagamento for '1' então deve permanecer '1'" do
|
|
310
|
-
pagamento.codigo_multa = '1'
|
|
311
|
-
subject.send(:segmento_r_posicao_066_a_066, pagamento).must_equal '1'
|
|
312
|
-
end
|
|
313
|
-
it "se o código da multa do pagamento for '2' então deve permanecer '2'" do
|
|
314
|
-
pagamento.codigo_multa = '2'
|
|
315
|
-
subject.send(:segmento_r_posicao_066_a_066, pagamento).must_equal '2'
|
|
316
|
-
end
|
|
317
|
-
it "se o código da multa do pagamento for diferente de 1 ou 2 então considera '0'" do
|
|
318
|
-
pagamento.codigo_multa = '3'
|
|
319
|
-
subject.send(:segmento_r_posicao_066_a_066, pagamento).must_equal '0'
|
|
320
|
-
pagamento.codigo_multa = '4'
|
|
321
|
-
subject.send(:segmento_r_posicao_066_a_066, pagamento).must_equal '0'
|
|
322
|
-
end
|
|
323
|
-
end
|
|
324
|
-
end
|
|
325
|
-
|
|
326
296
|
describe "particularidades do Segmento P" do
|
|
327
297
|
describe "#complemento_p" do
|
|
328
298
|
it "posicao 0 até 11 deve ter a conta_corrente" do
|
|
@@ -342,33 +312,6 @@ describe BrBoleto::Remessa::Cnab240::Sicoob do
|
|
|
342
312
|
subject.complemento_p(pagamento)[14..33].must_equal '12345678901234567890'
|
|
343
313
|
end
|
|
344
314
|
end
|
|
345
|
-
describe "#segmento_p_posicao_118_a_118 - Codigo de Juros " do
|
|
346
|
-
# Para o Sicoob o código reference a Isento é '0', diferente do padrão
|
|
347
|
-
# estabelecido pela FEBRABAN onde o código de isento é '3'
|
|
348
|
-
|
|
349
|
-
it "Se não tiver valor em codigo_juros deve considerar '0'" do
|
|
350
|
-
pagamento.codigo_juros = nil
|
|
351
|
-
subject.send(:segmento_p_posicao_118_a_118, pagamento).must_equal '0'
|
|
352
|
-
end
|
|
353
|
-
it "Se o valor de codigo_juros tiver mais caracteres que 1 deve ajustar para 1 caractere" do
|
|
354
|
-
pagamento.codigo_juros = '123'
|
|
355
|
-
subject.send(:segmento_p_posicao_118_a_118, pagamento).must_equal '1'
|
|
356
|
-
end
|
|
357
|
-
it "se o código da multa do pagamento for '1' então deve permanecer '1'" do
|
|
358
|
-
pagamento.codigo_juros = '1'
|
|
359
|
-
subject.send(:segmento_p_posicao_118_a_118, pagamento).must_equal '1'
|
|
360
|
-
end
|
|
361
|
-
it "se o código da multa do pagamento for '2' então deve permanecer '2'" do
|
|
362
|
-
pagamento.codigo_juros = '2'
|
|
363
|
-
subject.send(:segmento_p_posicao_118_a_118, pagamento).must_equal '2'
|
|
364
|
-
end
|
|
365
|
-
it "se o código da multa do pagamento for diferente de 1 ou 2 então considera '0'" do
|
|
366
|
-
pagamento.codigo_juros = '3'
|
|
367
|
-
subject.send(:segmento_p_posicao_118_a_118, pagamento).must_equal '0'
|
|
368
|
-
pagamento.codigo_juros = '4'
|
|
369
|
-
subject.send(:segmento_p_posicao_118_a_118, pagamento).must_equal '0'
|
|
370
|
-
end
|
|
371
|
-
end
|
|
372
315
|
it "#segmento_p_posicao_060_a_060 deve ter 1 digito em branco" do
|
|
373
316
|
subject.segmento_p_posicao_060_a_060.must_equal ' '
|
|
374
317
|
end
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
describe BrBoleto::Remessa::Cnab240::Sicredi do
|
|
4
|
+
subject { FactoryGirl.build(:remessa_cnab240_sicredi, 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: 5})
|
|
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::Sicredi.human_attribute_name(attr_validation)} #{get_message(msg_key, options_msg)}")
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
context "HEADER ARQUIVO" do
|
|
53
|
+
describe "#codigo_convenio" do
|
|
54
|
+
it "deve ter 20 posições" do
|
|
55
|
+
subject.codigo_convenio.size.must_equal 20
|
|
56
|
+
end
|
|
57
|
+
it {subject.codigo_convenio.must_equal ' ' * 20 }
|
|
58
|
+
end
|
|
59
|
+
describe "#informacoes_da_conta" do
|
|
60
|
+
it "deve ter 20 posições" do
|
|
61
|
+
subject.informacoes_da_conta.size.must_equal 20
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it "1 - Primeira parte = agencia 5 posicoes - ajustados com zeros a esquerda" do
|
|
65
|
+
subject.conta.agencia = '47'
|
|
66
|
+
subject.informacoes_da_conta[0..4].must_equal '00047'
|
|
67
|
+
|
|
68
|
+
subject.conta.agencia = '1234'
|
|
69
|
+
subject.informacoes_da_conta[0..4].must_equal '01234'
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it "2 - Segunda parte = Espaço em Branco" do
|
|
73
|
+
subject.informacoes_da_conta[5].must_equal " "
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it "3 - Terceira parte = conta_corrente 12 posicoes - ajustados com zeros a esquerda" do
|
|
77
|
+
subject.conta.conta_corrente = '89755'
|
|
78
|
+
subject.informacoes_da_conta[6..17].must_equal '000000089755'
|
|
79
|
+
|
|
80
|
+
subject.conta.conta_corrente = '1234567890'
|
|
81
|
+
subject.informacoes_da_conta[6..17].must_equal '001234567890'
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it "4 - Quarta parte = Conta Corrente DV" do
|
|
85
|
+
subject.conta.conta_corrente_dv = '8'
|
|
86
|
+
subject.informacoes_da_conta[18..18].must_equal('8')
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it "5 - Quinta parte = Espaço em Branco" do
|
|
90
|
+
subject.informacoes_da_conta[19].must_equal(' ')
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
describe "#header_arquivo_posicao_167_a_171" do
|
|
95
|
+
it {subject.header_arquivo_posicao_167_a_171.must_equal '01600'}
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
describe "#header_arquivo_posicao_172_a_191" do
|
|
99
|
+
it {subject.header_arquivo_posicao_172_a_191.must_equal ' ' * 20 }
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
describe "#header_arquivo_posicao_192_a_211" do
|
|
103
|
+
it {subject.header_arquivo_posicao_192_a_211.must_equal ' ' * 20 }
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
describe "#complemento_header_arquivo" do
|
|
107
|
+
it "deve ter 29 posições" do
|
|
108
|
+
subject.complemento_header_arquivo.size.must_equal 29
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it "2 - Segunda parte = USO FEBRABAN com 25 posições em branco" do
|
|
112
|
+
subject.complemento_header_arquivo[4..28].must_equal ' ' * 25
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
context "HEADER LOTE" do
|
|
118
|
+
describe "#header_lote_posicao_012_a_013" do
|
|
119
|
+
it {subject.header_lote_posicao_012_a_013.must_equal ' ' * 2 }
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
describe "#convenio_lote" do
|
|
123
|
+
it "deve ser preenchido com espaço em branco" do
|
|
124
|
+
subject.convenio_lote(lote).must_equal ' ' * 20
|
|
125
|
+
end
|
|
126
|
+
it "deve ter 20 caracteres" do
|
|
127
|
+
subject.convenio_lote(lote).size.must_equal 20
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
context "SEGMENTO P" do
|
|
133
|
+
describe "#complemento_p" do
|
|
134
|
+
it "deve ter 34 posições" do
|
|
135
|
+
subject.complemento_p(pagamento).size.must_equal 34
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
it "1 - Primeira parte = conta_corrente com 12 posicoes - ajustados com zeros a esquerda" do
|
|
139
|
+
subject.conta.conta_corrente = '1234'
|
|
140
|
+
subject.complemento_p(pagamento)[0..11].must_equal '000000001234'
|
|
141
|
+
|
|
142
|
+
subject.conta.conta_corrente = '264631'
|
|
143
|
+
subject.complemento_p(pagamento)[0..11].must_equal '000000264631'
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
it "2 - Seguna parte = Conta Corrente DV - 1 posicao" do
|
|
147
|
+
subject.conta.conta_corrente_dv = '7'
|
|
148
|
+
subject.complemento_p(pagamento)[12..12].must_equal '7'
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
it "3 - Terceira parte = Espaço em branco" do
|
|
152
|
+
subject.complemento_p(pagamento)[13..13].must_equal ' '
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
it "4 - Quarta parte = Nosso Numero" do
|
|
156
|
+
pagamento.expects(:nosso_numero).returns("132xxxxxD")
|
|
157
|
+
subject.complemento_p(pagamento)[14..33].must_equal '132xxxxxD '
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
describe "#segmento_p_numero_do_documento" do
|
|
162
|
+
it "deve ter 15 posições" do
|
|
163
|
+
subject.segmento_p_numero_do_documento(pagamento).size.must_equal 15
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
it "deve conter o numero do documento 15 posicoes - ajustados com zeros a esquerda" do
|
|
167
|
+
pagamento.expects(:numero_documento).returns("977897")
|
|
168
|
+
subject.segmento_p_numero_do_documento(pagamento).must_equal '0000977897 '
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
describe "#segmento_p_posicao_224_a_224" do
|
|
173
|
+
it {subject.segmento_p_posicao_224_a_224.must_equal '1'}
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
describe "#segmento_p_posicao_225_a_227" do
|
|
177
|
+
it {subject.segmento_p_posicao_225_a_227.must_equal '060'}
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
context "SEGMENTO R" do
|
|
182
|
+
describe "#segmento_r_posicao_066_a_066(pagamento)" do
|
|
183
|
+
it {subject.segmento_r_posicao_066_a_066(pagamento).must_equal '2'}
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
context "TRAILER LOTE" do
|
|
188
|
+
describe "#complemento_trailer_lote" do
|
|
189
|
+
it "deve ter 217 posições" do
|
|
190
|
+
subject.complemento_trailer_lote(lote, 5).size.must_equal 217
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
it "1 - Primeira parte = 92 posições todas preenchidas com zeros (VALORES UTILIZADOS APENAS PARA ARQUIVO DE RETORNO)" do
|
|
194
|
+
subject.complemento_trailer_lote(lote, 5)[0..91].must_equal '0' * 92
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
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
|
|
198
|
+
subject.complemento_trailer_lote(lote, 5)[92..99].must_equal (' ' * 8)
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
it "3 - Terceira parte = EXCLUSIVO FEBRABAN com 117 posicoes em branco" do
|
|
202
|
+
subject.complemento_trailer_lote(lote, 5)[100..216].must_equal (' ' * 117)
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
end
|