br_boleto 1.2.2 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Gemfile.lock +1 -1
- data/README.markdown +278 -98
- data/br_boleto.gemspec +5 -3
- data/lib/br_boleto/active_model_base.rb +1 -1
- data/lib/br_boleto/association/have_conta.rb +109 -0
- data/lib/br_boleto/association/have_pagador.rb +38 -0
- data/lib/br_boleto/association/have_pagamentos.rb +44 -0
- data/lib/br_boleto/boleto/base.rb +50 -379
- data/lib/br_boleto/boleto/caixa.rb +28 -143
- data/lib/br_boleto/boleto/sicoob.rb +24 -144
- data/lib/br_boleto/conta/base.rb +288 -0
- data/lib/br_boleto/conta/caixa.rb +109 -0
- data/lib/br_boleto/conta/sicoob.rb +64 -0
- data/lib/br_boleto/helper/default_codes.rb +33 -0
- data/lib/br_boleto/helper/format_value.rb +1 -0
- data/lib/br_boleto/helper/number.rb +30 -0
- data/lib/br_boleto/pagador.rb +82 -0
- data/lib/br_boleto/remessa/base.rb +28 -50
- data/lib/br_boleto/remessa/cnab240/base.rb +22 -131
- data/lib/br_boleto/remessa/cnab240/caixa.rb +16 -62
- data/lib/br_boleto/remessa/cnab240/helper/header_arquivo.rb +7 -7
- data/lib/br_boleto/remessa/cnab240/helper/header_lote.rb +6 -6
- data/lib/br_boleto/remessa/cnab240/helper/segmento_p.rb +22 -22
- data/lib/br_boleto/remessa/cnab240/helper/segmento_q.rb +16 -16
- data/lib/br_boleto/remessa/cnab240/helper/segmento_r.rb +3 -3
- data/lib/br_boleto/remessa/cnab240/helper/segmento_s.rb +3 -3
- data/lib/br_boleto/remessa/cnab240/helper/trailer_arquivo.rb +3 -3
- data/lib/br_boleto/remessa/cnab240/helper/trailer_lote.rb +3 -3
- data/lib/br_boleto/remessa/cnab240/sicoob.rb +36 -73
- data/lib/br_boleto/remessa/cnab400/base.rb +95 -0
- data/lib/br_boleto/remessa/cnab400/helper/detalhe.rb +136 -0
- data/lib/br_boleto/remessa/cnab400/helper/header.rb +114 -0
- data/lib/br_boleto/remessa/cnab400/helper/trailer.rb +50 -0
- data/lib/br_boleto/remessa/cnab400/sicoob.rb +249 -0
- data/lib/br_boleto/remessa/lote.rb +1 -23
- data/lib/br_boleto/remessa/pagamento.rb +188 -51
- data/lib/br_boleto/retorno/base.rb +9 -0
- data/lib/br_boleto/retorno/cnab240/base.rb +2 -10
- data/lib/br_boleto/retorno/cnab400/base.rb +48 -0
- data/lib/br_boleto/retorno/cnab400/sicoob.rb +42 -0
- data/lib/br_boleto/retorno/pagamento.rb +12 -6
- data/lib/br_boleto/string_methods.rb +8 -2
- data/lib/br_boleto/validations.rb +19 -0
- data/lib/br_boleto/version.rb +3 -3
- data/lib/br_boleto.rb +38 -8
- data/lib/config/locales/br-boleto-en.yml +89 -0
- data/lib/config/locales/br-boleto-pt-BR.yml +89 -0
- data/test/br_boleto/association/have_conta_test.rb +319 -0
- data/test/br_boleto/association/have_pagador_test.rb +110 -0
- data/test/br_boleto/association/have_pagamentos_test.rb +113 -0
- data/test/br_boleto/boleto/base_test.rb +127 -201
- data/test/br_boleto/boleto/caixa_test.rb +58 -72
- data/test/br_boleto/boleto/sicoob_test.rb +88 -147
- data/test/br_boleto/conta/base_test.rb +490 -0
- data/test/br_boleto/conta/caixa_test.rb +154 -0
- data/test/br_boleto/conta/sicoob_test.rb +144 -0
- data/test/br_boleto/helper/number_test.rb +29 -0
- data/test/br_boleto/pagador_test.rb +158 -0
- data/test/br_boleto/remessa/base_test.rb +37 -62
- data/test/br_boleto/remessa/cnab240/base_test.rb +75 -95
- data/test/br_boleto/remessa/cnab240/caixa_test.rb +61 -96
- data/test/br_boleto/remessa/cnab240/helper/header_arquivo_test.rb +11 -11
- data/test/br_boleto/remessa/cnab240/helper/header_lote_test.rb +8 -8
- data/test/br_boleto/remessa/cnab240/helper/segmento_p_test.rb +17 -15
- data/test/br_boleto/remessa/cnab240/helper/segmento_q_test.rb +13 -13
- data/test/br_boleto/remessa/cnab240/helper/segmento_r_test.rb +2 -2
- data/test/br_boleto/remessa/cnab240/helper/segmento_s_test.rb +3 -3
- data/test/br_boleto/remessa/cnab240/helper/trailer_arquivo_test.rb +1 -1
- data/test/br_boleto/remessa/cnab240/helper/trailer_lote_test.rb +1 -1
- data/test/br_boleto/remessa/cnab240/sicoob_test.rb +136 -131
- data/test/br_boleto/remessa/cnab400/base_test.rb +263 -0
- data/test/br_boleto/remessa/cnab400/sicoob_test.rb +179 -0
- data/test/br_boleto/remessa/lote_test.rb +2 -41
- data/test/br_boleto/remessa/pagamento_test.rb +186 -188
- data/test/br_boleto/retorno/base_test.rb +0 -1
- data/test/br_boleto/retorno/cnab240/base_test.rb +12 -11
- data/test/br_boleto/retorno/cnab240/caixa_test.rb +11 -11
- data/test/br_boleto/retorno/cnab240/sicoob_test.rb +11 -11
- data/test/br_boleto/retorno/cnab400/sicoob_test.rb +227 -0
- data/test/br_boleto/retorno/pagamento_test.rb +6 -6
- data/test/factories/boleto/base.rb +9 -7
- data/test/factories/boleto/boleto_caixa.rb +2 -9
- data/test/factories/boleto/boleto_sicoob.rb +10 -8
- data/test/factories/conta/base.rb +10 -0
- data/test/factories/conta/caixa.rb +15 -0
- data/test/factories/conta/sicoob.rb +16 -0
- data/test/factories/pagador.rb +15 -0
- data/test/factories/remessa/base.rb +0 -6
- data/test/factories/remessa/cnab240/base.rb +0 -10
- data/test/factories/remessa/cnab240/caixa.rb +1 -6
- data/test/factories/remessa/cnab240/sicoob.rb +1 -10
- data/test/factories/remessa/cnab400/base.rb +8 -0
- data/test/factories/remessa/cnab400/sicoob.rb +8 -0
- data/test/factories/remessa/pagamento.rb +8 -7
- data/test/fixtures/remessa/cnab240/sicoob.rem +8 -0
- data/test/{files → fixtures}/retorno/cnab240/caixa.ret +0 -0
- data/test/{files → fixtures}/retorno/cnab240/padrao240.ret +0 -0
- data/test/fixtures/retorno/cnab400/sicoob.ret +7 -0
- data/test/inheritance/boleto_test.rb +4 -1
- data/test/inheritance/sicoob_test.rb +23 -7
- data/test/test_helper.rb +70 -0
- metadata +63 -6
@@ -0,0 +1,179 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe BrBoleto::Remessa::Cnab400::Sicoob do
|
4
|
+
subject { FactoryGirl.build(:remessa_cnab400_sicoob, pagamentos: pagamento, conta: conta) }
|
5
|
+
let(:pagamento) { FactoryGirl.build(:remessa_pagamento, pagador: pagador) }
|
6
|
+
let(:conta) { FactoryGirl.build(:conta_sicoob) }
|
7
|
+
let(:pagador) { FactoryGirl.build(:pagador) }
|
8
|
+
|
9
|
+
it "deve ter a class para a conta do sicoob" do
|
10
|
+
BrBoleto::Remessa::Cnab400::Sicoob.new.conta_class.must_equal BrBoleto::Conta::Sicoob
|
11
|
+
end
|
12
|
+
|
13
|
+
it "deve herdar de Cnab400::Base" do
|
14
|
+
subject.class.superclass.must_equal BrBoleto::Remessa::Cnab400::Base
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#informacoes_da_conta' do
|
18
|
+
it "deve retornar com 20 caracteres" do
|
19
|
+
subject.informacoes_da_conta(:detalhe).size.must_equal 20
|
20
|
+
end
|
21
|
+
it "deve trazer as informações em suas posições quando o parametro for :detalhe" do
|
22
|
+
conta.agencia = 1234
|
23
|
+
conta.agencia_dv = 1
|
24
|
+
conta.codigo_cedente = 123456
|
25
|
+
conta.codigo_cedente_dv = 2
|
26
|
+
result = subject.informacoes_da_conta(:detalhe)
|
27
|
+
|
28
|
+
result[0..3].must_equal '1234' # Agencia
|
29
|
+
result[4].must_equal '1' # DV Agencia
|
30
|
+
result[5..12].must_equal '00123456'# DV Agencia
|
31
|
+
result[13].must_equal '2' # DV Agencia
|
32
|
+
result[14..19].must_equal '000000'
|
33
|
+
end
|
34
|
+
it "deve trazer as informações em suas posições quando o parametro for :header" do
|
35
|
+
conta.agencia = 3321
|
36
|
+
conta.agencia_dv = 3
|
37
|
+
conta.codigo_cedente = 1234567890123
|
38
|
+
conta.codigo_cedente_dv = 2
|
39
|
+
result = subject.informacoes_da_conta(:header)
|
40
|
+
|
41
|
+
result[0..3].must_equal '3321' # Agencia
|
42
|
+
result[4].must_equal '3' # DV Agencia
|
43
|
+
result[5..12].must_equal '12345678'# DV Agencia
|
44
|
+
result[13].must_equal '2' # DV Agencia
|
45
|
+
result[14..19].must_equal ' '
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe '#complemento_registro' do
|
50
|
+
it "deve retornar o sequencial da remessa com 7 posições e mais 287 brancos" do
|
51
|
+
subject.sequencial_remessa = 4758
|
52
|
+
subject.complemento_registro.size.must_equal 294
|
53
|
+
subject.complemento_registro.must_equal '0004758'.ljust(294, ' ')
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe '#dados_do_pagamento' do
|
58
|
+
it "deve ter o tamanho de 14 digitos" do
|
59
|
+
subject.dados_do_pagamento(pagamento).size.must_equal 14
|
60
|
+
end
|
61
|
+
it "deve retornar os nosso numero e a parcela" do
|
62
|
+
pagamento.assign_attributes(nosso_numero: 4578, parcela: 3)
|
63
|
+
result = subject.dados_do_pagamento(pagamento)
|
64
|
+
result[0..11].must_equal '000000004578'
|
65
|
+
result[12..13].must_equal '03'
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe '#detalhe_posicao_077_108' do
|
70
|
+
it "deve ter o tamanho de 32 digitos" do
|
71
|
+
subject.detalhe_posicao_077_108(pagamento, 4).size.must_equal 32
|
72
|
+
end
|
73
|
+
it "deve conter as informações nas posições corretas" do
|
74
|
+
pagamento.assign_attributes(tipo_emissao: 2)
|
75
|
+
subject.conta.modalidade = '0333333'
|
76
|
+
result = subject.detalhe_posicao_077_108(pagamento, 4)
|
77
|
+
result[0..1].must_equal '00' # 077 078 002 9(02) Grupo de V
|
78
|
+
result[2..4].must_equal ''.rjust(3, ' ') # 079 081 003 X(03) Complement
|
79
|
+
result[5].must_equal ' ' # 082 082 001 X(01) "Indicativ
|
80
|
+
result[6..8].must_equal ''.rjust(3, ' ') # 083 085 003 X(03) Prefixo do
|
81
|
+
result[9..11].must_equal '000' # 086 088 003 9(03) Variação d
|
82
|
+
result[12].must_equal '0' # 089 089 001 9(01) Conta Cauç
|
83
|
+
result[13..17].must_equal ''.rjust(5, '0') # 090 094 005 9(05) "Número do
|
84
|
+
result[18].must_equal '0' # 095 095 001 X(01) "DV do con
|
85
|
+
result[19..24].must_equal ''.rjust(6, '0') # 096 101 006 9(06) Numero do
|
86
|
+
result[25..28].must_equal ''.rjust(4, ' ') # 102 105 004 X(04) Complement
|
87
|
+
result[29].must_equal "2" # tipo_emissao
|
88
|
+
result[30..31].must_equal '03' #modalidade
|
89
|
+
result.size.must_equal 32
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
describe '#informacoes_do_pagamento' do
|
94
|
+
it "deve ter o tamanho de 40 digitos" do
|
95
|
+
subject.informacoes_do_pagamento(pagamento, 1).size.must_equal 40
|
96
|
+
end
|
97
|
+
it "deve conter as informações nas posições corretas" do
|
98
|
+
conta.agencia = 4587
|
99
|
+
conta.agencia_dv = 45 # Vai retornar apenas o 4
|
100
|
+
pagamento.data_vencimento = Date.parse('05/08/2029')
|
101
|
+
pagamento.valor_documento = 47.56
|
102
|
+
pagamento.especie_titulo = 12
|
103
|
+
pagamento.aceite = true
|
104
|
+
pagamento.data_emissao = Date.parse('15/09/2017')
|
105
|
+
result = subject.informacoes_do_pagamento(pagamento, 4)
|
106
|
+
result.size.must_equal 40
|
107
|
+
|
108
|
+
result[00..05].must_equal '050829' # "Data Vencimento: Formato DDMMAA Normal ""DDMMAA"" A vista = ""888888"" Contra Apresentação = ""999999"""
|
109
|
+
result[06..18].must_equal '0000000004756' # Valor do Titulo
|
110
|
+
result[19..21].must_equal '756' # Número Banco: "756"
|
111
|
+
result[22..25].must_equal "4587" # Prefixo da Cooperativa: vide e-mail enviado com os dados do processo de homologação
|
112
|
+
result[ 26 ].must_equal "4" # Dígito Verificador do Prefixo: vide e-mail enviado com os dados do processo de homologação
|
113
|
+
result[27..28].must_equal "12" # Espécie do Título
|
114
|
+
result[ 29 ].must_equal "1" # "Aceite do Título: "0" = Sem aceite "1" = Com aceite"
|
115
|
+
result[30..35].must_equal '150917' # Data de Emissão do Título: formato ddmmaa
|
116
|
+
result[36..37].must_equal '00' # Primeira instrução codificada:
|
117
|
+
result[38..39].must_equal '00' # Segunda instrução: vide SEQ 33
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
describe '#detalhe_multas_e_juros_do_pagamento' do
|
122
|
+
it "deve ter o tamanho de 58 digitos" do
|
123
|
+
subject.detalhe_multas_e_juros_do_pagamento(pagamento, 2).size.must_equal 58
|
124
|
+
end
|
125
|
+
it "deve conter as informações nas posições corretas" do
|
126
|
+
pagamento.expects(:percentual_juros_formatado).with(6).returns('025000')
|
127
|
+
pagamento.expects(:percentual_multa_formatado).with(6).returns('045000')
|
128
|
+
pagamento.tipo_emissao = '2'
|
129
|
+
pagamento.data_desconto = Date.parse('21/03/2018')
|
130
|
+
pagamento.valor_desconto = 4.3
|
131
|
+
pagamento.codigo_moeda = 9
|
132
|
+
pagamento.valor_abatimento = 56.47
|
133
|
+
|
134
|
+
result = subject.detalhe_multas_e_juros_do_pagamento(pagamento, 4)
|
135
|
+
result.size.must_equal 58
|
136
|
+
|
137
|
+
result[00..05].must_equal '025000'
|
138
|
+
result[06..11].must_equal '045000'
|
139
|
+
result[ 12 ].must_equal "2"
|
140
|
+
result[13..18].must_equal "210318"
|
141
|
+
result[19..31].must_equal '0000000000430'
|
142
|
+
result[ 32 ].must_equal "9"
|
143
|
+
result[33..44].must_equal ''.ljust(12 ,'0')
|
144
|
+
result[45..57].must_equal '0000000005647'
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
describe '#informacoes_do_sacado' do
|
149
|
+
it "deve ter o tamanho de 176 digitos" do
|
150
|
+
subject.informacoes_do_sacado(pagamento, 2).size.must_equal 176
|
151
|
+
end
|
152
|
+
it "deve conter as informações nas posições corretas" do
|
153
|
+
# pagador.tipo_cpf_cnpj = '1'
|
154
|
+
pagador.cpf_cnpj = '12345678901'
|
155
|
+
pagador.nome = 'nome pagador'
|
156
|
+
pagador.endereco = 'rua'
|
157
|
+
pagador.bairro = 'bairro'
|
158
|
+
pagador.cep = '89885-001'
|
159
|
+
pagador.cidade = 'São Carlos'
|
160
|
+
pagador.uf = 'SC'
|
161
|
+
pagador.nome_avalista = 'Avalista'
|
162
|
+
|
163
|
+
result = subject.informacoes_do_sacado(pagamento, 2)
|
164
|
+
result.size.must_equal 176
|
165
|
+
|
166
|
+
result[00..01].must_equal "01" # "Tipo de Inscrição do Pagador: "01" = CPF / "02" = CNPJ
|
167
|
+
result[02..15].must_equal '00012345678901' # Número do CNPJ ou CPF do Pagador
|
168
|
+
result[16..55].must_equal 'nome pagador'.ljust(40, ' ') # Nome do Pagador
|
169
|
+
result[56..92].must_equal 'rua'.ljust(37, ' ') # Endereço do Pagador
|
170
|
+
result[93..107].must_equal 'bairro'.ljust(15, ' ') # Bairro do Pagador
|
171
|
+
result[108..115].must_equal '89885001' # CEP do Pagador
|
172
|
+
result[116..130].must_equal 'São Carlos'.ljust(15, ' ') # Cidade do Pagador
|
173
|
+
result[131..132].must_equal 'SC' # UF do Pagador
|
174
|
+
result[133..172].must_equal 'Avalista'.ljust(40, ' ') # Observações/Mensagem ou Sacador/Avalista
|
175
|
+
result[173..174].must_equal "00" # "Número de Dias Para Protesto: Quantidade dias para envio protesto. Se = "0", utilizar dias protesto padrão do cliente cadastrado na cooperativa
|
176
|
+
result[ 175 ].must_equal " " # Complemento do Registro: Brancos
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
@@ -4,46 +4,7 @@ describe BrBoleto::Remessa::Lote do
|
|
4
4
|
subject { FactoryGirl.build(:remessa_lote) }
|
5
5
|
let(:pagamento) { FactoryGirl.build(:remessa_pagamento) }
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
wont allow_value([]).for(:pagamentos).with_message("não pode estar vazio.")
|
10
|
-
end
|
11
|
-
it "deve ser um objeto pagamento" do
|
12
|
-
wont allow_value([subject.class.new()]).for(:pagamentos).with_message("cada item deve ser um objeto Pagamento.")
|
13
|
-
end
|
14
|
-
it "deve ser válido com um pagamento válido" do
|
15
|
-
must allow_value([pagamento]).for(:pagamentos)
|
16
|
-
end
|
17
|
-
it "não deve ser válidose houver algum pagamento inválido" do
|
18
|
-
wont allow_value([FactoryGirl.build(:remessa_pagamento, cep_sacado: nil)]).for(:pagamentos)
|
19
|
-
end
|
20
|
-
it "deve ser válido se passar apenas um pagamento sem Array" do
|
21
|
-
must allow_value(pagamento).for(:pagamentos)
|
22
|
-
end
|
23
|
-
it "se setar apenas 1 pagamento sem array deve retornar um array de 1 posicao" do
|
24
|
-
subject.pagamentos = pagamento
|
25
|
-
subject.pagamentos.size.must_equal 1
|
26
|
-
subject.pagamentos.is_a?(Array).must_equal true
|
27
|
-
subject.pagamentos[0].must_equal pagamento
|
28
|
-
end
|
29
|
-
it "posso setar mais que 1 pagamento" do
|
30
|
-
pagamento2 = FactoryGirl.build(:remessa_pagamento)
|
31
|
-
subject.pagamentos = [pagamento, pagamento2]
|
32
|
-
subject.pagamentos.size.must_equal 2
|
33
|
-
subject.pagamentos.is_a?(Array).must_equal true
|
34
|
-
subject.pagamentos[0].must_equal pagamento
|
35
|
-
subject.pagamentos[1].must_equal pagamento2
|
36
|
-
end
|
37
|
-
|
38
|
-
it "posso incrementar os pagamentos com <<" do
|
39
|
-
pagamento2 = FactoryGirl.build(:remessa_pagamento, valor_documento: 0.50)
|
40
|
-
subject.pagamentos = pagamento
|
41
|
-
subject.pagamentos.size.must_equal 1
|
42
|
-
subject.pagamentos << pagamento2
|
43
|
-
subject.pagamentos.size.must_equal 2
|
44
|
-
subject.pagamentos.is_a?(Array).must_equal true
|
45
|
-
subject.pagamentos[0].must_equal pagamento
|
46
|
-
subject.pagamentos[1].must_equal pagamento2
|
47
|
-
end
|
7
|
+
it "deve ter incluso o module HavePagamentos" do
|
8
|
+
subject.class.included_modules.must_include BrBoleto::HavePagamentos
|
48
9
|
end
|
49
10
|
end
|
@@ -2,141 +2,169 @@
|
|
2
2
|
require 'test_helper'
|
3
3
|
|
4
4
|
describe BrBoleto::Remessa::Pagamento do
|
5
|
-
|
6
|
-
class Shoulda::Matchers::ActiveModel::ValidateLengthOfMatcher
|
7
|
-
# Sobrescrevo o método que gera a string para validar o tamanho
|
8
|
-
# Pois o CEP só aceita números
|
9
|
-
def string_of_length(length)
|
10
|
-
'8' * length
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
5
|
subject { FactoryGirl.build(:remessa_pagamento) }
|
6
|
+
|
7
|
+
it "deve conter o mdule HavePagador" do
|
8
|
+
subject.class.included_modules.must_include BrBoleto::HavePagador
|
9
|
+
end
|
15
10
|
|
16
11
|
|
17
12
|
describe "validations" do
|
18
13
|
it { must validate_presence_of(:nosso_numero) }
|
19
14
|
it { must validate_presence_of(:data_vencimento) }
|
20
15
|
it { must validate_presence_of(:valor_documento) }
|
21
|
-
it { must validate_presence_of(:documento_sacado) }
|
22
|
-
it { must validate_presence_of(:nome_sacado) }
|
23
|
-
it { must validate_presence_of(:endereco_sacado) }
|
24
|
-
it { must validate_presence_of(:cep_sacado) }
|
25
|
-
it { must validate_presence_of(:cidade_sacado) }
|
26
|
-
it { must validate_presence_of(:uf_sacado) }
|
27
|
-
it { must validate_presence_of(:bairro_sacado) }
|
28
|
-
it { must validate_presence_of(:tipo_impressao) }
|
29
16
|
|
30
|
-
|
31
|
-
|
32
|
-
end
|
17
|
+
describe '#tipo_impressao' do
|
18
|
+
it { wont validate_presence_of(:tipo_impressao) }
|
33
19
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
it "for valor_mora" do
|
40
|
-
object = subject.class.new()
|
41
|
-
object.valor_mora.must_equal 0.0
|
42
|
-
end
|
43
|
-
it "for valor_desconto" do
|
44
|
-
object = subject.class.new()
|
45
|
-
object.valor_desconto.must_equal 0.0
|
46
|
-
end
|
47
|
-
it "for valor_iof" do
|
48
|
-
object = subject.class.new()
|
49
|
-
object.valor_iof.must_equal 0.0
|
50
|
-
end
|
51
|
-
it "for valor_abatimento" do
|
52
|
-
object = subject.class.new()
|
53
|
-
object.valor_abatimento.must_equal 0.0
|
54
|
-
end
|
55
|
-
it "for nome_avalista" do
|
56
|
-
object = subject.class.new()
|
57
|
-
object.nome_avalista.must_equal ''
|
58
|
-
end
|
59
|
-
it "for cod_desconto" do
|
60
|
-
object = subject.class.new()
|
61
|
-
object.cod_desconto.must_equal '0'
|
62
|
-
end
|
63
|
-
it "for tipo_impressao" do
|
64
|
-
object = subject.class.new()
|
65
|
-
object.tipo_impressao.must_equal '1'
|
66
|
-
end
|
67
|
-
it "for desconto_2_codigo" do
|
68
|
-
object = subject.class.new()
|
69
|
-
object.desconto_2_codigo.must_equal '0'
|
20
|
+
it "se valid_tipo_impressao_required for true deve validar a obrigatoriedade do tipo de tipo_impressao" do
|
21
|
+
subject.valid_tipo_impressao_required = true
|
22
|
+
must validate_presence_of(:tipo_impressao)
|
23
|
+
end
|
24
|
+
|
70
25
|
end
|
71
|
-
|
72
|
-
|
73
|
-
|
26
|
+
|
27
|
+
describe '#cod_desconto' do
|
28
|
+
before { subject.cod_desconto = '555' }
|
29
|
+
|
30
|
+
it { wont_be_message_error(:cod_desconto) }
|
31
|
+
it "se valid_cod_desconto_length tiver valor validar a partir do valor setado" do
|
32
|
+
subject.valid_cod_desconto_length = 2
|
33
|
+
must_be_message_error(:cod_desconto, :custom_length_is, {count: 2})
|
34
|
+
end
|
74
35
|
end
|
75
|
-
|
76
|
-
|
77
|
-
|
36
|
+
|
37
|
+
describe '#emissao_boleto' do
|
38
|
+
before { subject.emissao_boleto = '555' }
|
39
|
+
|
40
|
+
it { wont_be_message_error(:emissao_boleto) }
|
41
|
+
it "se valid_emissao_boleto_length tiver valor validar a partir do valor setado" do
|
42
|
+
subject.valid_emissao_boleto_length = 2
|
43
|
+
must_be_message_error(:emissao_boleto, :custom_length_is, {count: 2})
|
44
|
+
end
|
78
45
|
end
|
79
|
-
|
80
|
-
|
81
|
-
|
46
|
+
|
47
|
+
describe '#distribuicao_boleto' do
|
48
|
+
before { subject.distribuicao_boleto = '555' }
|
49
|
+
|
50
|
+
it { wont_be_message_error(:distribuicao_boleto) }
|
51
|
+
it "se valid_distribuicao_boleto_length tiver valor validar a partir do valor setado" do
|
52
|
+
subject.valid_distribuicao_boleto_length = 2
|
53
|
+
must_be_message_error(:distribuicao_boleto, :custom_length_is, {count: 2})
|
54
|
+
end
|
82
55
|
end
|
83
|
-
|
84
|
-
|
85
|
-
|
56
|
+
end
|
57
|
+
|
58
|
+
describe "#percentual_multa" do
|
59
|
+
it "deve retornar o percentual representativo do valor_multa para o valor_documento utilizando" do
|
60
|
+
subject.assign_attributes(valor_multa: 7.47, valor_documento: 78.98)
|
61
|
+
subject.percentual_multa.must_equal 9.458091
|
62
|
+
end
|
63
|
+
it "deve utilizar o metodo get_percent_by_total de Helper::Number para gerar o percentual" do
|
64
|
+
subject.assign_attributes(valor_multa: 8.47, valor_documento: 100.00)
|
65
|
+
numero = BrBoleto::Helper::Number.new(50.0)
|
66
|
+
BrBoleto::Helper::Number.expects(:new).returns(numero)
|
67
|
+
numero.expects(:get_percent_by_total).with(100.00).returns(10.47)
|
68
|
+
|
69
|
+
subject.percentual_multa.must_equal 10.47
|
86
70
|
end
|
87
|
-
|
88
|
-
|
89
|
-
|
71
|
+
end
|
72
|
+
|
73
|
+
describe "#percentual_juros" do
|
74
|
+
it "deve retornar o percentual representativo do valor_juros para o valor_documento utilizando" do
|
75
|
+
subject.assign_attributes(valor_juros: 7.47, valor_documento: 78.98)
|
76
|
+
subject.percentual_juros.must_equal 9.458091
|
77
|
+
end
|
78
|
+
it "deve utilizar o metodo get_percent_by_total de Helper::Number para gerar o percentual" do
|
79
|
+
subject.assign_attributes(valor_juros: 8.47, valor_documento: 100.00)
|
80
|
+
numero = BrBoleto::Helper::Number.new(50.0)
|
81
|
+
BrBoleto::Helper::Number.expects(:new).returns(numero)
|
82
|
+
numero.expects(:get_percent_by_total).with(100.00).returns(10.47)
|
83
|
+
|
84
|
+
subject.percentual_juros.must_equal 10.47
|
90
85
|
end
|
91
|
-
|
92
|
-
|
93
|
-
|
86
|
+
end
|
87
|
+
|
88
|
+
describe '#moeda_real?' do
|
89
|
+
it "se a moeda for 9 então deve retornar true" do
|
90
|
+
subject.codigo_moeda = 9
|
91
|
+
subject.moeda_real?.must_equal true
|
94
92
|
end
|
95
|
-
it "for
|
96
|
-
|
97
|
-
|
93
|
+
it "se a moeda for diferente de 9 então deve retornar false" do
|
94
|
+
subject.codigo_moeda = 8
|
95
|
+
subject.moeda_real?.must_equal false
|
98
96
|
end
|
97
|
+
end
|
99
98
|
|
99
|
+
it "se o codigo_moeda não tiver valor setado deve assumir '9'" do
|
100
|
+
subject.codigo_moeda = 10
|
101
|
+
subject.codigo_moeda.must_equal 10
|
102
|
+
subject.codigo_moeda = nil
|
103
|
+
subject.codigo_moeda.must_equal '9'
|
100
104
|
end
|
101
105
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
subject.uf_sacado.must_equal 'OK'
|
108
|
-
end
|
109
|
-
it "nao deve sobrescrever os valores já setados com os valores padrões" do
|
110
|
-
subject.cod_desconto = '9'
|
111
|
-
subject.assign_attributes(valor_desconto: 500.88)
|
112
|
-
subject.cod_desconto.must_equal '9'
|
113
|
-
subject.valor_desconto.must_equal 500.88
|
114
|
-
end
|
106
|
+
it "se não for setado uma parcela deve assumir 1" do
|
107
|
+
subject.parcela = 10
|
108
|
+
subject.parcela.must_equal 10
|
109
|
+
subject.parcela = nil
|
110
|
+
subject.parcela.must_equal '1'
|
115
111
|
end
|
116
112
|
|
117
|
-
|
118
|
-
subject
|
119
|
-
|
120
|
-
bl.nosso_numero = "999777"
|
121
|
-
bl.valor_documento = 789.44
|
122
|
-
end
|
123
|
-
end
|
124
|
-
it { subject.nosso_numero.must_equal '999777' }
|
125
|
-
it { subject.valor_documento.must_equal 789.44 }
|
113
|
+
it "nosso_numero deve retornar apenas numeros" do
|
114
|
+
subject.nosso_numero = 'A1!@#$%*()-234vc.,;-56789o0'
|
115
|
+
subject.nosso_numero.must_equal '1234567890'
|
126
116
|
end
|
127
117
|
|
128
|
-
describe "
|
129
|
-
|
130
|
-
|
118
|
+
describe "default_values" do
|
119
|
+
let(:object) { subject.class.new() }
|
120
|
+
it "for data_emissao" do object.data_emissao.must_equal Date.today end
|
121
|
+
it "for valor_mora" do object.valor_mora.must_equal 0.0 end
|
122
|
+
it "for valor_desconto" do object.valor_desconto.must_equal 0.0 end
|
123
|
+
it "for valor_iof" do object.valor_iof.must_equal 0.0 end
|
124
|
+
it "for valor_abatimento" do object.valor_abatimento.must_equal 0.0 end
|
125
|
+
it "for cod_desconto" do object.cod_desconto.must_equal '0' end
|
126
|
+
it "for desconto_2_codigo" do object.desconto_2_codigo.must_equal '0' end
|
127
|
+
it "for desconto_2_valor" do object.desconto_2_valor.must_equal 0.0 end
|
128
|
+
it "for desconto_3_codigo" do object.desconto_3_codigo.must_equal '0' end
|
129
|
+
it "for desconto_3_valor" do object.desconto_3_valor.must_equal 0.0 end
|
130
|
+
it "for codigo_multa" do object.codigo_multa.must_equal '3' end
|
131
|
+
it "for codigo_juros" do object.codigo_juros.must_equal '3' end
|
132
|
+
it "for valor_multa" do object.valor_multa.must_equal 0.0 end
|
133
|
+
it "for valor_juros" do object.valor_juros.must_equal 0.0 end
|
134
|
+
it "for parcela" do object.parcela.must_equal '1' end
|
135
|
+
it "for tipo_impressao" do object.tipo_impressao.must_equal '1' end
|
136
|
+
it "for tipo_emissao" do object.tipo_emissao.must_equal '2' end
|
137
|
+
it "for identificacao_ocorrencia" do object.identificacao_ocorrencia.must_equal '01' end
|
138
|
+
it "for especie_titulo" do object.especie_titulo.must_equal '01' end
|
139
|
+
it "for codigo_moeda" do object.codigo_moeda.must_equal '9' end
|
140
|
+
it "for forma_cadastramento" do object.forma_cadastramento.must_equal '0' end
|
141
|
+
it "for emissao_boleto" do object.emissao_boleto.must_equal '2' end
|
142
|
+
it "for distribuicao_boleto" do object.distribuicao_boleto.must_equal '2' end
|
143
|
+
end
|
144
|
+
|
145
|
+
describe "#data_vencimento_formatado" do
|
146
|
+
it "deve chamar o metodo formata_data com padrão de formato %d%m%Y" do
|
147
|
+
subject.data_vencimento = Date.current
|
148
|
+
subject.expects(:formata_data).with(Date.current, "%d%m%Y").returns("123456")
|
149
|
+
subject.data_vencimento_formatado.must_equal '123456'
|
131
150
|
end
|
132
|
-
it "
|
133
|
-
subject.
|
151
|
+
it "deve chamar o metodo formata_data com o parametro passado" do
|
152
|
+
subject.data_vencimento = Date.current
|
153
|
+
subject.expects(:formata_data).with(Date.current, "%d%m%y").returns("123456")
|
154
|
+
subject.data_vencimento_formatado("%d%m%y").must_equal '123456'
|
134
155
|
end
|
135
|
-
|
136
|
-
|
156
|
+
end
|
157
|
+
|
158
|
+
describe "#data_emissao_formatado" do
|
159
|
+
it "deve chamar o metodo formata_data com padrão de formato %d%m%Y" do
|
160
|
+
subject.data_emissao = Date.current
|
161
|
+
subject.expects(:formata_data).with(Date.current, "%d%m%Y").returns("123456")
|
162
|
+
subject.data_emissao_formatado.must_equal '123456'
|
137
163
|
end
|
138
|
-
it "deve
|
139
|
-
subject.
|
164
|
+
it "deve chamar o metodo formata_data com o parametro passado" do
|
165
|
+
subject.data_emissao = Date.current
|
166
|
+
subject.expects(:formata_data).with(Date.current, "%d%m%y").returns("123456")
|
167
|
+
subject.data_emissao_formatado("%d%m%y").must_equal '123456'
|
140
168
|
end
|
141
169
|
end
|
142
170
|
|
@@ -233,8 +261,6 @@ describe BrBoleto::Remessa::Pagamento do
|
|
233
261
|
end
|
234
262
|
end
|
235
263
|
|
236
|
-
|
237
|
-
|
238
264
|
describe "#valor_documento_formatado" do
|
239
265
|
context "com padrao de tamanho = 13 digitos" do
|
240
266
|
it "deve formatar o valor removendo separador de casas decimais e aredondando para 2 casas decimais" do
|
@@ -310,89 +336,61 @@ describe BrBoleto::Remessa::Pagamento do
|
|
310
336
|
end
|
311
337
|
end
|
312
338
|
|
313
|
-
describe
|
314
|
-
|
315
|
-
|
316
|
-
subject.
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
subject.documento_sacado = '12345678901234'
|
333
|
-
subject.tipo_documento_sacado.must_equal '02'
|
334
|
-
end
|
335
|
-
it "deve ser 02 (CNPJ/CGC) se for maior a 14 digitos" do
|
336
|
-
subject.documento_sacado = '123456789012345'
|
337
|
-
subject.tipo_documento_sacado.must_equal '02'
|
338
|
-
end
|
339
|
+
describe '#percentual_multa_formatado' do
|
340
|
+
let(:number) { BrBoleto::Helper::Number.new(5.47) }
|
341
|
+
it "deve formatar o valor no formato de valores em percentual" do
|
342
|
+
subject.stubs(:percentual_multa).returns(72.50)
|
343
|
+
number
|
344
|
+
BrBoleto::Helper::Number.expects(:new).with(72.50).returns(number)
|
345
|
+
number.expects(:formata_valor_percentual).with(6).returns('123')
|
346
|
+
subject.percentual_multa_formatado.must_equal '123000'
|
347
|
+
end
|
348
|
+
it "deve considerar o tamanho pelo parametro para formatar o valor" do
|
349
|
+
subject.stubs(:percentual_multa).returns(4.0)
|
350
|
+
number
|
351
|
+
BrBoleto::Helper::Number.expects(:new).with(4.0).returns(number)
|
352
|
+
number.expects(:formata_valor_percentual).with(3).returns('1234')
|
353
|
+
subject.percentual_multa_formatado(3).must_equal '123'
|
354
|
+
end
|
355
|
+
it "deve gerar o valor corretamente - Teste sem MOCK" do
|
356
|
+
subject.stubs(:percentual_multa).returns(2.87)
|
357
|
+
subject.percentual_multa_formatado(5).must_equal '02870'
|
339
358
|
end
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
359
|
+
end
|
360
|
+
describe '#percentual_juros_formatado' do
|
361
|
+
let(:number) { BrBoleto::Helper::Number.new(5.47) }
|
362
|
+
it "deve formatar o valor no formato de valores em percentual" do
|
363
|
+
subject.stubs(:percentual_juros).returns(7.50)
|
364
|
+
number
|
365
|
+
BrBoleto::Helper::Number.expects(:new).with(7.50).returns(number)
|
366
|
+
number.expects(:formata_valor_percentual).with(6).returns('123')
|
367
|
+
subject.percentual_juros_formatado.must_equal '123000'
|
368
|
+
end
|
369
|
+
it "deve considerar o tamanho pelo parametro para formatar o valor" do
|
370
|
+
subject.stubs(:percentual_juros).returns(9.87)
|
371
|
+
number
|
372
|
+
BrBoleto::Helper::Number.expects(:new).with(9.87).returns(number)
|
373
|
+
number.expects(:formata_valor_percentual).with(3).returns('1234')
|
374
|
+
subject.percentual_juros_formatado(3).must_equal '123'
|
375
|
+
end
|
376
|
+
it "deve gerar o valor corretamente - Teste sem MOCK" do
|
377
|
+
subject.stubs(:percentual_juros).returns(12.438)
|
378
|
+
subject.percentual_juros_formatado(7).must_equal '1243800'
|
353
379
|
end
|
354
380
|
end
|
355
381
|
|
356
|
-
describe "#
|
357
|
-
it "
|
358
|
-
subject.
|
359
|
-
subject.tipo_documento_avalista.must_equal '0'
|
360
|
-
end
|
361
|
-
context "com padrao de tamanho = 2" do
|
362
|
-
it "deve ser 02 (CNPJ) se for menor que 14 digitos e maior que 11" do
|
363
|
-
subject.documento_avalista = '1234567890123'
|
364
|
-
subject.tipo_documento_avalista.must_equal '02'
|
365
|
-
end
|
366
|
-
it "deve ser 01 (CPF) se for igual a 11" do
|
367
|
-
subject.documento_avalista = '12345678901'
|
368
|
-
subject.tipo_documento_avalista.must_equal '01'
|
369
|
-
end
|
370
|
-
it "deve ser 01 (CPF) se for menor que 11" do
|
371
|
-
subject.documento_avalista = '1234567890'
|
372
|
-
subject.tipo_documento_avalista.must_equal '01'
|
373
|
-
end
|
374
|
-
it "deve ser 02 (CNPJ/CGC) se for igual a 14 digitos" do
|
375
|
-
subject.documento_avalista = '12345678901234'
|
376
|
-
subject.tipo_documento_avalista.must_equal '02'
|
377
|
-
end
|
378
|
-
it "deve ser 02 (CNPJ/CGC) se for maior a 14 digitos" do
|
379
|
-
subject.documento_avalista = '123456789012345'
|
380
|
-
subject.tipo_documento_avalista.must_equal '02'
|
381
|
-
end
|
382
|
+
describe "#formata_data" do
|
383
|
+
it "quando passar um valor nil" do
|
384
|
+
subject.send(:formata_data, nil).must_equal '00000000'
|
382
385
|
end
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
end
|
392
|
-
it "deve ser 02 (CNPJ/CGC) se for maior a 14 digitos e tamanho = 2" do
|
393
|
-
subject.documento_avalista = '123456789012345'
|
394
|
-
subject.tipo_documento_avalista(2).must_equal '02'
|
395
|
-
end
|
386
|
+
it "quando passar um valor nil mas passar outro formato para a data" do
|
387
|
+
subject.send(:formata_data, nil, "%d%m%y").must_equal '000000'
|
388
|
+
end
|
389
|
+
it "deve formatar a data com padrão ddmmyyyy" do
|
390
|
+
subject.send(:formata_data, Date.parse('30/12/2017')).must_equal '30122017'
|
391
|
+
end
|
392
|
+
it "deve formatar a data com formato passado por parametro" do
|
393
|
+
subject.send(:formata_data, Date.parse('30/12/2017'), "%d%m%y").must_equal '301217'
|
396
394
|
end
|
397
395
|
end
|
398
396
|
end
|