brcobranca 5.0.0 → 5.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Gemfile +3 -2
  4. data/Gemfile.lock +13 -9
  5. data/README.md +5 -1
  6. data/brcobranca.gemspec +2 -0
  7. data/lib/brcobranca/arquivos/logos/sicoob.eps +209 -0
  8. data/lib/brcobranca/boleto/bradesco.rb +20 -0
  9. data/lib/brcobranca/boleto/sicoob.rb +80 -0
  10. data/lib/brcobranca/remessa/base.rb +1 -1
  11. data/lib/brcobranca/remessa/cnab240/banco_brasil.rb +7 -2
  12. data/lib/brcobranca/remessa/cnab240/base.rb +133 -134
  13. data/lib/brcobranca/remessa/cnab240/caixa.rb +6 -1
  14. data/lib/brcobranca/remessa/cnab240/sicoob.rb +128 -0
  15. data/lib/brcobranca/remessa/cnab400/base.rb +5 -5
  16. data/lib/brcobranca/remessa/cnab400/bradesco.rb +5 -3
  17. data/lib/brcobranca/remessa/cnab400/citibank.rb +140 -0
  18. data/lib/brcobranca/remessa/cnab400/itau.rb +4 -11
  19. data/lib/brcobranca/remessa/pagamento.rb +39 -5
  20. data/lib/brcobranca/retorno/base.rb +1 -0
  21. data/lib/brcobranca/retorno/cnab400/base.rb +40 -0
  22. data/lib/brcobranca/retorno/cnab400/bradesco.rb +117 -0
  23. data/lib/brcobranca/retorno/cnab400/itau.rb +136 -0
  24. data/lib/brcobranca/retorno/retorno_cnab400.rb +6 -1
  25. data/lib/brcobranca/util/empresa.rb +29 -0
  26. data/lib/brcobranca/version.rb +1 -1
  27. data/lib/brcobranca.rb +19 -5
  28. data/spec/arquivos/CNAB400BRADESCO.RET +8 -0
  29. data/spec/arquivos/CNAB400ITAU.RET +54 -0
  30. data/spec/brcobranca/base_spec.rb +175 -179
  31. data/spec/brcobranca/{banco_bradesco_spec.rb → boleto/banco_bradesco_spec.rb} +80 -53
  32. data/spec/brcobranca/{banco_brasil_spec.rb → boleto/banco_brasil_spec.rb} +2 -2
  33. data/spec/brcobranca/{banco_caixa_spec.rb → boleto/banco_caixa_spec.rb} +1 -1
  34. data/spec/brcobranca/{banco_hsbc_spec.rb → boleto/banco_hsbc_spec.rb} +2 -2
  35. data/spec/brcobranca/{banco_itau_spec.rb → boleto/banco_itau_spec.rb} +2 -2
  36. data/spec/brcobranca/{banco_santander_spec.rb → boleto/banco_santander_spec.rb} +2 -2
  37. data/spec/brcobranca/boleto/banco_sicoob_spec.rb +132 -0
  38. data/spec/brcobranca/{banco_sicredi_spec.rb → boleto/banco_sicredi_spec.rb} +2 -2
  39. data/spec/brcobranca/boletos_em_lote_spec.rb +2 -2
  40. data/spec/brcobranca/core_ext_spec.rb +198 -199
  41. data/spec/brcobranca/currency_spec.rb +67 -71
  42. data/spec/brcobranca/remessa/base_spec.rb +1 -17
  43. data/spec/brcobranca/remessa/cnab240/banco_brasil_spec.rb +22 -13
  44. data/spec/brcobranca/remessa/cnab240/base_spec.rb +28 -27
  45. data/spec/brcobranca/remessa/cnab240/caixa_spec.rb +13 -4
  46. data/spec/brcobranca/remessa/cnab240/sicoob_spec.rb +155 -0
  47. data/spec/brcobranca/remessa/cnab400/base_spec.rb +1 -17
  48. data/spec/brcobranca/remessa/cnab400/bradesco_spec.rb +15 -2
  49. data/spec/brcobranca/remessa/cnab400/citibank_spec.rb +117 -0
  50. data/spec/brcobranca/remessa/cnab400/itau_spec.rb +15 -10
  51. data/spec/brcobranca/remessa/pagamento_spec.rb +6 -8
  52. data/spec/brcobranca/retorno/cnab400/base_spec.rb +35 -0
  53. data/spec/brcobranca/retorno/cnab400/bradesco_spec.rb +55 -0
  54. data/spec/brcobranca/retorno/cnab400/itau_spec.rb +55 -0
  55. data/spec/brcobranca/{retorno_cbr643_spec.rb → retorno/retorno_cbr643_spec.rb} +3 -3
  56. data/spec/brcobranca/{retorno_cnab400_spec.rb → retorno/retorno_cnab400_spec.rb} +3 -3
  57. data/spec/brcobranca/{retorno_cnab_240_spec.rb → retorno/retorno_cnab_240_spec.rb} +3 -3
  58. data/spec/brcobranca/rghost_spec.rb +2 -2
  59. data/spec/brcobranca/util/empresa_spec.rb +35 -0
  60. data/spec/brcobranca_spec.rb +25 -10
  61. data/spec/fixtures/remessa/.keep +0 -0
  62. data/spec/fixtures/remessa/remessa-bancoob.rem +6 -0
  63. data/spec/spec_helper.rb +23 -0
  64. data/spec/support/remessa_helpers.rb +12 -0
  65. data/spec/{shared_examples → support/shared_examples}/cnab240.rb +17 -15
  66. data/spec/{shared_examples → support/shared_examples}/cnab400.rb +11 -3
  67. metadata +72 -26
