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.
Files changed (104) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Gemfile.lock +1 -1
  4. data/README.markdown +278 -98
  5. data/br_boleto.gemspec +5 -3
  6. data/lib/br_boleto/active_model_base.rb +1 -1
  7. data/lib/br_boleto/association/have_conta.rb +109 -0
  8. data/lib/br_boleto/association/have_pagador.rb +38 -0
  9. data/lib/br_boleto/association/have_pagamentos.rb +44 -0
  10. data/lib/br_boleto/boleto/base.rb +50 -379
  11. data/lib/br_boleto/boleto/caixa.rb +28 -143
  12. data/lib/br_boleto/boleto/sicoob.rb +24 -144
  13. data/lib/br_boleto/conta/base.rb +288 -0
  14. data/lib/br_boleto/conta/caixa.rb +109 -0
  15. data/lib/br_boleto/conta/sicoob.rb +64 -0
  16. data/lib/br_boleto/helper/default_codes.rb +33 -0
  17. data/lib/br_boleto/helper/format_value.rb +1 -0
  18. data/lib/br_boleto/helper/number.rb +30 -0
  19. data/lib/br_boleto/pagador.rb +82 -0
  20. data/lib/br_boleto/remessa/base.rb +28 -50
  21. data/lib/br_boleto/remessa/cnab240/base.rb +22 -131
  22. data/lib/br_boleto/remessa/cnab240/caixa.rb +16 -62
  23. data/lib/br_boleto/remessa/cnab240/helper/header_arquivo.rb +7 -7
  24. data/lib/br_boleto/remessa/cnab240/helper/header_lote.rb +6 -6
  25. data/lib/br_boleto/remessa/cnab240/helper/segmento_p.rb +22 -22
  26. data/lib/br_boleto/remessa/cnab240/helper/segmento_q.rb +16 -16
  27. data/lib/br_boleto/remessa/cnab240/helper/segmento_r.rb +3 -3
  28. data/lib/br_boleto/remessa/cnab240/helper/segmento_s.rb +3 -3
  29. data/lib/br_boleto/remessa/cnab240/helper/trailer_arquivo.rb +3 -3
  30. data/lib/br_boleto/remessa/cnab240/helper/trailer_lote.rb +3 -3
  31. data/lib/br_boleto/remessa/cnab240/sicoob.rb +36 -73
  32. data/lib/br_boleto/remessa/cnab400/base.rb +95 -0
  33. data/lib/br_boleto/remessa/cnab400/helper/detalhe.rb +136 -0
  34. data/lib/br_boleto/remessa/cnab400/helper/header.rb +114 -0
  35. data/lib/br_boleto/remessa/cnab400/helper/trailer.rb +50 -0
  36. data/lib/br_boleto/remessa/cnab400/sicoob.rb +249 -0
  37. data/lib/br_boleto/remessa/lote.rb +1 -23
  38. data/lib/br_boleto/remessa/pagamento.rb +188 -51
  39. data/lib/br_boleto/retorno/base.rb +9 -0
  40. data/lib/br_boleto/retorno/cnab240/base.rb +2 -10
  41. data/lib/br_boleto/retorno/cnab400/base.rb +48 -0
  42. data/lib/br_boleto/retorno/cnab400/sicoob.rb +42 -0
  43. data/lib/br_boleto/retorno/pagamento.rb +12 -6
  44. data/lib/br_boleto/string_methods.rb +8 -2
  45. data/lib/br_boleto/validations.rb +19 -0
  46. data/lib/br_boleto/version.rb +3 -3
  47. data/lib/br_boleto.rb +38 -8
  48. data/lib/config/locales/br-boleto-en.yml +89 -0
  49. data/lib/config/locales/br-boleto-pt-BR.yml +89 -0
  50. data/test/br_boleto/association/have_conta_test.rb +319 -0
  51. data/test/br_boleto/association/have_pagador_test.rb +110 -0
  52. data/test/br_boleto/association/have_pagamentos_test.rb +113 -0
  53. data/test/br_boleto/boleto/base_test.rb +127 -201
  54. data/test/br_boleto/boleto/caixa_test.rb +58 -72
  55. data/test/br_boleto/boleto/sicoob_test.rb +88 -147
  56. data/test/br_boleto/conta/base_test.rb +490 -0
  57. data/test/br_boleto/conta/caixa_test.rb +154 -0
  58. data/test/br_boleto/conta/sicoob_test.rb +144 -0
  59. data/test/br_boleto/helper/number_test.rb +29 -0
  60. data/test/br_boleto/pagador_test.rb +158 -0
  61. data/test/br_boleto/remessa/base_test.rb +37 -62
  62. data/test/br_boleto/remessa/cnab240/base_test.rb +75 -95
  63. data/test/br_boleto/remessa/cnab240/caixa_test.rb +61 -96
  64. data/test/br_boleto/remessa/cnab240/helper/header_arquivo_test.rb +11 -11
  65. data/test/br_boleto/remessa/cnab240/helper/header_lote_test.rb +8 -8
  66. data/test/br_boleto/remessa/cnab240/helper/segmento_p_test.rb +17 -15
  67. data/test/br_boleto/remessa/cnab240/helper/segmento_q_test.rb +13 -13
  68. data/test/br_boleto/remessa/cnab240/helper/segmento_r_test.rb +2 -2
  69. data/test/br_boleto/remessa/cnab240/helper/segmento_s_test.rb +3 -3
  70. data/test/br_boleto/remessa/cnab240/helper/trailer_arquivo_test.rb +1 -1
  71. data/test/br_boleto/remessa/cnab240/helper/trailer_lote_test.rb +1 -1
  72. data/test/br_boleto/remessa/cnab240/sicoob_test.rb +136 -131
  73. data/test/br_boleto/remessa/cnab400/base_test.rb +263 -0
  74. data/test/br_boleto/remessa/cnab400/sicoob_test.rb +179 -0
  75. data/test/br_boleto/remessa/lote_test.rb +2 -41
  76. data/test/br_boleto/remessa/pagamento_test.rb +186 -188
  77. data/test/br_boleto/retorno/base_test.rb +0 -1
  78. data/test/br_boleto/retorno/cnab240/base_test.rb +12 -11
  79. data/test/br_boleto/retorno/cnab240/caixa_test.rb +11 -11
  80. data/test/br_boleto/retorno/cnab240/sicoob_test.rb +11 -11
  81. data/test/br_boleto/retorno/cnab400/sicoob_test.rb +227 -0
  82. data/test/br_boleto/retorno/pagamento_test.rb +6 -6
  83. data/test/factories/boleto/base.rb +9 -7
  84. data/test/factories/boleto/boleto_caixa.rb +2 -9
  85. data/test/factories/boleto/boleto_sicoob.rb +10 -8
  86. data/test/factories/conta/base.rb +10 -0
  87. data/test/factories/conta/caixa.rb +15 -0
  88. data/test/factories/conta/sicoob.rb +16 -0
  89. data/test/factories/pagador.rb +15 -0
  90. data/test/factories/remessa/base.rb +0 -6
  91. data/test/factories/remessa/cnab240/base.rb +0 -10
  92. data/test/factories/remessa/cnab240/caixa.rb +1 -6
  93. data/test/factories/remessa/cnab240/sicoob.rb +1 -10
  94. data/test/factories/remessa/cnab400/base.rb +8 -0
  95. data/test/factories/remessa/cnab400/sicoob.rb +8 -0
  96. data/test/factories/remessa/pagamento.rb +8 -7
  97. data/test/fixtures/remessa/cnab240/sicoob.rem +8 -0
  98. data/test/{files → fixtures}/retorno/cnab240/caixa.ret +0 -0
  99. data/test/{files → fixtures}/retorno/cnab240/padrao240.ret +0 -0
  100. data/test/fixtures/retorno/cnab400/sicoob.ret +7 -0
  101. data/test/inheritance/boleto_test.rb +4 -1
  102. data/test/inheritance/sicoob_test.rb +23 -7
  103. data/test/test_helper.rb +70 -0
  104. metadata +63 -6
