br_boleto 1.2.2 → 2.0.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 +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
|
|