br_boleto 0.1.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +3 -0
- data/Gemfile.lock +3 -3
- data/README.markdown +196 -11
- data/Rakefile +5 -0
- data/br_boleto.gemspec +1 -1
- data/lib/br_boleto.rb +30 -12
- data/lib/br_boleto/{core/boleto.rb → boleto/base.rb} +83 -5
- data/lib/br_boleto/boleto/sicoob.rb +211 -0
- data/lib/br_boleto/calculos/modulo11_fator3197.rb +5 -5
- data/lib/br_boleto/helper/cpf_cnpj.rb +60 -0
- data/lib/br_boleto/helper/number.rb +15 -0
- data/lib/br_boleto/remessa/base.rb +89 -0
- data/lib/br_boleto/remessa/cnab240/base.rb +328 -0
- data/lib/br_boleto/remessa/cnab240/helper/header_arquivo.rb +186 -0
- data/lib/br_boleto/remessa/cnab240/helper/header_lote.rb +180 -0
- data/lib/br_boleto/remessa/cnab240/helper/segmento_p.rb +349 -0
- data/lib/br_boleto/remessa/cnab240/helper/segmento_q.rb +206 -0
- data/lib/br_boleto/remessa/cnab240/helper/segmento_r.rb +261 -0
- data/lib/br_boleto/remessa/cnab240/helper/segmento_s.rb +193 -0
- data/lib/br_boleto/remessa/cnab240/helper/trailer_arquivo.rb +88 -0
- data/lib/br_boleto/remessa/cnab240/helper/trailer_lote.rb +75 -0
- data/lib/br_boleto/remessa/cnab240/sicoob.rb +246 -0
- data/lib/br_boleto/remessa/lote.rb +52 -0
- data/lib/br_boleto/remessa/pagamento.rb +238 -0
- data/lib/br_boleto/string_methods.rb +21 -0
- data/lib/br_boleto/version.rb +2 -2
- data/test/br_boleto/{core/boleto_test.rb → boleto/base_test.rb} +107 -11
- data/test/br_boleto/{core → boleto}/sicoob_test.rb +60 -2
- data/test/br_boleto/remessa/base_test.rb +80 -0
- data/test/br_boleto/remessa/cnab240/base_test.rb +405 -0
- data/test/br_boleto/remessa/cnab240/helper/header_arquivo_test.rb +208 -0
- data/test/br_boleto/remessa/cnab240/helper/header_lote_test.rb +200 -0
- data/test/br_boleto/remessa/cnab240/helper/segmento_p_test.rb +390 -0
- data/test/br_boleto/remessa/cnab240/helper/segmento_q_test.rb +223 -0
- data/test/br_boleto/remessa/cnab240/helper/segmento_r_test.rb +260 -0
- data/test/br_boleto/remessa/cnab240/helper/segmento_s_test.rb +217 -0
- data/test/br_boleto/remessa/cnab240/helper/trailer_arquivo_test.rb +82 -0
- data/test/br_boleto/remessa/cnab240/helper/trailer_lote_test.rb +67 -0
- data/test/br_boleto/remessa/cnab240/sicoob_test.rb +347 -0
- data/test/br_boleto/remessa/lote_test.rb +49 -0
- data/test/br_boleto/remessa/pagamento_test.rb +339 -0
- data/test/factories/{boleto.rb → boleto/base.rb} +1 -1
- data/test/factories/{boleto_sicoob.rb → boleto/boleto_sicoob.rb} +1 -1
- data/test/factories/remessa/base.rb +13 -0
- data/test/factories/remessa/cnab240/base.rb +18 -0
- data/test/factories/remessa/cnab240/sicoob.rb +18 -0
- data/test/factories/remessa/lote.rb +7 -0
- data/test/factories/remessa/pagamento.rb +16 -0
- data/test/inheritance/boleto_test.rb +1 -1
- data/test/inheritance/sicoob_test.rb +1 -1
- metadata +65 -13
- data/lib/br_boleto/core/sicoob.rb +0 -169
@@ -0,0 +1,52 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
module BrBoleto
|
3
|
+
module Remessa
|
4
|
+
class Lote
|
5
|
+
# Seguindo a interface do Active Model para:
|
6
|
+
# * Validações;
|
7
|
+
# * Internacionalização;
|
8
|
+
# * Nomes das classes para serem manipuladas;
|
9
|
+
#
|
10
|
+
include ActiveModel::Model
|
11
|
+
|
12
|
+
# variavel que terá os pagamentos no qual será gerado o lote do arquivo de remessa
|
13
|
+
# Pode haver 1 ou vários pagamentos para o mesmo arquivo
|
14
|
+
attr_accessor :pagamentos
|
15
|
+
|
16
|
+
def self.class_for_pagamentos
|
17
|
+
BrBoleto::Remessa::Pagamento
|
18
|
+
end
|
19
|
+
|
20
|
+
def initialize(attributes = {})
|
21
|
+
self.pagamentos = [] # Para poder utilizar o << para incrementar o array
|
22
|
+
assign_attributes(attributes)
|
23
|
+
yield self if block_given?
|
24
|
+
end
|
25
|
+
|
26
|
+
def assign_attributes(attributes)
|
27
|
+
attributes ||= {}
|
28
|
+
attributes.each do |name, value|
|
29
|
+
send("#{name}=", value)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
validates_each :pagamentos do |record, attr, value|
|
34
|
+
record.errors.add(attr, 'não pode estar vazio.') if value.empty?
|
35
|
+
value.each do |pagamento|
|
36
|
+
if pagamento.is_a? record.class.class_for_pagamentos
|
37
|
+
if pagamento.invalid?
|
38
|
+
pagamento.errors.full_messages.each { |msg| record.errors.add(attr, msg) }
|
39
|
+
end
|
40
|
+
else
|
41
|
+
record.errors.add(attr, 'cada item deve ser um objeto Pagamento.')
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# O atributo pagamentos sempre irá retornar umm Array
|
47
|
+
def pagamentos
|
48
|
+
@pagamentos = [@pagamentos].flatten
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,238 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
module BrBoleto
|
3
|
+
module Remessa
|
4
|
+
class Pagamento
|
5
|
+
# Seguindo a interface do Active Model para:
|
6
|
+
# * Validações;
|
7
|
+
# * Internacionalização;
|
8
|
+
# * Nomes das classes para serem manipuladas;
|
9
|
+
#
|
10
|
+
include ActiveModel::Model
|
11
|
+
|
12
|
+
# <b>REQUERIDO</b>: nosso numero
|
13
|
+
attr_accessor :nosso_numero
|
14
|
+
|
15
|
+
# <b>REQUERIDO</b>: data do vencimento do boleto
|
16
|
+
attr_accessor :data_vencimento
|
17
|
+
|
18
|
+
# <b>REQUERIDO</b>: data de emissao do boleto
|
19
|
+
attr_accessor :data_emissao
|
20
|
+
|
21
|
+
# <b>REQUERIDO</b>: valor_documento do boleto
|
22
|
+
attr_accessor :valor_documento
|
23
|
+
|
24
|
+
# <b>REQUERIDO</b>: documento do sacado (cliente)
|
25
|
+
attr_accessor :documento_sacado
|
26
|
+
|
27
|
+
# <b>REQUERIDO</b>: nome do sacado (cliente)
|
28
|
+
attr_accessor :nome_sacado
|
29
|
+
|
30
|
+
# <b>REQUERIDO</b>: endereco do sacado (cliente)
|
31
|
+
attr_accessor :endereco_sacado
|
32
|
+
|
33
|
+
# <b>REQUERIDO</b>: bairro do sacado (cliente)
|
34
|
+
attr_accessor :bairro_sacado
|
35
|
+
|
36
|
+
# <b>REQUERIDO</b>: CEP do sacado (cliente)
|
37
|
+
attr_accessor :cep_sacado
|
38
|
+
|
39
|
+
# <b>REQUERIDO</b>: cidade do sacado (cliente)
|
40
|
+
attr_accessor :cidade_sacado
|
41
|
+
|
42
|
+
# <b>REQUERIDO</b>: UF do sacado (cliente)
|
43
|
+
attr_accessor :uf_sacado
|
44
|
+
|
45
|
+
# <b>REQUERIDO</b>: Tipor de impressão
|
46
|
+
# 1 - Frente do Bloqueto
|
47
|
+
# 2 - Verso do Bloauqto
|
48
|
+
# 3 - Corpo de instruções da Ficha de Complansação
|
49
|
+
#
|
50
|
+
attr_accessor :tipo_impressao # Default '1'
|
51
|
+
|
52
|
+
# <b>OPCIONAL</b>: nome do avalista
|
53
|
+
attr_accessor :nome_avalista
|
54
|
+
|
55
|
+
# <b>OPCIONAL</b>: documento do avalista
|
56
|
+
attr_accessor :documento_avalista
|
57
|
+
|
58
|
+
# <b>OPCIONAL</b>: codigo da 1a instrucao
|
59
|
+
attr_accessor :cod_primeira_instrucao
|
60
|
+
|
61
|
+
# <b>OPCIONAL</b>: codigo da 2a instrucao
|
62
|
+
attr_accessor :cod_segunda_instrucao
|
63
|
+
|
64
|
+
# <b>OPCIONAL</b>: valor da mora ao dia
|
65
|
+
attr_accessor :valor_mora
|
66
|
+
|
67
|
+
# <b>OPCIONAL</b>: data limite para o desconto
|
68
|
+
attr_accessor :data_desconto
|
69
|
+
|
70
|
+
# <b>OPCIONAL</b>: valor a ser concedido de desconto
|
71
|
+
attr_accessor :valor_desconto
|
72
|
+
|
73
|
+
# <b>OPCIONAL</b>: codigo do desconto (para CNAB240)
|
74
|
+
attr_accessor :cod_desconto
|
75
|
+
|
76
|
+
# <b>OPCIONAL</b>: valor do IOF
|
77
|
+
attr_accessor :valor_iof
|
78
|
+
|
79
|
+
# <b>OPCIONAL</b>: valor do abatimento
|
80
|
+
attr_accessor :valor_abatimento
|
81
|
+
|
82
|
+
# <b>OPCIONAL</b>: Informações para o desconto 2
|
83
|
+
attr_accessor :desconto_2_codigo, :desconto_2_data, :desconto_2_valor
|
84
|
+
|
85
|
+
# <b>OPCIONAL</b>: Informações para o desconto 3
|
86
|
+
attr_accessor :desconto_3_codigo, :desconto_3_data, :desconto_3_valor
|
87
|
+
|
88
|
+
# <b>OPCIONAL</b>: Informações para multa
|
89
|
+
attr_accessor :codigo_multa, :data_multa, :valor_multa
|
90
|
+
|
91
|
+
|
92
|
+
validates :nosso_numero, :data_vencimento, :valor_documento, :documento_sacado, :nome_sacado,
|
93
|
+
:endereco_sacado, :cep_sacado, :cidade_sacado, :uf_sacado, :bairro_sacado, :tipo_impressao,
|
94
|
+
presence: true
|
95
|
+
|
96
|
+
validates :cep_sacado, length: {is: 8, message: 'deve ter 8 dígitos.'}
|
97
|
+
validates :cod_desconto, length: {is: 1, message: 'deve ter 1 dígito.'}
|
98
|
+
|
99
|
+
# Nova instancia da classe Pagamento
|
100
|
+
#
|
101
|
+
# @param campos [Hash]
|
102
|
+
#
|
103
|
+
def initialize(attributes = {})
|
104
|
+
attributes = default_values.merge!(attributes)
|
105
|
+
assign_attributes(attributes)
|
106
|
+
yield self if block_given?
|
107
|
+
end
|
108
|
+
|
109
|
+
def assign_attributes(attributes={})
|
110
|
+
attributes ||= {}
|
111
|
+
attributes.each do |name, value|
|
112
|
+
send("#{name}=", value)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def nosso_numero
|
117
|
+
"#{@nosso_numero}".gsub(/[^0-9]/, "")
|
118
|
+
end
|
119
|
+
|
120
|
+
def default_values
|
121
|
+
{
|
122
|
+
data_emissao: Date.today,
|
123
|
+
valor_mora: 0.0,
|
124
|
+
valor_desconto: 0.0,
|
125
|
+
valor_iof: 0.0,
|
126
|
+
valor_abatimento: 0.0,
|
127
|
+
nome_avalista: '',
|
128
|
+
cod_desconto: '0',
|
129
|
+
desconto_2_codigo: '0',
|
130
|
+
desconto_2_valor: 0.0,
|
131
|
+
desconto_3_codigo: '0',
|
132
|
+
desconto_3_valor: 0.0,
|
133
|
+
codigo_multa: '0', # Isento
|
134
|
+
valor_multa: 0.0,
|
135
|
+
tipo_impressao: '1'
|
136
|
+
}
|
137
|
+
end
|
138
|
+
|
139
|
+
# Formata a data de descontos de acordo com o formato passado
|
140
|
+
#
|
141
|
+
# @return [String]
|
142
|
+
#
|
143
|
+
def data_desconto_formatado(formato = '%d%m%y')
|
144
|
+
formata_data(data_desconto, formato)
|
145
|
+
end
|
146
|
+
def desconto_2_data_formatado(formato = '%d%m%y')
|
147
|
+
formata_data(desconto_2_data, formato)
|
148
|
+
end
|
149
|
+
def desconto_3_data_formatado(formato = '%d%m%y')
|
150
|
+
formata_data(desconto_3_data, formato)
|
151
|
+
end
|
152
|
+
|
153
|
+
# Formatação para campos da multa
|
154
|
+
def data_multa_formatado(formato = '%d%m%y')
|
155
|
+
formata_data(data_multa, formato)
|
156
|
+
end
|
157
|
+
def valor_multa_formatado(tamanho=13)
|
158
|
+
BrBoleto::Helper::Number.new(valor_multa).formata_valor_monetario(tamanho)
|
159
|
+
end
|
160
|
+
|
161
|
+
# Formata o campo valor
|
162
|
+
# referentes as casas decimais
|
163
|
+
# exe. R$199,90 => 0000000019990
|
164
|
+
#
|
165
|
+
# @param tamanho [Integer]
|
166
|
+
# quantidade de caracteres a ser retornado
|
167
|
+
#
|
168
|
+
def valor_documento_formatado(tamanho = 13)
|
169
|
+
BrBoleto::Helper::Number.new(valor_documento).formata_valor_monetario(tamanho)
|
170
|
+
end
|
171
|
+
|
172
|
+
# Formata o campo valor da mora
|
173
|
+
#
|
174
|
+
# @param tamanho [Integer]
|
175
|
+
# quantidade de caracteres a ser retornado
|
176
|
+
#
|
177
|
+
def valor_mora_formatado(tamanho = 13)
|
178
|
+
BrBoleto::Helper::Number.new(valor_mora).formata_valor_monetario(tamanho)
|
179
|
+
end
|
180
|
+
|
181
|
+
# Formata o campo valor dos descontos
|
182
|
+
#
|
183
|
+
# @param tamanho [Integer]
|
184
|
+
# quantidade de caracteres a ser retornado
|
185
|
+
#
|
186
|
+
def valor_desconto_formatado(tamanho = 13)
|
187
|
+
BrBoleto::Helper::Number.new(valor_desconto).formata_valor_monetario(tamanho)
|
188
|
+
end
|
189
|
+
def desconto_2_valor_formatado(tamanho = 13)
|
190
|
+
BrBoleto::Helper::Number.new(desconto_2_valor).formata_valor_monetario(tamanho)
|
191
|
+
end
|
192
|
+
def desconto_3_valor_formatado(tamanho = 13)
|
193
|
+
BrBoleto::Helper::Number.new(desconto_3_valor).formata_valor_monetario(tamanho)
|
194
|
+
end
|
195
|
+
|
196
|
+
# Formata o campo valor do IOF
|
197
|
+
#
|
198
|
+
# @param tamanho [Integer]
|
199
|
+
# quantidade de caracteres a ser retornado
|
200
|
+
#
|
201
|
+
def valor_iof_formatado(tamanho = 13)
|
202
|
+
BrBoleto::Helper::Number.new(valor_iof).formata_valor_monetario(tamanho)
|
203
|
+
end
|
204
|
+
|
205
|
+
# Formata o campo valor do IOF
|
206
|
+
#
|
207
|
+
# @param tamanho [Integer]
|
208
|
+
# quantidade de caracteres a ser retornado
|
209
|
+
#
|
210
|
+
def valor_abatimento_formatado(tamanho = 13)
|
211
|
+
BrBoleto::Helper::Number.new(valor_abatimento).formata_valor_monetario(tamanho)
|
212
|
+
end
|
213
|
+
|
214
|
+
# Retorna a identificacao do pagador
|
215
|
+
# Se for pessoa fisica (CPF com 11 digitos) é 1
|
216
|
+
# Se for juridica (CNPJ com 14 digitos) é 2
|
217
|
+
#
|
218
|
+
def tipo_documento_sacado(tamanho = 2)
|
219
|
+
BrBoleto::Helper::CpfCnpj.new(documento_sacado).tipo_documento(tamanho)
|
220
|
+
end
|
221
|
+
|
222
|
+
# Retorna a identificacao do avalista
|
223
|
+
# Se for pessoa fisica (CPF com 11 digitos) é 1
|
224
|
+
# Se for juridica (CNPJ com 14 digitos) é 2
|
225
|
+
#
|
226
|
+
def tipo_documento_avalista(tamanho = 2)
|
227
|
+
BrBoleto::Helper::CpfCnpj.new(documento_avalista).tipo_documento(tamanho)
|
228
|
+
end
|
229
|
+
private
|
230
|
+
|
231
|
+
def formata_data(value, formato="%d%m%Y")
|
232
|
+
value.strftime(formato)
|
233
|
+
rescue
|
234
|
+
return (formato == '%d%m%y' ? '000000' : '00000000')
|
235
|
+
end
|
236
|
+
end
|
237
|
+
end
|
238
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
module BrBoleto
|
3
|
+
module StringMethods
|
4
|
+
# Formata o tamanho da string
|
5
|
+
# para o tamanho passado
|
6
|
+
# se a string for menor, adiciona espacos a direita
|
7
|
+
# se a string for maior, trunca para o num. de caracteres
|
8
|
+
#
|
9
|
+
def adjust_size_to(size, adjust=" ")
|
10
|
+
if self.size > size
|
11
|
+
truncate(size, omission: '')
|
12
|
+
else
|
13
|
+
ljust(size, adjust)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
[String].each do |klass|
|
20
|
+
klass.class_eval { include BrBoleto::StringMethods }
|
21
|
+
end
|
data/lib/br_boleto/version.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module BrBoleto
|
2
2
|
module Version
|
3
|
-
MAJOR =
|
4
|
-
MINOR =
|
3
|
+
MAJOR = 1 #inclui alterações de API e pode quebrar compatibilidade com versões anteriores
|
4
|
+
MINOR = 0 #inclui novas funcionalidades, sem quebrar APIs existentes
|
5
5
|
PATCH = 0 #corrige bugs ou traz melhorias em implementações já existentes
|
6
6
|
CURRENT = "#{MAJOR}.#{MINOR}.#{PATCH}"
|
7
7
|
end
|
@@ -1,25 +1,25 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
describe BrBoleto::
|
4
|
-
subject { FactoryGirl.build(:
|
3
|
+
describe BrBoleto::Boleto::Base do
|
4
|
+
subject { FactoryGirl.build(:boleto_base) }
|
5
5
|
|
6
6
|
it { must validate_numericality_of(:valor_documento).is_less_than_or_equal_to(99999999.99) }
|
7
7
|
|
8
8
|
describe "model_name" do
|
9
|
-
it "must return BrBoleto::
|
10
|
-
BrBoleto::
|
9
|
+
it "must return BrBoleto::Boleto::Base" do
|
10
|
+
BrBoleto::Boleto::Base.model_name.must_equal 'BrBoleto::Boleto::Base'
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
14
|
describe "human_attribute_name" do
|
15
15
|
it "must respond_to internationalization attribute" do
|
16
|
-
BrBoleto::
|
16
|
+
BrBoleto::Boleto::Base.human_attribute_name(:same_thing).must_equal "Same thing"
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
20
|
describe "to_partial_path" do
|
21
21
|
it "must return the path from class name" do
|
22
|
-
subject.to_partial_path.must_equal 'br_boleto/
|
22
|
+
subject.to_partial_path.must_equal 'br_boleto/base'
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
@@ -29,6 +29,12 @@ describe BrBoleto::Core::Boleto do
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
+
describe "#tipo_cobranca" do
|
33
|
+
it "default é nil" do
|
34
|
+
subject.tipo_cobranca.must_be_nil
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
32
38
|
context '#initialize' do
|
33
39
|
context "when passing a Hash" do
|
34
40
|
before do
|
@@ -63,7 +69,7 @@ describe BrBoleto::Core::Boleto do
|
|
63
69
|
it{ @object.especie_documento.must_equal 'DM' }
|
64
70
|
it{ @object.data_documento.must_equal Date.today }
|
65
71
|
it{ @object.sacado.must_equal 'Teste' }
|
66
|
-
it{ @object.documento_sacado.must_equal '
|
72
|
+
it{ @object.documento_sacado.must_equal '72527500510' }
|
67
73
|
it{ @object.endereco_sacado.must_equal 'Rua teste, 23045'}
|
68
74
|
it{ @object.local_pagamento.must_equal 'PAGÁVEL EM QUALQUER BANCO ATÉ O VENCIMENTO' }
|
69
75
|
it{ @object.instrucoes1.must_equal 'Lembrar de algo 1'}
|
@@ -106,7 +112,7 @@ describe BrBoleto::Core::Boleto do
|
|
106
112
|
it {@object.codigo_cedente.must_equal '90182' }
|
107
113
|
it {@object.endereco_cedente.must_equal 'Rua Itapaiuna, 2434' }
|
108
114
|
it {@object.cedente.must_equal 'Nome da razao social' }
|
109
|
-
it {@object.documento_cedente.must_equal '
|
115
|
+
it {@object.documento_cedente.must_equal '62526713000140' }
|
110
116
|
it {@object.sacado.must_equal 'Teste' }
|
111
117
|
it {@object.aceite.must_equal true }
|
112
118
|
it {@object.instrucoes1.must_equal 'Lembrar de algo 1' }
|
@@ -118,6 +124,96 @@ describe BrBoleto::Core::Boleto do
|
|
118
124
|
end
|
119
125
|
end
|
120
126
|
|
127
|
+
describe "#documento_cedente" do
|
128
|
+
context "com CPF" do
|
129
|
+
before do
|
130
|
+
subject.documento_cedente = 2273542143
|
131
|
+
end
|
132
|
+
it "deve preencher com zeros a esquerda se for menor que 11" do
|
133
|
+
subject.documento_cedente.must_equal '02273542143'
|
134
|
+
end
|
135
|
+
it "deve remover a formatacao" do
|
136
|
+
subject.documento_cedente = '022.735.421-43'
|
137
|
+
subject.documento_cedente.must_equal '02273542143'
|
138
|
+
end
|
139
|
+
describe "metodo documento_cedente_formatado " do
|
140
|
+
it { subject.documento_cedente_formatado.must_equal '022.735.421-43' }
|
141
|
+
end
|
142
|
+
describe "metodo documento_cedente_formatado_com_label " do
|
143
|
+
it { subject.documento_cedente_formatado_com_label.must_equal 'CPF 022.735.421-43' }
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
context "com CNPJ" do
|
148
|
+
before do
|
149
|
+
subject.documento_cedente = 9372490000121
|
150
|
+
end
|
151
|
+
it "deve preencher com zeros a esquerda se tamanho for 12" do
|
152
|
+
subject.documento_cedente = 123456789012
|
153
|
+
subject.documento_cedente.must_equal '00123456789012'
|
154
|
+
end
|
155
|
+
it "deve preencher com zeros a esquerda se tamanho for 13" do
|
156
|
+
subject.documento_cedente = 9372490000121
|
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
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
describe "#documento_sacado" do
|
173
|
+
context "com CPF" do
|
174
|
+
before do
|
175
|
+
subject.documento_sacado = 2273542143
|
176
|
+
end
|
177
|
+
it "deve preencher com zeros a esquerda se for menor que 11" do
|
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
|
190
|
+
end
|
191
|
+
|
192
|
+
context "com CNPJ" do
|
193
|
+
before do
|
194
|
+
subject.documento_sacado = 9372490000121
|
195
|
+
end
|
196
|
+
it "deve preencher com zeros a esquerda se tamanho for 12" do
|
197
|
+
subject.documento_sacado = 123456789012
|
198
|
+
subject.documento_sacado.must_equal '00123456789012'
|
199
|
+
end
|
200
|
+
it "deve preencher com zeros a esquerda se tamanho for 13" do
|
201
|
+
subject.documento_sacado = 9372490000121
|
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
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
121
217
|
context "#carteira_formatada" do
|
122
218
|
it "returns 'carteira' as default" do
|
123
219
|
subject.stubs(:carteira).returns('Foo')
|
@@ -171,19 +267,19 @@ describe BrBoleto::Core::Boleto do
|
|
171
267
|
|
172
268
|
describe "#aceite_formatado" do
|
173
269
|
context "when is true" do
|
174
|
-
subject { FactoryGirl.build(:
|
270
|
+
subject { FactoryGirl.build(:boleto_base, aceite: true) }
|
175
271
|
|
176
272
|
it{ subject.aceite_formatado.must_equal 'S' }
|
177
273
|
end
|
178
274
|
|
179
275
|
context "when is false" do
|
180
|
-
subject { FactoryGirl.build(:
|
276
|
+
subject { FactoryGirl.build(:boleto_base, aceite: false) }
|
181
277
|
|
182
278
|
it{ subject.aceite_formatado.must_equal 'N' }
|
183
279
|
end
|
184
280
|
|
185
281
|
context "when is nil" do
|
186
|
-
subject { FactoryGirl.build(:
|
282
|
+
subject { FactoryGirl.build(:boleto_base, aceite: nil) }
|
187
283
|
|
188
284
|
it{ subject.aceite_formatado.must_equal 'N' }
|
189
285
|
end
|