@@ -4,60 +4,65 @@ require 'test_helper'
4
4
  describe BrBoleto::Boleto::Caixa do
5
5
  subject { FactoryGirl.build(:boleto_caixa) }
6
6
 
7
- describe "#default_values" do
8
- it "deve setar um valor padrão de local_pagamento com o valor descrito na documentação" do
9
- BrBoleto::Boleto::Caixa.new.local_pagamento.must_equal 'PREFERENCIALMENTE NAS CASAS LOTÉRICAS ATÉ O VALOR LIMITE'
10
- end
11
- end
12
-
13
- describe "validations" do
14
- it { must validate_presence_of(:agencia) }
15
- it { must validate_presence_of(:codigo_cedente) }
16
-
17
- it { must validate_length_of(:agencia ).is_at_most(4) }
18
- it { must validate_length_of(:codigo_cedente ).is_at_most(6) }
19
- it { must validate_length_of(:numero_documento).is_at_most(15) }
20
-
21
- it { must validate_inclusion_of(:carteira).in_array(%w(14 24)) }
22
-
23
- it { must validate_numericality_of(:valor_documento).is_less_than_or_equal_to(99999999.99) }
24
- end
7
+ context "on validations" do
8
+ it { must validate_length_of(:numero_documento).is_at_most(15).with_message(:custom_length_maximum) }
9
+
10
+ context '#conta.carteira' do
11
+ it { subject.valid_carteira_inclusion.must_equal ['14','24'] }
12
+ it 'carteira deve ter 2 digitos' do
13
+ subject.valid_carteira_length.must_equal 2
14
+ subject.conta.carteira = '1'
15
+ conta_must_be_msg_error(:carteira, :custom_length_is, {count: 2})
16
+ subject.conta.carteira = '123'
17
+ conta_must_be_msg_error(:carteira, :custom_length_is, {count: 2})
18
+ subject.conta.carteira = '12'
19
+ conta_wont_be_msg_error(:carteira, :custom_length_is, {count: 2})
20
+ end
21
+ it "validação da carteira da conta" do
22
+ subject.conta.carteira = '5'
23
+ conta_must_be_msg_error(:carteira, :custom_inclusion, {list: '14, 24'})
24
+ subject.conta.carteira = '24'
25
+ conta_wont_be_msg_error(:carteira, :custom_inclusion, {list: '14, 24'})
26
+ end
27
+ end
25
28
 