@@ -1,19 +1,18 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  require 'spec_helper'
3
- require 'shared_examples/cnab240'
4
3
 
5
- describe Brcobranca::Remessa::Cnab240::BancoBrasil do
4
+ RSpec.describe Brcobranca::Remessa::Cnab240::BancoBrasil do
6
5
  let(:pagamento) do
7
6
  Brcobranca::Remessa::Pagamento.new(valor: 199.9,
8
- data_vencimento: Date.today,
9
- nosso_numero: 123,
10
- documento_sacado: '12345678901',
11
- nome_sacado: 'nome',
12
- endereco_sacado: 'endereco',
13
- bairro_sacado: 'bairro',
14
- cep_sacado: '12345678',
15
- cidade_sacado: 'cidade',
16
- uf_sacado: 'SP')
7
+ data_vencimento: Date.today,
8
+ nosso_numero: 123,
9
+ documento_sacado: '12345678901',
10
+ nome_sacado: 'nome',
11
+ endereco_sacado: 'endereco',
12
+ bairro_sacado: 'bairro',
13
+ cep_sacado: '12345678',
14
+ cidade_sacado: 'cidade',
15
+ uf_sacado: 'SP')
17
16
  end
18
17
  let(:params) do
19
18
  { empresa_mae: 'teste',
@@ -57,6 +56,12 @@ describe Brcobranca::Remessa::Cnab240::BancoBrasil do
57
56
  end
58
57
 
59
58
  context '@convenio' do
59
+ it 'deve ser invalido se nao possuir o convenio' do
60
+ objeto = subject.class.new(params.merge!(convenio: nil))
61
+ expect(objeto.invalid?).to be true
62
+ expect(objeto.errors.full_messages).to include('Convenio não pode estar em branco.')
63
+ end
64
+
60
65
  it 'deve ser invalido se o convenio nao tiver entre 4 e 7 digitos' do
61
66
  banco_brasil.convenio = '12345678'
62
67
  expect(banco_brasil.invalid?).to be true
@@ -92,8 +97,12 @@ describe Brcobranca::Remessa::Cnab240::BancoBrasil do
92
97
  expect(nome_banco[0..19]).to eq 'BANCO DO BRASIL S.A.'
93
98
  end
94
99
 
95
- it 'versao layout deve ser zerada' do
96
- expect(banco_brasil.versao_layout).to eq '000'
100
+ it 'versao do layout do arquivo deve ser 083' do
101
+ expect(banco_brasil.versao_layout_arquivo).to eq '083'
102
+ end
103
+
104
+ it 'versao do layout do lote deve ser 040' do
105
+ expect(banco_brasil.versao_layout_lote).to eq '042'
97
106
  end
98
107
 
99
108
  it 'deve calcular o digito da agencia' do
@@ -1,18 +1,18 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  require 'spec_helper'
3
3
 
4
- describe Brcobranca::Remessa::Cnab240::Base do
4
+ RSpec.describe Brcobranca::Remessa::Cnab240::Base do
5
5
  let(:pagamento) do
6
6
  Brcobranca::Remessa::Pagamento.new(valor: 199.9,
7
- data_vencimento: Date.today,
8
- nosso_numero: 123,
9
- documento_sacado: '12345678901',
10
- nome_sacado: 'nome',
11
- endereco_sacado: 'endereco',
12
- bairro_sacado: 'bairro',
13
- cep_sacado: '12345678',
14
- cidade_sacado: 'cidade',
15
- uf_sacado: 'SP')
7
+ data_vencimento: Date.today,
8
+ nosso_numero: 123,
9
+ documento_sacado: '12345678901',
10
+ nome_sacado: 'nome',
11
+ endereco_sacado: 'endereco',
12
+ bairro_sacado: 'bairro',
13
+ cep_sacado: '12345678',
14
+ cidade_sacado: 'cidade',
15
+ uf_sacado: 'SP')
16
16
  end
