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,113 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class HavePagamentosTest < BrBoleto::ActiveModelBase
|
4
|
+
include BrBoleto::HavePagamentos
|
5
|
+
end
|
6
|
+
|
7
|
+
describe BrBoleto::HavePagamentos do
|
8
|
+
subject { HavePagamentosTest.new(pagamentos: [pagamento]) }
|
9
|
+
let(:pagamento) { BrBoleto::Remessa::Pagamento.new(nosso_numero: '123', data_vencimento: Date.tomorrow, valor_documento: 100.60) }
|
10
|
+
|
11
|
+
it "por padrão nao deve validar nada a não ser o nosso_numero, data_vencimento e valor_documento" do
|
12
|
+
wont_be_message_error(:base)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "deve haver ao menos 1 pagamento" do
|
16
|
+
wont allow_value([]).for(:pagamentos).with_message(:blank)
|
17
|
+
end
|
18
|
+
it "não deve ser válidose houver algum pagamento inválido" do
|
19
|
+
wont allow_value([FactoryGirl.build(:remessa_pagamento, nosso_numero: nil)]).for(:pagamentos)
|
20
|
+
end
|
21
|
+
it "deve ser válido se passar apenas um pagamento sem Array" do
|
22
|
+
pagamento_valido = FactoryGirl.build(:remessa_pagamento)
|
23
|
+
must allow_value(pagamento_valido).for(:pagamentos)
|
24
|
+
end
|
25
|
+
it "se setar apenas 1 pagamento sem array deve retornar um array de 1 posicao" do
|
26
|
+
subject.pagamentos = pagamento
|
27
|
+
subject.pagamentos.size.must_equal 1
|
28
|
+
subject.pagamentos.is_a?(Array).must_equal true
|
29
|
+
subject.pagamentos[0].must_equal pagamento
|
30
|
+
end
|
31
|
+
it "posso setar mais que 1 pagamento" do
|
32
|
+
pagamento2 = FactoryGirl.build(:remessa_pagamento)
|
33
|
+
subject.pagamentos = [pagamento, pagamento2]
|
34
|
+
subject.pagamentos.size.must_equal 2
|
35
|
+
subject.pagamentos.is_a?(Array).must_equal true
|
36
|
+
subject.pagamentos[0].must_equal pagamento
|
37
|
+
subject.pagamentos[1].must_equal pagamento2
|
38
|
+
end
|
39
|
+
|
40
|
+
it "posso incrementar os pagamentos com <<" do
|
41
|
+
pagamento2 = FactoryGirl.build(:remessa_pagamento, valor_documento: 0.50)
|
42
|
+
subject.pagamentos = pagamento
|
43
|
+
subject.pagamentos.size.must_equal 1
|
44
|
+
subject.pagamentos << pagamento2
|
45
|
+
subject.pagamentos.size.must_equal 2
|
46
|
+
subject.pagamentos.is_a?(Array).must_equal true
|
47
|
+
subject.pagamentos[0].must_equal pagamento
|
48
|
+
subject.pagamentos[1].must_equal pagamento2
|
49
|
+
end
|
50
|
+
|
51
|
+
it "o metodo pagamentos deve considerar apenas objetos'Pagamento" do
|
52
|
+
pagamento2 = FactoryGirl.build(:remessa_pagamento, valor_documento: 0.50)
|
53
|
+
subject.pagamentos << 'abc'
|
54
|
+
subject.pagamentos << pagamento2
|
55
|
+
subject.pagamentos << 123
|
56
|
+
|
57
|
+
subject.pagamentos.size.must_equal 2
|
58
|
+
subject.pagamentos.must_include pagamento
|
59
|
+
subject.pagamentos.must_include pagamento2
|
60
|
+
end
|
61
|
+
|
62
|
+
context "o valor setado nas validações devem obedecer a classe que inclui a conta. Mesmo que a conta tenha uma validação diferente" do
|
63
|
+
before do
|
64
|
+
subject.pagamentos = [pagamento]
|
65
|
+
pagamento.valid_tipo_impressao_required = true
|
66
|
+
pagamento.valid_cod_desconto_length = 6
|
67
|
+
pagamento.valid_emissao_boleto_length = 1
|
68
|
+
pagamento.valid_distribuicao_boleto_length = 2
|
69
|
+
end
|
70
|
+
|
71
|
+
context "Se os metodos do objeto que tem os pagamentos tiverem valor nos seus metodos deve permanecer esses valores" do
|
72
|
+
it '#tipo_impressao' do
|
73
|
+
subject.pagamento_valid_tipo_impressao_required = false
|
74
|
+
pagamento.tipo_impressao = nil
|
75
|
+
wont_be_message_error(:pagamentos, "#{pagamento.nosso_numero}: #{BrBoleto::Remessa::Pagamento.human_attribute_name(:tipo_impressao)} #{get_message(:blank, {})}")
|
76
|
+
end
|
77
|
+
it '#cod_desconto' do
|
78
|
+
subject.pagamento_valid_cod_desconto_length = 4
|
79
|
+
pagamento.cod_desconto = '123'
|
80
|
+
must_be_message_error(:pagamentos, "#{pagamento.nosso_numero}: #{BrBoleto::Remessa::Pagamento.human_attribute_name(:cod_desconto)} #{get_message(:custom_length_is, {count: 4})}")
|
81
|
+
end
|
82
|
+
it '#emissao_boleto' do
|
83
|
+
subject.pagamento_valid_emissao_boleto_length = 4
|
84
|
+
pagamento.emissao_boleto = '123'
|
85
|
+
must_be_message_error(:pagamentos, "#{pagamento.nosso_numero}: #{BrBoleto::Remessa::Pagamento.human_attribute_name(:emissao_boleto)} #{get_message(:custom_length_is, {count: 4})}")
|
86
|
+
end
|
87
|
+
it '#distribuicao_boleto' do
|
88
|
+
subject.pagamento_valid_distribuicao_boleto_length = 4
|
89
|
+
pagamento.distribuicao_boleto = '123'
|
90
|
+
must_be_message_error(:pagamentos, "#{pagamento.nosso_numero}: #{BrBoleto::Remessa::Pagamento.human_attribute_name(:distribuicao_boleto)} #{get_message(:custom_length_is, {count: 4})}")
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
context "Deve considerar as validações setadas nos pagamentos se não houver os metodos sobrescritos no objeto que tem os pagamentos" do
|
95
|
+
it '#tipo_impressao' do
|
96
|
+
pagamento.tipo_impressao = nil
|
97
|
+
must_be_message_error(:pagamentos, "#{pagamento.nosso_numero}: #{BrBoleto::Remessa::Pagamento.human_attribute_name(:tipo_impressao)} #{get_message(:blank, {})}")
|
98
|
+
end
|
99
|
+
it '#cod_desconto' do
|
100
|
+
pagamento.cod_desconto = '123'
|
101
|
+
must_be_message_error(:pagamentos, "#{pagamento.nosso_numero}: #{BrBoleto::Remessa::Pagamento.human_attribute_name(:cod_desconto)} #{get_message(:custom_length_is, {count: 6})}")
|
102
|
+
end
|
103
|
+
it '#emissao_boleto' do
|
104
|
+
pagamento.emissao_boleto = '123'
|
105
|
+
must_be_message_error(:pagamentos, "#{pagamento.nosso_numero}: #{BrBoleto::Remessa::Pagamento.human_attribute_name(:emissao_boleto)} #{get_message(:custom_length_is, {count: 1})}")
|
106
|
+
end
|
107
|
+
it '#distribuicao_boleto' do
|
108
|
+
pagamento.distribuicao_boleto = '123'
|
109
|
+
must_be_message_error(:pagamentos, "#{pagamento.nosso_numero}: #{BrBoleto::Remessa::Pagamento.human_attribute_name(:distribuicao_boleto)} #{get_message(:custom_length_is, {count: 2})}")
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
@@ -3,232 +3,130 @@ require 'test_helper'
|
|
3
3
|
describe BrBoleto::Boleto::Base do
|
4
4
|
subject { FactoryGirl.build(:boleto_base) }
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
describe "model_name" do
|
9
|
-
it "must return BrBoleto::Boleto::Base" do
|
10
|
-
BrBoleto::Boleto::Base.model_name.must_equal 'BrBoleto::Boleto::Base'
|
11
|
-
end
|
6
|
+
before do
|
7
|
+
subject.stubs(:conta_class).returns(BrBoleto::Conta::Sicoob)
|
12
8
|
end
|
13
9
|
|
14
|
-
|
15
|
-
|
16
|
-
BrBoleto::Boleto::Base.human_attribute_name(:same_thing).must_equal "Same thing"
|
17
|
-
end
|
10
|
+
it "deve herdar de ActiveModelBase" do
|
11
|
+
subject.must_be_kind_of BrBoleto::ActiveModelBase
|
18
12
|
end
|
19
13
|
|
20
|
-
|
21
|
-
|
22
|
-
subject.to_partial_path.must_equal 'br_boleto/base'
|
23
|
-
end
|
14
|
+
it "deve ter o module HaveConta incluso" do
|
15
|
+
subject.class.included_modules.must_include BrBoleto::HaveConta
|
24
16
|
end
|
25
17
|
|
26
|
-
|
27
|
-
|
28
|
-
subject.to_model.must_equal subject
|
29
|
-
end
|
18
|
+
it "deve ter o module HavePagador incluso" do
|
19
|
+
subject.class.included_modules.must_include BrBoleto::HavePagador
|
30
20
|
end
|
31
21
|
|
32
|
-
describe
|
33
|
-
it
|
34
|
-
|
35
|
-
|
36
|
-
end
|
22
|
+
describe '#validations' do
|
23
|
+
it { must validate_presence_of(:valor_documento) }
|
24
|
+
it { must validate_presence_of(:numero_documento) }
|
25
|
+
it { must validate_presence_of(:data_vencimento) }
|
37
26
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
valor_documento: 101.99,
|
44
|
-
data_vencimento: Date.new(2015, 07, 10),
|
45
|
-
carteira: '175',
|
46
|
-
agencia: '98',
|
47
|
-
conta_corrente: '98701',
|
48
|
-
cedente: 'Nome da razao social',
|
49
|
-
sacado: 'Teste',
|
50
|
-
documento_sacado: '725.275.005-10',
|
51
|
-
endereco_sacado: 'Rua teste, 23045',
|
52
|
-
instrucoes1: 'Lembrar de algo 1',
|
53
|
-
instrucoes2: 'Lembrar de algo 2',
|
54
|
-
instrucoes3: 'Lembrar de algo 3',
|
55
|
-
instrucoes4: 'Lembrar de algo 4',
|
56
|
-
instrucoes5: 'Lembrar de algo 5',
|
57
|
-
instrucoes6: 'Lembrar de algo 6',
|
58
|
-
})
|
27
|
+
context "tamanho maximo do numero_documento" do
|
28
|
+
it "por padrão deve ter o tamanho máximo de 6 digitos" do
|
29
|
+
subject.send(:valid_numero_documento_maximum).must_equal 6
|
30
|
+
subject.numero_documento = '1234567'
|
31
|
+
must_be_message_error(:numero_documento, :custom_length_maximum, {count: 6})
|
59
32
|
end
|
60
|
-
it
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
it{ @object.agencia.must_equal '0098' }
|
65
|
-
it{ @object.conta_corrente.must_equal '98701' }
|
66
|
-
it{ @object.codigo_moeda.must_equal '9' }
|
67
|
-
it{ @object.cedente.must_equal 'Nome da razao social' }
|
68
|
-
it{ @object.especie.must_equal 'R$' }
|
69
|
-
it{ @object.especie_documento.must_equal 'DM' }
|
70
|
-
it{ @object.data_documento.must_equal Date.today }
|
71
|
-
it{ @object.sacado.must_equal 'Teste' }
|
72
|
-
it{ @object.documento_sacado.must_equal '72527500510' }
|
73
|
-
it{ @object.endereco_sacado.must_equal 'Rua teste, 23045'}
|
74
|
-
it{ @object.local_pagamento.must_equal 'PAGÁVEL EM QUALQUER BANCO ATÉ O VENCIMENTO' }
|
75
|
-
it{ @object.instrucoes1.must_equal 'Lembrar de algo 1'}
|
76
|
-
it{ @object.instrucoes2.must_equal 'Lembrar de algo 2'}
|
77
|
-
it{ @object.instrucoes3.must_equal 'Lembrar de algo 3'}
|
78
|
-
it{ @object.instrucoes4.must_equal 'Lembrar de algo 4'}
|
79
|
-
it{ @object.instrucoes5.must_equal 'Lembrar de algo 5'}
|
80
|
-
it{ @object.instrucoes6.must_equal 'Lembrar de algo 6'}
|
81
|
-
end
|
82
|
-
|
83
|
-
context "when passing a block" do
|
84
|
-
before do
|
85
|
-
@object = subject.class.new do |boleto|
|
86
|
-
boleto.numero_documento = '187390'
|
87
|
-
boleto.valor_documento = 1
|
88
|
-
boleto.data_vencimento = Date.new(2012, 10, 10)
|
89
|
-
boleto.carteira = '109'
|
90
|
-
boleto.agencia = '0914'
|
91
|
-
boleto.conta_corrente = '82369'
|
92
|
-
boleto.codigo_cedente = '90182'
|
93
|
-
boleto.endereco_cedente = 'Rua Itapaiuna, 2434'
|
94
|
-
boleto.cedente = 'Nome da razao social'
|
95
|
-
boleto.documento_cedente = '62.526.713/0001-40'
|
96
|
-
boleto.sacado = 'Teste'
|
97
|
-
boleto.instrucoes1 = 'Lembrar de algo 1'
|
98
|
-
boleto.instrucoes2 = 'Lembrar de algo 2'
|
99
|
-
boleto.instrucoes3 = 'Lembrar de algo 3'
|
100
|
-
boleto.instrucoes4 = 'Lembrar de algo 4'
|
101
|
-
boleto.instrucoes5 = 'Lembrar de algo 5'
|
102
|
-
boleto.instrucoes6 = 'Lembrar de algo 6'
|
103
|
-
end
|
33
|
+
it "se mudar o valor do metodo valid_numero_documento_maximum dev validar o tamanho maximo a com o valor setado" do
|
34
|
+
subject.stubs(:valid_numero_documento_maximum).returns(4)
|
35
|
+
subject.numero_documento = '1234567'
|
36
|
+
must_be_message_error(:numero_documento, :custom_length_maximum, {count: 4})
|
104
37
|
end
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
it {@object.agencia.must_equal '0914' }
|
110
|
-
it {@object.conta_corrente.must_equal '82369' }
|
111
|
-
it {@object.codigo_moeda.must_equal '9' }
|
112
|
-
it {@object.codigo_cedente.must_equal '090182' }
|
113
|
-
it {@object.endereco_cedente.must_equal 'Rua Itapaiuna, 2434' }
|
114
|
-
it {@object.cedente.must_equal 'Nome da razao social' }
|
115
|
-
it {@object.documento_cedente.must_equal '62526713000140' }
|
116
|
-
it {@object.sacado.must_equal 'Teste' }
|
117
|
-
it {@object.aceite.must_equal true }
|
118
|
-
it {@object.instrucoes1.must_equal 'Lembrar de algo 1' }
|
119
|
-
it {@object.instrucoes2.must_equal 'Lembrar de algo 2' }
|
120
|
-
it {@object.instrucoes3.must_equal 'Lembrar de algo 3' }
|
121
|
-
it {@object.instrucoes4.must_equal 'Lembrar de algo 4' }
|
122
|
-
it {@object.instrucoes5.must_equal 'Lembrar de algo 5' }
|
123
|
-
it {@object.instrucoes6.must_equal 'Lembrar de algo 6' }
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
describe "#documento_cedente" do
|
128
|
-
context "com CPF" do
|
129
|
-
before do
|
130
|
-
subject.documento_cedente = 2273542143
|
38
|
+
it "se não tiver valor setado em valid_numero_documento_maximum, não deve validar" do
|
39
|
+
subject.stubs(:valid_numero_documento_maximum).returns(nil)
|
40
|
+
subject.numero_documento = '1234567'
|
41
|
+
wont_be_message_error(:numero_documento)
|
131
42
|
end
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
subject.documento_cedente = '022.735.421-43'
|
137
|
-
subject.documento_cedente.must_equal '02273542143'
|
43
|
+
end
|
44
|
+
context "#valor_documento" do
|
45
|
+
it "por padrão deve ter a validação de tamanho maximo com 99999999.99" do
|
46
|
+
must validate_numericality_of(:valor_documento).is_less_than_or_equal_to(99999999.99)
|
138
47
|
end
|
139
|
-
|
140
|
-
|
48
|
+
it "deve validar o valor maximo a partir do metodo valid_valor_documento_tamanho_maximo" do
|
49
|
+
subject.stubs(:valid_valor_documento_tamanho_maximo).returns(100.00)
|
50
|
+
must validate_numericality_of(:valor_documento).is_less_than_or_equal_to(100.0)
|
141
51
|
end
|
142
|
-
|
143
|
-
|
52
|
+
it "não deve validar o valor maximo se o metodo valid_valor_documento_tamanho_maximo estiver nil" do
|
53
|
+
subject.stubs(:valid_valor_documento_tamanho_maximo).returns(nil)
|
54
|
+
wont validate_numericality_of(:valor_documento)
|
144
55
|
end
|
145
56
|
end
|
146
57
|
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
subject.documento_cedente.must_equal '09372490000121'
|
158
|
-
end
|
159
|
-
it "deve remover a formatacao" do
|
160
|
-
subject.documento_cedente = '09.372.490/0001-21'
|
161
|
-
subject.documento_cedente.must_equal '09372490000121'
|
162
|
-
end
|
163
|
-
describe "metodo documento_cedente_formatado " do
|
164
|
-
it { subject.documento_cedente_formatado.must_equal '09.372.490/0001-21' }
|
165
|
-
end
|
166
|
-
describe "metodo documento_cedente_formatado_com_label " do
|
167
|
-
it { subject.documento_cedente_formatado_com_label.must_equal 'CNPJ 09.372.490/0001-21' }
|
168
|
-
end
|
58
|
+
it "data_vencimento deve ser uma data" do
|
59
|
+
subject.data_vencimento = 13
|
60
|
+
must_be_message_error :data_vencimento, :invalid
|
61
|
+
subject.data_vencimento = '13'
|
62
|
+
must_be_message_error :data_vencimento, :invalid
|
63
|
+
subject.data_vencimento = Time.current
|
64
|
+
must_be_message_error :data_vencimento, :invalid
|
65
|
+
|
66
|
+
subject.data_vencimento = Date.current
|
67
|
+
wont_be_message_error :data_vencimento, :invalid
|
169
68
|
end
|
170
69
|
end
|
171
70
|
|
172
|
-
describe "#
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
subject.documento_sacado.must_equal '02273542143'
|
179
|
-
end
|
180
|
-
it "deve remover a formatacao" do
|
181
|
-
subject.documento_sacado = '022.735.421-43'
|
182
|
-
subject.documento_sacado.must_equal '02273542143'
|
183
|
-
end
|
184
|
-
describe "metodo documento_sacado_formatado " do
|
185
|
-
it { subject.documento_sacado_formatado.must_equal '022.735.421-43' }
|
186
|
-
end
|
187
|
-
describe "metodo documento_sacado_formatado_com_label " do
|
188
|
-
it { subject.documento_sacado_formatado_com_label.must_equal 'CPF 022.735.421-43' }
|
189
|
-
end
|
71
|
+
describe "#default_values" do
|
72
|
+
it 'for codigo_moeda' do
|
73
|
+
subject.class.new.codigo_moeda.must_equal '9'
|
74
|
+
end
|
75
|
+
it 'for especie' do
|
76
|
+
subject.class.new.especie.must_equal 'R$'
|
190
77
|
end
|
78
|
+
it 'for especie_documento' do
|
79
|
+
subject.class.new.especie_documento.must_equal 'DM'
|
80
|
+
end
|
81
|
+
it 'for local_pagamento' do
|
82
|
+
subject.class.new.local_pagamento.must_equal 'PAGÁVEL EM QUALQUER BANCO ATÉ O VENCIMENTO'
|
83
|
+
end
|
84
|
+
it 'for data_documento' do
|
85
|
+
subject.class.new.data_documento.must_equal Date.current
|
86
|
+
end
|
87
|
+
it 'for aceite' do
|
88
|
+
subject.class.new.aceite.must_equal false
|
89
|
+
end
|
90
|
+
end
|
191
91
|
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
subject.documento_sacado.must_equal '09372490000121'
|
203
|
-
end
|
204
|
-
it "deve remover a formatacao" do
|
205
|
-
subject.documento_sacado = '09.372.490/0001-21'
|
206
|
-
subject.documento_sacado.must_equal '09372490000121'
|
207
|
-
end
|
208
|
-
describe "metodo documento_sacado_formatado " do
|
209
|
-
it { subject.documento_sacado_formatado.must_equal '09.372.490/0001-21' }
|
210
|
-
end
|
211
|
-
describe "metodo documento_sacado_formatado_com_label " do
|
212
|
-
it { subject.documento_sacado_formatado_com_label.must_equal 'CNPJ 09.372.490/0001-21' }
|
213
|
-
end
|
92
|
+
describe '#numero_documento' do
|
93
|
+
it "deve ajustar o tamanho do numero conforme valid_numero_documento_maximum" do
|
94
|
+
subject.numero_documento = 354
|
95
|
+
subject.numero_documento.must_equal '000354'
|
96
|
+
|
97
|
+
subject.stubs(:valid_numero_documento_maximum).returns(4)
|
98
|
+
subject.numero_documento.must_equal '0354'
|
99
|
+
|
100
|
+
subject.stubs(:valid_numero_documento_maximum).returns(nil)
|
101
|
+
subject.numero_documento.must_equal 354
|
214
102
|
end
|
215
103
|
end
|
216
104
|
|
217
|
-
|
218
|
-
it "
|
219
|
-
subject.
|
220
|
-
subject.
|
105
|
+
describe "#parcelas" do
|
106
|
+
it "se não tiver parcelas setadas, deve retornar 001" do
|
107
|
+
subject.parcelas = ''
|
108
|
+
subject.parcelas.must_equal "001"
|
109
|
+
end
|
110
|
+
it "deve permitir a modificação do número de parcelas" do
|
111
|
+
subject.parcelas = 2
|
112
|
+
subject.parcelas.must_equal "002"
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
describe "to_partial_path" do
|
117
|
+
it "must return the path from class name" do
|
118
|
+
subject.to_partial_path.must_equal 'br_boleto/base'
|
221
119
|
end
|
222
120
|
end
|
223
121
|
|
224
122
|
describe "#valor_documento_formatado" do
|
225
|
-
context "
|
123
|
+
context "valor maior que 100" do
|
226
124
|
before { subject.stubs(:valor_documento).returns(123.45) }
|
227
125
|
|
228
126
|
it {subject.valor_formatado_para_codigo_de_barras.must_equal '0000012345' }
|
229
127
|
end
|
230
128
|
|
231
|
-
context "
|
129
|
+
context "valor menor que 100" do
|
232
130
|
before { subject.stubs(:valor_documento).returns(5.0) }
|
233
131
|
|
234
132
|
it {subject.valor_formatado_para_codigo_de_barras.must_equal '0000000500'}
|
@@ -285,21 +183,49 @@ describe BrBoleto::Boleto::Base do
|
|
285
183
|
end
|
286
184
|
end
|
287
185
|
|
288
|
-
|
289
|
-
|
290
|
-
subject.
|
186
|
+
describe '#codigo_de_barras' do
|
187
|
+
it 'deve montar o código de barras com o codigo_de_barras_padrao e codigo_de_barras_do_banco' do
|
188
|
+
subject.expects(:codigo_de_barras_padrao).returns(''.rjust(18, '1'))
|
189
|
+
subject.expects(:codigo_de_barras_do_banco).returns(''.rjust(25, '3'))
|
190
|
+
subject.expects(:digito_codigo_de_barras).returns('2')
|
191
|
+
|
192
|
+
subject.codigo_de_barras.must_equal '1111211111111111111'+''.ljust(25, '3')
|
291
193
|
end
|
292
194
|
end
|
293
195
|
|
294
|
-
|
295
|
-
|
296
|
-
subject.
|
196
|
+
describe '#codigo_de_barras_padrao' do
|
197
|
+
it "deve montar a parte do codigo de barras padrão para todos os bancos" do
|
198
|
+
subject.data_vencimento = Date.parse('21/02/2025') # dia 21/02/2025 vai parar de funcionar
|
199
|
+
subject.codigo_moeda = '8'
|
200
|
+
subject.valor_documento = 5_123.05
|
201
|
+
subject.conta.expects(:codigo_banco).returns('554')
|
202
|
+
|
203
|
+
resul = subject.codigo_de_barras_padrao
|
204
|
+
resul.size.must_equal 18
|
205
|
+
resul[0..2].must_equal '554' # Código do banco
|
206
|
+
resul[ 3 ].must_equal '8' # Código da moeda
|
207
|
+
resul[4..7].must_equal '9999' # Fator de vencimento
|
208
|
+
resul[8..17].must_equal '0000512305' # Valor do documento
|
297
209
|
end
|
298
210
|
end
|
299
211
|
|
300
|
-
|
301
|
-
|
302
|
-
subject.
|
212
|
+
describe '#digito_codigo_de_barras' do
|
213
|
+
it "deve calcular o digito pelo Modulo11FatorDe2a9 com os valores de codigo_de_barras_padrao e codigo_de_barras_do_banco" do
|
214
|
+
subject.expects(:codigo_de_barras_padrao).returns('123456')
|
215
|
+
subject.expects(:codigo_de_barras_do_banco).returns('789012')
|
216
|
+
BrBoleto::Calculos::Modulo11FatorDe2a9.expects(:new).with('123456789012').returns(7)
|
217
|
+
|
218
|
+
subject.digito_codigo_de_barras.must_equal 7
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
describe '#linha_digitavel' do
|
223
|
+
it "deve gerar a linha_digitavel a partir do calculo LinhaDigitavel passando o codigo de barras" do
|
224
|
+
subject.expects(:codigo_de_barras).returns('CODIGOBARRAS')
|
225
|
+
|
226
|
+
BrBoleto::Calculos::LinhaDigitavel.expects(:new).with('CODIGOBARRAS').returns('LinhaDigitavel')
|
227
|
+
|
228
|
+
subject.linha_digitavel.must_equal 'LinhaDigitavel'
|
303
229
|
end
|
304
230
|
end
|
305
231
|
|