26
- describe "#codigo_banco - banco da caixa deve ser 104" do
27
- it{ subject.codigo_banco.must_equal '104' }
28
- end
29
+ describe '#conta.convenio / codigo_cedente' do
30
+ it { subject.valid_convenio_maximum.must_equal 6 }
31
+ it { subject.valid_convenio_required.must_equal true }
32
+
33
+ it "validação obrigatoriedade do codigo_cedente da conta" do
34
+ subject.conta.codigo_cedente = ''
35
+ conta_must_be_msg_error(:convenio, :blank)
36
+ subject.conta.codigo_cedente = '123456'
37
+ conta_wont_be_msg_error(:convenio, :blank)
38
+ end
39
+ it "validação tamaho maximo do codigo_cedente da conta" do
40
+ subject.conta.codigo_cedente = '1234567'
41
+ conta_must_be_msg_error(:convenio, :custom_length_maximum, {count: 6})
42
+ subject.conta.codigo_cedente = '123456'
43
+ conta_wont_be_msg_error(:convenio, :custom_length_maximum, {count: 6})
44
+ end
45
+ end
29
46
 
30
- describe "#digito_codigo_banco - deve ser zero" do
31
- it { subject.digito_codigo_banco.must_equal '0' }
32
- end
47
+ private
33
48
 