17
17
  let(:params) do
18
18
  { empresa_mae: 'teste',
@@ -25,19 +25,27 @@ describe Brcobranca::Remessa::Cnab240::Base do
25
25
  let(:cnab240) { subject.class.new(params) }
26
26
 
27
27
  context 'validacoes' do
28
- context '@documento_cedente' do
29
- it 'deve ser invalido se nao possuir o documento do cedente' do
30
- objeto = subject.class.new(params.merge!(documento_cedente: nil))
28
+ context '@agencia' do
29
+ it 'deve ser invalido se nao possuir uma agencia' do
30
+ objeto = subject.class.new(params.merge!(agencia: nil))
31
31
  expect(objeto.invalid?).to be true
32
- expect(objeto.errors.full_messages).to include('Documento cedente não pode estar em branco.')
32
+ expect(objeto.errors.full_messages).to include('Agencia não pode estar em branco.')
33
+ end
34
+ end
35
+
36
+ context '@conta_corrente' do
37
+ it 'deve ser invalido se nao possuir uma conta corrente' do
38
+ objeto = subject.class.new(params.merge!(conta_corrente: nil))
39
+ expect(objeto.invalid?).to be true
40
+ expect(objeto.errors.full_messages).to include('Conta corrente não pode estar em branco.')
33
41
  end
34
42
  end
35
43
 
36
- context '@convenio' do
37
- it 'deve ser invalido se nao possuir o convenio' do
38
- objeto = subject.class.new(params.merge!(convenio: nil))
44
+ context '@documento_cedente' do
45
+ it 'deve ser invalido se nao possuir o documento do cedente' do
46
+ objeto = subject.class.new(params.merge!(documento_cedente: nil))
39
47
  expect(objeto.invalid?).to be true
40
- expect(objeto.errors.full_messages).to include('Convenio não pode estar em branco.')
48
+ expect(objeto.errors.full_messages).to include('Documento cedente não pode estar em branco.')
41
49
  end
42
50
  end
43
51
 
@@ -66,18 +74,11 @@ describe Brcobranca::Remessa::Cnab240::Base do
66
74
  end
67
75
  end
68
76
 
69
- it 'deve retornar o tipo de inscricao' do
70
- # pessoa fisica
71
- expect(cnab240.tipo_inscricao).to eq '1'
72
- # pessoa juridica
73
- cnab240.documento_cedente = '1234567890101112'
74
- expect(cnab240.tipo_inscricao).to eq '2'
75
- end
76
-
77
77
  context 'sobrescrita dos metodos' do
78
78
  it 'mostrar aviso sobre sobrecarga de métodos padrões' do
79
79
  expect { cnab240.complemento_header }.to raise_error(Brcobranca::NaoImplementado, 'Sobreescreva este método na classe referente ao banco que você esta criando')
80
- expect { cnab240.versao_layout }.to raise_error(Brcobranca::NaoImplementado, 'Sobreescreva este método na classe referente ao banco que você esta criando')
80
+ expect { cnab240.versao_layout_arquivo }.to raise_error(Brcobranca::NaoImplementado, 'Sobreescreva este método na classe referente ao banco que você esta criando')
81
+ expect { cnab240.versao_layout_lote }.to raise_error(Brcobranca::NaoImplementado, 'Sobreescreva este método na classe referente ao banco que você esta criando')
81
82
  expect { cnab240.convenio_lote }.to raise_error(Brcobranca::NaoImplementado, 'Sobreescreva este método na classe referente ao banco que você esta criando')
82
83
  expect { cnab240.nome_banco }.to raise_error(Brcobranca::NaoImplementado, 'Sobreescreva este método na classe referente ao banco que você esta criando')
83
84
  expect { cnab240.cod_banco }.to raise_error(Brcobranca::NaoImplementado, 'Sobreescreva este método na classe referente ao banco que você esta criando')
@@ -1,8 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  require 'spec_helper'
3
- require 'shared_examples/cnab240'
4
3
 
5
- describe Brcobranca::Remessa::Cnab240::Caixa do
4
+ RSpec.describe Brcobranca::Remessa::Cnab240::Caixa do
6
5
  let(:pagamento) do
7
6
  Brcobranca::Remessa::Pagamento.new(valor: 199.9,
8
7
  data_vencimento: Date.today,
@@ -57,6 +56,12 @@ describe Brcobranca::Remessa::Cnab240::Caixa do
57
56
  end
58
57
 
59
58
  context '@convenio' do
59
+ it 'deve ser invalido se nao possuir o convenio' do
60
+ objeto = subject.class.new(params.merge!(convenio: nil))
61
+ expect(objeto.invalid?).to be true
62
+ expect(objeto.errors.full_messages).to include('Convenio não pode estar em branco.')
63
+ end
64
+
60
65
  it 'deve ser invalido se o convenio tiver mais de 6 digitos' do
61
66
  caixa.convenio = '1234567'
62
67
  expect(caixa.invalid?).to be true
@@ -88,8 +93,12 @@ describe Brcobranca::Remessa::Cnab240::Caixa do
88
93
  expect(nome_banco[0..22]).to eq 'CAIXA ECONOMICA FEDERAL'
89
94
  end
90
95
 
91
- it 'versao do layout deve retornar 050' do
92
- expect(caixa.versao_layout).to eq '050'
96
+ it 'versao do layout do arquivo deve retornar 050' do
97
+ expect(caixa.versao_layout_arquivo).to eq '050'
98
+ end
99
+
100
+ it 'versao do layout do lote deve ser 040' do
101
+ expect(caixa.versao_layout_lote).to eq '030'
93
102
  end
94
103
 
95
104
  it 'codigo do convenio deve ser 20 zeros' do
@@ -0,0 +1,155 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ RSpec.describe Brcobranca::Remessa::Cnab240::Sicoob do
5
+ let(:pagamento) do
6
+ Brcobranca::Remessa::Pagamento.new(
7
+ valor: 50,
8
+ data_vencimento: Date.today,
9
+ nosso_numero: '429715',
10
+ documento_sacado: '82136760505',
11
+ nome_sacado: 'Jose da Silva',
12
+ endereco_sacado: 'Av. Burkhard Hehn Simoes',
13
+ bairro_sacado: 'Sao Francisco',
14
+ cep_sacado: '24360440',
15
+ cidade_sacado: 'Rio de Janeiro',
16
+ uf_sacado: 'RJ'
17
+ )
18
+ end
19
+
20
+ let(:params) do
21
+ {
22
+ empresa_mae: 'SEBASTIAN ELIAS PUBLICIDADE',
23
+ agencia: '4327',
24
+ conta_corrente: '03666',
25
+ documento_cedente: '74576177000177',
26
+ modalidade_carteira: '01',
27
+ pagamentos: [pagamento]
28
+ }
29
+ end
30
+
31
+ let(:sicoob) { subject.class.new(params) }
32
+
33
+ context 'validacoes' do
34
+ context '@modalidade_carteira' do
35
+ it 'deve ser invalido se nao possuir a modalidade da carteira' do
36
+ objeto = subject.class.new(params.merge(modalidade_carteira: nil))
37
+ expect(objeto.invalid?).to be true
38
+ expect(objeto.errors.full_messages).to include('Modalidade carteira não pode estar em branco.')
39
+ end
40
+ end
41
+
42
+ context '@tipo_formulario' do
43
+ it 'deve ser invalido se nao possuir o tipo de formulario' do
44
+ objeto = subject.class.new(params.merge(tipo_formulario: nil))
45
+ expect(objeto.invalid?).to be true
46
+ expect(objeto.errors.full_messages).to include('Tipo formulario não pode estar em branco.')
47
+ end
48
+ end
49
+
50
+ context '@parcela' do
51
+ it 'deve ser invalido se nao possuir a parcela' do
52
+ objeto = subject.class.new(params.merge(parcela: nil))
53
+ expect(objeto.invalid?).to be true
54
+ expect(objeto.errors.full_messages).to include('Parcela não pode estar em branco.')
55
+ end
56
+ end
57
+
58
+ context '@agencia' do
59
+ it 'deve ser invalido se a agencia tiver mais de 4 digitos' do
60
+ sicoob.agencia = '12345'
61
+ expect(sicoob.invalid?).to be true
62
+ expect(sicoob.errors.full_messages).to include('Agencia deve ter 4 dígitos.')
63
+ end
64
+ end
65
+
66
+ context '@conta_corrente' do
67
+ it 'deve ser invalido se a conta corrente tiver mais de 5 digitos' do
68
+ sicoob.conta_corrente = '123456'
69
+ expect(sicoob.invalid?).to be true
70
+ expect(sicoob.errors.full_messages).to include('Conta corrente deve ter 5 dígitos.')
71
+ end
72
+ end
73
+ end
74
+
75
+ context 'formatacoes' do
76
+ it 'codigo do banco deve ser 001' do
77
+ expect(sicoob.cod_banco).to eq '756'
78
+ end
79
+
80
+ it 'nome do banco deve ser Sicoob com 30 posicoes' do
81
+ nome_banco = sicoob.nome_banco
82
+ expect(nome_banco.size).to eq 30
83
+ expect(nome_banco[0..19]).to eq 'SICOOB '
84
+ end
85
+
86
+ it 'versao do layout do arquivo deve ser 081' do
87
+ expect(sicoob.versao_layout_arquivo).to eq '081'
88
+ end
89
+
90
+ it 'versao do layout do lote deve ser 040' do
91
+ expect(sicoob.versao_layout_lote).to eq '040'
92
+ end
93
+
94
+ it 'deve calcular o digito da agencia' do
95
+ # digito calculado a partir do modulo 11 com base 9
96
+ #
97
+ # agencia = 1 2 3 4
98
+ #
99
+ # 4 3 2 1
100
+ # x 9 8 7 6
101
+ # = 36 24 14 6 = 80
102
+ # 80 / 11 = 7 com resto 3
103
+ expect(sicoob.digito_agencia).to eq '3'
104
+ end
105
+
106
+ it 'deve calcular digito da conta' do
107
+ # digito calculado a partir do modulo 11 com base 9
108
+ #
109
+ # conta = 1 2 3 4 5
110
+ #
111
+ # 5 4 3 2 1
112
+ # x 9 8 7 6 5
113
+ # = 45 32 21 12 5 = 116
114
+ # 116 / 11 = 10 com resto 5
115
+ expect(sicoob.digito_conta).to eq '8'
116
+ end
117
+
118
+ it 'cod. convenio deve retornar as informacoes nas posicoes corretas' do
119
+ cod_convenio = sicoob.codigo_convenio
120
+ expect(cod_convenio[0..19]).to eq ' '
121
+ end
122
+
123
+ it 'info conta deve retornar as informacoes nas posicoes corretas' do
124
+ info_conta = sicoob.info_conta
125
+ expect(info_conta[0..4]).to eq '04327'
126
+ expect(info_conta[5]).to eq '3'
127
+ expect(info_conta[6..17]).to eq '000000003666'
128
+ expect(info_conta[18]).to eq '8'
129
+ end
130
+
131
+ it 'complemento header deve retornar espacos em branco' do
132
+ expect(sicoob.complemento_header).to eq ''.rjust(29, ' ')
133
+ end
134
+
135
+ it 'complemento trailer deve retornar espacos em branco' do
136
+ expect(sicoob.complemento_trailer).to eq ''.rjust(217, ' ')
137
+ end
138
+
139
+ it 'formata o nosso numero' do
140
+ nosso_numero = sicoob.formata_nosso_numero 1
141
+ expect(nosso_numero).to eq "000000000101014 "
142
+ end
143
+ end
144
+
145
+ context 'geracao remessa' do
146
+ it_behaves_like 'cnab240'
147
+
148
+ context 'arquivo' do
149
+ before { Timecop.freeze(Time.local(2015, 7, 14, 16, 15, 15)) }
150
+ after { Timecop.return }
151
+
152
+ it { expect(sicoob.gera_arquivo).to eq(read_remessa('remessa-bancoob.rem', sicoob.gera_arquivo)) }
153
+ end
154
+ end
155
+ end
@@ -1,7 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  require 'spec_helper'
3
3
 
4
- describe Brcobranca::Remessa::Cnab400::Base do
4
+ RSpec.describe Brcobranca::Remessa::Cnab400::Base do
5
5
  let(:pagamento) do
6
6
  Brcobranca::Remessa::Pagamento.new(valor: 199.9,
7
7
  data_vencimento: Date.today,
@@ -23,22 +23,6 @@ describe Brcobranca::Remessa::Cnab400::Base do
23
23
  end
24
24
  let(:cnab400) { subject.class.new(params) }
25
25
 
26
- context 'validacoes dos campos' do
27
- context '@digito_conta' do
28
- it 'deve ser invalido se nao possuir um digito da conta corrente' do
29
- objeto = subject.class.new(params.merge!(digito_conta: nil))
30
- expect(objeto.invalid?).to be true
31
- expect(objeto.errors.full_messages).to include('Digito conta não pode estar em branco.')
32
- end
33
-
34
- it 'deve ser invalido se a carteira tiver mais de 1 digito' do
35
- cnab400.digito_conta = '12'
36
- expect(cnab400.invalid?).to be true
37
- expect(cnab400.errors.full_messages).to include('Digito conta deve ter 1 dígito.')
38
- end
39
- end
40
- end
41
-
42
26
  context 'sobrescrita dos metodos' do
43
27
  it 'mostrar aviso sobre sobrecarga de métodos padrões' do
44
28
  expect { cnab400.monta_detalhe(Brcobranca::Remessa::Pagamento.new, 1) }.to raise_error(Brcobranca::NaoImplementado, 'Sobreescreva este método na classe referente ao banco que você esta criando')
@@ -1,8 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  require 'spec_helper'
3
- require 'shared_examples/cnab400'
4
3
 
5
- describe Brcobranca::Remessa::Cnab400::Bradesco do
4
+ RSpec.describe Brcobranca::Remessa::Cnab400::Bradesco do
6
5
  let(:pagamento) do
7
6
  Brcobranca::Remessa::Pagamento.new(valor: 199.9,
8
7
  data_vencimento: Date.today,
@@ -42,6 +41,20 @@ describe Brcobranca::Remessa::Cnab400::Bradesco do
42
41
  end
43
42
  end
44
43
 
44
+ context '@digito_conta' do
45
+ it 'deve ser invalido se nao possuir um digito da conta corrente' do
46
+ objeto = subject.class.new(params.merge!(digito_conta: nil))
47
+ expect(objeto.invalid?).to be true
48
+ expect(objeto.errors.full_messages).to include('Digito conta não pode estar em branco.')
49
+ end
50
+
51
+ it 'deve ser invalido se a carteira tiver mais de 1 digito' do
52
+ bradesco_cnab400.digito_conta = '12'
53
+ expect(bradesco_cnab400.invalid?).to be true
54
+ expect(bradesco_cnab400.errors.full_messages).to include('Digito conta deve ter 1 dígito.')
55
+ end
56
+ end
57
+
45
58
  context '@conta_corrente' do
46
59
  it 'deve ser invalido se nao possuir uma conta corrente' do
47
60
  objeto = subject.class.new(params.merge!(conta_corrente: nil))
@@ -0,0 +1,117 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ RSpec.describe Brcobranca::Remessa::Cnab400::Citibank do
5
+ let(:pagamento) do
6
+ Brcobranca::Remessa::Pagamento.new(valor: 199.9,
7
+ data_vencimento: Date.today,
8
+ nosso_numero: 123,
9
+ documento_sacado: '12345678901',
10
+ nome_sacado: 'nome',
11
+ endereco_sacado: 'endereco',
12
+ bairro_sacado: 'bairro',
13
+ cep_sacado: '12345678',
14
+ cidade_sacado: 'cidade',
15
+ uf_sacado: 'SP')
16
+ end
17
+ let(:params) do
18
+ {
19
+ portfolio: '17777751042700080112',
20
+ carteira: '1',
21
+ empresa_mae: 'asd',
22
+ documento_cedente: '12345678910',
23
+ pagamentos: [pagamento]
24
+ }
25
+ end
26
+ let(:citibank_cnab400) { subject.class.new(params) }
27
+
28
+ context 'validacoes dos campos' do
29
+ context '@carteira' do
30
+ it 'deve ser invalido se nao possuir uma carteira' do
31
+ object = subject.class.new(params.merge!(carteira: nil))
32
+ expect(object.invalid?).to be true
33
+ expect(object.errors.full_messages).to include('Carteira não pode estar em branco.')
34
+ end
35
+
36
+ it 'deve ser invalido se a carteira tiver mais de 3 digitos' do
37
+ citibank_cnab400.carteira = '1234'
38
+ expect(citibank_cnab400.invalid?).to be true
39
+ expect(citibank_cnab400.errors.full_messages).to include('Carteira deve ter no máximo 1 dígito.')
40
+ end
41
+ end
42
+
43
+ context '@documento_cedente' do
44
+ it 'deve ser invalido se nao possuir o documento cedente' do
45
+ object = subject.class.new(params.merge!(documento_cedente: nil))
46
+ expect(object.invalid?).to be true
47
+ expect(object.errors.full_messages).to include('Documento cedente não pode estar em branco.')
48
+ end
49
+
50
+ it 'deve ser invalido se o documento do cedente nao tiver entre 11 e 14 digitos' do
51
+ citibank_cnab400.documento_cedente = '123'
52
+ expect(citibank_cnab400.invalid?).to be true
53
+ expect(citibank_cnab400.errors.full_messages).to include('Documento cedente deve ter entre 11 e 14 dígitos.')
54
+ end
55
+ end
56
+
57
+ context '@portfolio' do
58
+ it 'deve ser invalido se nao possuir o portfolio' do
59
+ object = subject.class.new(params.merge!(portfolio: nil))
60
+ expect(object.invalid?).to be true
61
+ expect(object.errors.full_messages).to include('Portfolio não pode estar em branco.')
62
+ end
63
+
64
+ it 'deve ser invalido se o deve ter no máximo 20 dígitos.' do
65
+ citibank_cnab400.portfolio = '123456789012345678901'
66
+ expect(citibank_cnab400.invalid?).to be true
67
+ expect(citibank_cnab400.errors.full_messages).to include('Portfolio deve ter no máximo 20 dígitos.')
68
+ end
69
+ end
70
+ end
71
+
72
+ context 'formatacoes dos valores' do
73
+ it 'cod_banco deve ser 341' do
74
+ expect(citibank_cnab400.cod_banco).to eq '745'
75
+ end
76
+
77
+ it 'nome_banco deve ser CITIBANK' do
78
+ nome_banco = citibank_cnab400.nome_banco
79
+ expect(nome_banco.strip).to eq 'CITIBANK'
80
+ end
81
+
82
+ it 'complemento deve retornar 294 caracteres' do
83
+ expect(citibank_cnab400.complemento.size).to eq 294
84
+ end
85
+
86
+ it 'info_conta deve retornar com 20 posicoes as informacoes da conta' do
87
+ info_conta = citibank_cnab400.info_conta
88
+ expect(info_conta.size).to eq 20
89
+ expect(info_conta[0..19]).to eq '17777751042700080112' # portfolio
90
+ end
91
+ end
92
+
93
+ context 'monta remessa' do
94
+ it_behaves_like 'cnab400'
95
+
96
+ context 'header' do
97
+ it 'informacoes devem estar posicionadas corretamente no header' do
98
+ header = citibank_cnab400.monta_header
99
+ expect(header[1]).to eq '1' # tipo operacao (1 = remessa)
100
+ expect(header[2..8]).to eq 'REMESSA' # literal da operacao
101
+ expect(header[26..45]).to eq citibank_cnab400.info_conta # informacoes da conta
102
+ expect(header[76..78]).to eq '745' # codigo do banco
103
+ end
104
+ end
105
+
106
+ context 'detalhe' do
107
+ it 'informacoes devem estar posicionadas corretamente no detalhe' do
108
+ detalhe = citibank_cnab400.monta_detalhe pagamento, 1
109
+ expect(detalhe[64..75]).to eq '000000000123' # nosso numero
110
+ expect(detalhe[120..125]).to eq Date.today.strftime('%d%m%y') # data de vencimento
111
+ expect(detalhe[126..138]).to eq '0000000019990' # valor do titulo
112
+ expect(detalhe[220..233]).to eq '00012345678901' # documento do pagador
113
+ expect(detalhe[234..263]).to eq 'NOME'.ljust(30, ' ') # nome do pagador
114
+ end
115
+ end
116
+ end
117
+ end
@@ -1,8 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  require 'spec_helper'
3
- require 'shared_examples/cnab400'
4
3
 
5
- describe Brcobranca::Remessa::Cnab400::Itau do
4
+ RSpec.describe Brcobranca::Remessa::Cnab400::Itau do
6
5
  let(:pagamento) do
7
6
  Brcobranca::Remessa::Pagamento.new(valor: 199.9,
8
7
  data_vencimento: Date.today,
@@ -41,6 +40,20 @@ describe Brcobranca::Remessa::Cnab400::Itau do
41
40
  end
42
41
  end
43
42
 
43
+ context '@digito_conta' do
44
+ it 'deve ser invalido se nao possuir um digito da conta corrente' do
45
+ objeto = subject.class.new(params.merge!(digito_conta: nil))
46
+ expect(objeto.invalid?).to be true
47
+ expect(objeto.errors.full_messages).to include('Digito conta não pode estar em branco.')
48
+ end
49
+
50
+ it 'deve ser invalido se a carteira tiver mais de 1 digito' do
51
+ itau_cnab400.digito_conta = '12'
52
+ expect(itau_cnab400.invalid?).to be true
53
+ expect(itau_cnab400.errors.full_messages).to include('Digito conta deve ter 1 dígito.')
54
+ end
55
+ end
56
+
44
57
  context '@conta_corrente' do
45
58
  it 'deve ser invalido se nao possuir uma conta corrente' do
46
59
  object = subject.class.new(params.merge!(conta_corrente: nil))
@@ -107,14 +120,6 @@ describe Brcobranca::Remessa::Cnab400::Itau do
107
120
  expect(info_conta[11]).to eq '1' # num. do digito
108
121
  end
109
122
 
110
- it 'deve retornar o tipo da empresa (fisica ou juridica)' do
111
- # teste pessoa fisica
112
- expect(itau_cnab400.tipo_empresa).to eq '01'
113
- # teste pessoa juridica
114
- itau_cnab400.documento_cedente = '12345678910111'
115
- expect(itau_cnab400.tipo_empresa).to eq '02'
116
- end
117
-
118
123
  it 'deve retornar o codigo da carteira' do
119
124
  # de acordo com a documentacao,
120
125
  # o codigo da carteira 150 é U
@@ -1,7 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  require 'spec_helper'
3
3
 
4
- describe Brcobranca::Remessa::Pagamento do
4
+ RSpec.describe Brcobranca::Remessa::Pagamento do
5
5
  let(:pagamento) do
6
6
  subject.class.new(valor: 199.9,
7
7
  data_vencimento: Date.parse('2015-06-25'),
@@ -171,17 +171,15 @@ describe Brcobranca::Remessa::Pagamento do
171
171
  # pessoa juridica
172
172
  pagamento.documento_sacado = '123456789101112'
173
173
  expect(pagamento.identificacao_sacado).to eq '02'
174
- end
175
-
176
- it 'formata a identificacao com o numero de caracteres informados' do
177
- expect(pagamento.identificacao_sacado(4)).to eq '0001'
174
+ pagamento.documento_sacado = '123456789101112'
175
+ expect(pagamento.identificacao_sacado(false)).to eq '2'
178
176
  end
179
177
  end
180
178
 
181
179
  context 'identificacao avalista' do
182
180
  it 'verifica a identificacao do avalista (pessoa fisica ou juridica)' do
183
181
  # pessoa fisica
184
- pagamento.documento_avalista = '123456789101'
182
+ pagamento.documento_avalista = '12345678901'
185
183
  expect(pagamento.identificacao_avalista).to eq '01'
186
184
  # pessoa juridica
187
185
  pagamento.documento_avalista = '123456789101112'
@@ -189,8 +187,8 @@ describe Brcobranca::Remessa::Pagamento do
189
187
  end
190
188
 
191
189
  it 'formata a identificacao com o numero de caracteres informados' do
192
- pagamento.documento_avalista = '123456789101'
193
- expect(pagamento.identificacao_avalista(1)).to eq '1'
190
+ pagamento.documento_avalista = '12345678901'
191
+ expect(pagamento.identificacao_avalista(false)).to eq '1'
194
192
  end
195
193
  end
196
194
  end
@@ -0,0 +1,35 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ RSpec.describe Brcobranca::Retorno::Cnab400::Base do
5
+ let(:arquivo) { File.join(File.dirname(__FILE__), '..', '..', '..', 'arquivos', nome_arquivo) }
6
+
7
+ describe "#load_lines" do
8
+
9
+ it "retorna nil se o arquivo é nil" do
10
+ expect(Brcobranca::Retorno::Cnab400::Base.load_lines(nil)).to be_nil
11
+ end
12
+
13
+ context "Bradesco" do
14
+ let(:nome_arquivo) { "CNAB400BRADESCO.RET" }
15
+
16
+ subject { Brcobranca::Retorno::Cnab400::Bradesco }
17
+
18
+ it "lê o arquivo pela classe do Bradesco" do
19
+ expect(subject).to receive(:load_lines).with(arquivo, {})
20
+ Brcobranca::Retorno::Cnab400::Base.load_lines(arquivo)
21
+ end
22
+ end
23
+
24
+ context "Itaú" do
25
+ let(:nome_arquivo) { "CNAB400ITAU.RET" }
26
+
27
+ subject { Brcobranca::Retorno::Cnab400::Itau }
28
+
29
+ it "lê o arquivo pela classe do Itaú" do
30
+ expect(subject).to receive(:load_lines).with(arquivo, {})
31
+ Brcobranca::Retorno::Cnab400::Base.load_lines(arquivo)
32
+ end
33
+ end
34
+ end
35
+ end