br_boleto 0.1.0 → 1.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/.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
|