34
- describe "#agencia_codigo_cedente" do
35
- it "deve retornar no formato: agencia / codigo_cedente-dv_codigo_cedente" do
36
- subject.assign_attributes(agencia: '557', codigo_cedente: '35412')
37
- subject.expects(:digito_verificador_codigo_cedente).returns('7')
38
- subject.agencia_codigo_cedente.must_equal "0557 / 035412-7"
49
+ def conta_must_be_msg_error(attr_validation, msg_key, options_msg={})
50
+ must_be_message_error(:base, "#{BrBoleto::Conta::Sicoob.human_attribute_name(attr_validation)} #{get_message(msg_key, options_msg)}")
51
+ end
52
+ def conta_wont_be_msg_error(attr_validation, msg_key, options_msg={})
53
+ wont_be_message_error(:base, "#{BrBoleto::Conta::Sicoob.human_attribute_name(attr_validation)} #{get_message(msg_key, options_msg)}")
54
+ end
39
55
  end
40
- end
41
56
 
42
- describe "#digito_verificador_codigo_cedente" do
43
- it "deve utilizar o calculo de Modulo11FatorDe2a9RestoZero para calcular o DV" do
44
- subject.codigo_cedente = '999999'
45
- BrBoleto::Calculos::Modulo11FatorDe2a9RestoZero.expects(:new).with('999999').returns('5')
46
-
47
- subject.digito_verificador_codigo_cedente.must_equal '5'
48
- end
49
-
50
- describe "#digito_verificador_codigo_beneficiario" do
51
- it "deve retornar o mesmo valor de #digito_verificador_codigo_cedente" do
52
- subject.expects(:digito_verificador_codigo_cedente).returns('valor')
53
- subject.digito_verificador_codigo_beneficiario.must_equal 'valor'
54
- end
57
+ describe "#default_values" do
58
+ it "deve setar um valor padrão de local_pagamento com o valor descrito na documentação" do
59
+ BrBoleto::Boleto::Caixa.new.local_pagamento.must_equal 'PREFERENCIALMENTE NAS CASAS LOTÉRICAS ATÉ O VALOR LIMITE'
55
60
  end
56
61
  end
57
62
 
58
63
  describe "#digito_verificador_nosso_numero " do
59
64
  it "deve utilizar o Modulo11FatorDe2a9RestoZero para calcular o digito passando a carteira e numero_documento" do
60
- subject.assign_attributes(carteira: '14', numero_documento: '77445')
65
+ subject.assign_attributes(conta: {carteira: '14'}, numero_documento: '77445')
61
66
  BrBoleto::Calculos::Modulo11FatorDe2a9RestoZero.expects(:new).with("14000000000077445").returns('8')
62
67
 
63
68
  subject.digito_verificador_nosso_numero.must_equal '8'
@@ -67,7 +72,7 @@ describe BrBoleto::Boleto::Caixa do
67
72
  describe "#nosso_numero " do
68
73
  it "deve utilizar a carteira, numero_documento e o DV do nosso_numero" do
69
74
  subject.expects(:digito_verificador_nosso_numero).returns('7')
70
- subject.assign_attributes(carteira: '24', numero_documento: '789')
75
+ subject.assign_attributes(conta: {carteira: '24'}, numero_documento: '789')
71
76
  subject.nosso_numero.must_equal('24000000000000789-7')
72
77
  end
73
78
  end
@@ -95,50 +100,31 @@ describe BrBoleto::Boleto::Caixa do
95
100
 
96
101
  describe "#tipo_cobranca" do
97
102
  it "deve pegar o primeiro caracter da carteira se houver valor na carteira" do
98
- subject.carteira = 'X7'
103
+ subject.conta.carteira = 'X7'
99
104
  subject.tipo_cobranca.must_equal 'X'
100
- subject.carteira = 'A7'
105
+ subject.conta.carteira = 'A7'
101
106
  subject.tipo_cobranca.must_equal 'A'
102
107
  end
103
108
  it "se carteira for nil não deve dar erro" do
104
- subject.carteira = nil
109
+ subject.conta.carteira = nil
105
110
  subject.tipo_cobranca.must_be_nil
106
111
  end
107
-
108
- describe "#modalidade_cobranca" do
109
- it "deve simplemente pegar o valor do tipo_cobranca" do
110
- subject.expects(:tipo_cobranca).returns(:valor)
111
- subject.modalidade_cobranca.must_equal :valor
112
- end
113
- end
114
112
  end
115
113
 
116
114
  describe "#identificador_de_emissao" do
117
115
  it "deve retornar o ultimo caractere da carteira" do
118
- subject.carteira = 'X71'
116
+ subject.conta.carteira = 'X71'
119
117
  subject.identificador_de_emissao.must_equal '1'
120
- subject.carteira = 'A2'
118
+ subject.conta.carteira = 'A2'
121
119
  subject.identificador_de_emissao.must_equal '2'
122
120
  end
123
121
  end
124
122
 
125
- describe "#carteira_formatada - Conforme o manual da caixa deve retornar RG para carteira com registro e SR para carteira sem registro" do
126
- it "para a carteira 14 deve retornar RG" do
127
- subject.carteira = '14'
128
- subject.carteira_formatada.must_equal 'RG'
129
- end
130
- it "para a carteira 24 deve retornar SR" do
131
- subject.carteira = '24'
132
- subject.carteira_formatada.must_equal 'SR'
133
- end
134
- end
135
-
136
-
137
123
  describe "#composicao_codigo_barras" do
138
124
  before do
139
- subject.codigo_beneficiario = '123456'
140
- subject.agencia = '2391'
141
- subject.carteira = '14'
125
+ subject.conta.codigo_beneficiario = '123456'
126
+ subject.conta.agencia = '2391'
127
+ subject.conta.carteira = '14'
142
128
  subject.numero_documento = 'ABCDEFGHIJKLMNO'
143
129
  end
144
130
 
@@ -2,100 +2,72 @@
2
2
  require 'test_helper'
3
3
 
4
4
  describe BrBoleto::Boleto::Sicoob do
5
- subject { FactoryGirl.build(:boleto_sicoob) }
6
- context "on validations" do
7
- it { must validate_length_of(:agencia).is_at_most(4) }
5
+ subject { FactoryGirl.build(:boleto_sicoob, conta: conta) }
6
+ let(:conta) { FactoryGirl.build(:conta_sicoob) }
8
7
 
9
- it { must validate_length_of(:codigo_cedente).is_at_most(7) }
10
-
11
- it { must validate_length_of(:numero_documento).is_at_most(7) }
12
-
13
- it { must validate_inclusion_of(:carteira).in_array(%w(1 3)) }
14
- it { wont allow_value(9).for(:carteira) }
15
- it { wont allow_value(6).for(:carteira) }
16
-
17
- it { must validate_inclusion_of(:modalidade_cobranca).in_array(%w(1 2 3)) }
18
- it { wont allow_value(4).for(:modalidade_cobranca) }
19
- it { wont allow_value(5).for(:modalidade_cobranca) }
20
-
21
- it { must validate_numericality_of(:valor_documento).is_less_than_or_equal_to(99999999.99) }
22
-
23
- end
24
-
25
- describe "#default_values" do
26
- it "local_pagamento deve ter o valor padrão conforme a documentação" do
27
- BrBoleto::Boleto::Sicoob.new.local_pagamento.must_equal 'PREFERENCIALMENTE COOPERATIVAS DA REDE SICOOB'
8
+ context "on validations" do
9
+ it { must validate_length_of(:numero_documento).is_at_most(7).with_message(:custom_length_maximum) }
10
+ context '#conta.modalidade' do
11
+ it { subject.valid_modalidade_inclusion.must_equal ['01','02','03'] }
12
+ it "validação da modalidade da conta" do
13
+ subject.conta.modalidade = '04'
14
+ conta_must_be_msg_error(:modalidade, :custom_inclusion, {list: '01, 02, 03'})
15
+ subject.conta.modalidade = '01'
16
+ conta_wont_be_msg_error(:modalidade, :custom_inclusion, {list: '01, 02, 03'})
17
+ end
28
18
  end
29
- end
30
19
 
31
- context "#agencia" do
32
- it "get value when have a value" do
33
- subject.agencia = '215'
34
- subject.agencia.must_equal '0215'
35
- end
36
-
37
- it "returns nil when is nil" do
38
- subject.agencia = nil
39
- subject.agencia.must_be_nil
20
+ context '#conta.carteira' do
21
+ it { subject.valid_carteira_inclusion.must_equal ['1','3'] }
22
+ it "validação da carteira da conta" do
23
+ subject.conta.carteira = '4'
24
+ conta_must_be_msg_error(:carteira, :custom_inclusion, {list: '1, 3'})
25
+ subject.conta.carteira = '1'
26
+ conta_wont_be_msg_error(:carteira, :custom_inclusion, {list: '1, 3'})
27
+ end
40
28
  end
41
- end
42
29
 
43
- context "#conta_corrente" do
44
- it "when have a value" do
45
- subject.codigo_cedente = '9201'
46
- subject.codigo_cedente.must_equal '0009201'
30
+ describe '#conta.convenio / codigo_cedente' do
31
+ it { subject.valid_convenio_maximum.must_equal 6 }
32
+ it { subject.valid_convenio_required.must_equal true }
33
+
34
+ it "validação obrigatoriedade do codigo_cedente da conta" do
35
+ subject.conta.codigo_cedente = ''
36
+ conta_must_be_msg_error(:convenio, :blank)
37
+ subject.conta.codigo_cedente = '123456'
38
+ conta_wont_be_msg_error(:convenio, :blank)
39
+ end
40
+ it "validação tamaho maximo do codigo_cedente da conta" do
41
+ subject.conta.codigo_cedente = '1234567'
42
+ conta_must_be_msg_error(:convenio, :custom_length_maximum, {count: 6})
43
+ subject.conta.codigo_cedente = '123456'
44
+ conta_wont_be_msg_error(:convenio, :custom_length_maximum, {count: 6})
45
+ end
47
46
  end
48
47
 
49
- it "when is nil" do
50
- subject.codigo_cedente = nil
51
- subject.codigo_cedente.must_be_nil
52
- end
53
- end
48
+ private
54
49
 
55
- context "#numero_documento" do
56
- it "when have a value" do
57
- subject.numero_documento = '1'
58
- subject.numero_documento.must_equal '0000001'
50
+ def conta_must_be_msg_error(attr_validation, msg_key, options_msg={})
51
+ must_be_message_error(:base, "#{BrBoleto::Conta::Sicoob.human_attribute_name(attr_validation)} #{get_message(msg_key, options_msg)}")
59
52
  end
60
-
61
- it "when is nil" do
62
- subject.numero_documento = nil
63
- subject.numero_documento.must_be_nil
53
+ def conta_wont_be_msg_error(attr_validation, msg_key, options_msg={})
54
+ wont_be_message_error(:base, "#{BrBoleto::Conta::Sicoob.human_attribute_name(attr_validation)} #{get_message(msg_key, options_msg)}")
64
55
  end
65
56
  end
66
- describe "#carteira" do
67
- it "when have a value" do
68
- subject.carteira = '1'
69
-
70
- subject.carteira.must_equal '1'
71
- end
72
57
 
73
- it "when is nil" do
74
- subject.carteira = nil
75
- subject.carteira.must_be_nil
58
+ describe "#default_values" do
59
+ it "local_pagamento deve ter o valor padrão conforme a documentação" do
60
+ BrBoleto::Boleto::Sicoob.new.local_pagamento.must_equal 'PREFERENCIALMENTE COOPERATIVAS DA REDE SICOOB'
76
61
  end
77
62
  end
78
63
 
79
- describe "#codigo_banco" do
80
- it{ subject.codigo_banco.must_equal '756' }
81
- end
82
-
83
- describe "#digito_codigo_banco" do
84
- it { subject.digito_codigo_banco.must_equal '0' }
85
- end
86
-
87
- describe "#agencia_codigo_beneficiario" do
88
- subject { FactoryGirl.build(:boleto_sicoob, agencia: 48, codigo_cedente: '7368') }
89
-
90
- it { subject.agencia_codigo_cedente.must_equal '0048 / 0007368' }
91
- end
92
-
93
64
  describe "#digito_verificador_nosso_numero" do
94
65
  it "deve calcular pelo Modulo11Fator3197" do
95
- subject.agencia = 1
96
- subject.codigo_cedente = 33
66
+ subject.conta.agencia = 1
67
+ subject.conta.codigo_cedente = 33
68
+ subject.conta.codigo_cedente_dv = 4
97
69
  subject.numero_documento = 111
98
- BrBoleto::Calculos::Modulo11Fator3197.expects(:new).with("000100000000330000111").returns("meu_resultado")
70
+ BrBoleto::Calculos::Modulo11Fator3197.expects(:new).with("000100000003340000111").returns("meu_resultado")
99
71
  subject.digito_verificador_nosso_numero.must_equal "meu_resultado"
100
72
  end
101
73
  end
@@ -112,92 +84,61 @@ describe BrBoleto::Boleto::Sicoob do
112
84
 
113
85
  describe "#codigo_de_barras_do_banco" do
114
86
  subject do
115
- FactoryGirl.build(:boleto_sicoob,
116
- carteira: '1',
117
- agencia: '78',
118
- codigo_cedente: '66',
119
- # modalidade_cobranca: '1',
120
- # parcelas: '1'
87
+ FactoryGirl.build(:boleto_sicoob, conta: {
88
+ carteira: '1',
89
+ agencia: '78',
90
+ codigo_cedente: '668',
91
+ codigo_cedente_dv: '3',
92
+ modalidade: '02'
93
+ },
94
+ parcelas: '3'
121
95
  )
122
96
  end
123
- it "name" do
124
- subject.stubs(:nosso_numero).returns('1234567-8')
125
- subject.codigo_de_barras_do_banco.must_equal "1007801000006612345678001"
126
- end
127
- end
97
+ it "deve montar o codigo corretamente com as informações" do
98
+ subject.stubs(:nosso_numero).returns('0234567-8')
128
99
 
129
- describe "#modalidade_cobranca" do
130
- it "tem um valor padrão que é 01" do
131
- subject.class.new().modalidade_cobranca.must_equal "01"
132
- end
133
- it "posso modificar a modalidade de cobranca" do
134
- subject.modalidade_cobranca = 2
135
- subject.modalidade_cobranca.must_equal "02"
136
- end
137
- end
100
+ result = subject.codigo_de_barras_do_banco
101
+ result.size.must_equal 25
138
102
 
139
- describe "#parcelas" do
140
- it "tem um valor padrão que é 001" do
141
- subject.class.new().parcelas.must_equal "001"
142
- end
143
- it "deve permitir a modificação do número de parcelas" do
144
- subject.parcelas = 2
145
- subject.parcelas.must_equal "002"
103
+
104
+ result[0].must_equal '1' # Carteira
105
+ result[1..4].must_equal '0078' # Agencia
106
+ result[5..6].must_equal '02' # modalidade
107
+ result[7..13].must_equal '0006683' # codigo cedente
108
+ result[14..21].must_equal '02345678' # Nosso numero
109
+ result[22..24].must_equal '003' # Parcela
146
110
  end
147
111
  end
148
-
112
+
149
113
  describe "#codigo_de_barras" do
150
114
  subject do
151
115
  FactoryGirl.build(:boleto_sicoob) do |sicoob|
152
- sicoob.agencia = 3069
153
- sicoob.codigo_cedente = 828_190 # Para o sicoob é o código do cliente
154
- sicoob.numero_documento = 100_10
155
- sicoob.carteira = 1
156
- sicoob.valor_documento = 93015.78
157
- sicoob.data_vencimento = Date.parse('2020-02-17')
116
+ sicoob.conta.agencia = 3069
117
+ sicoob.conta.codigo_cedente = 828_19 # Para o sicoob é o código do cliente
118
+ sicoob.conta.codigo_cedente_dv = '0' # Para o sicoob é o código do cliente
119
+ sicoob.conta.carteira = '1'
120
+ sicoob.conta.modalidade = '01'
121
+ sicoob.numero_documento = 100_10
122
+ sicoob.valor_documento = 93015.78
123
+ sicoob.data_vencimento = Date.parse('2020-02-17')
158
124
  end
159
125
  end
160
126
 
161
127
  it { subject.codigo_de_barras.must_equal '75699816800093015781306901082819000100107001' }
162
128
  it { subject.linha_digitavel.must_equal '75691.30698 01082.819002 01001.070018 9 81680009301578' }
163
- end
164
-
165
- describe "#carteiras_suportadas" do
166
- it { subject.class.carteiras_suportadas.must_equal ["1","3"] }
167
- end
168
129
 
169
- describe "#tipo_cobranca_formatada" do
170
- it "deve ser :com_registro se modalidade_cobranca for 01" do
171
- subject.modalidade_cobranca = '01'
172
- subject.tipo_cobranca_formatada.must_equal :com_registro
173
- end
174
- it "deve ser :com_registro se modalidade_cobranca for 1" do
175
- subject.modalidade_cobranca = 1
176
- subject.tipo_cobranca_formatada.must_equal :com_registro
177
- end
178
- it "deve ser :sem_registro se modalidade_cobranca for 02" do
179
- subject.modalidade_cobranca = '02'
180
- subject.tipo_cobranca_formatada.must_equal :sem_registro
181
- end
182
- it "deve ser :sem_registro se modalidade_cobranca for 2" do
183
- subject.modalidade_cobranca = 2
184
- subject.tipo_cobranca_formatada.must_equal :sem_registro
185
- end
186
- it "deve ser :caucionada se modalidade_cobranca for 03" do
187
- subject.modalidade_cobranca = '03'
188
- subject.tipo_cobranca_formatada.must_equal :caucionada
189
- end
190
- it "deve ser :caucionada se modalidade_cobranca for 3" do
191
- subject.modalidade_cobranca = 3
192
- subject.tipo_cobranca_formatada.must_equal :caucionada
193
- end
194
- it "deve ser nil se modalidade_cobranca for outro numero" do
195
- subject.modalidade_cobranca = 4
196
- subject.tipo_cobranca_formatada.must_be_nil
197
- end
198
- it "deve ser com_registro se modalidade_cobranca for nil, pois o defaul de modalidade_cobranca é 01" do
199
- subject.modalidade_cobranca = nil
200
- subject.tipo_cobranca_formatada.must_equal :com_registro
130
+ it "codigo de barras de um boleto de exemplo" do
131
+ subject.conta.agencia = 3069
132
+ subject.conta.codigo_cedente = 82819 # Para o sicoob é o código do cliente
133
+ subject.conta.codigo_cedente_dv = 0 # Para o sicoob é o código do cliente
134
+ subject.conta.carteira = '1'
135
+ subject.conta.modalidade = '01'
136
+ subject.numero_documento = 15_679
137
+ subject.valor_documento = 408.50
138
+ subject.data_vencimento = Date.parse('2016-09-01')
139
+
140
+ subject.linha_digitavel.must_equal '75691.30698 01082.819002 01567.900012 4 69040000040850'
141
+ subject.codigo_de_barras.must_equal '75694690400000408501306901082819000156790001'
201
142
  end
202
143
  end
203
144
  end