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,217 @@
|
|
1
|
+
module Helper
|
2
|
+
module SegmentoSTest
|
3
|
+
def test_SegmentoSTest_metodo_monta_segmento_s_deve_ter_o_conteudo_dos_metodos_na_sequencia_tipo_imressao_1
|
4
|
+
pagamento.tipo_impressao = '1'
|
5
|
+
subject.stubs(:segmento_s_posicao_001_a_003).returns( " 001_a_003")
|
6
|
+
subject.stubs(:segmento_s_posicao_004_a_007).with(1).returns( " 004_a_007")
|
7
|
+
subject.stubs(:segmento_s_posicao_008_a_008).returns( " 008_a_008")
|
8
|
+
subject.stubs(:segmento_s_posicao_009_a_013).with(2).returns( " 009_a_013")
|
9
|
+
subject.stubs(:segmento_s_posicao_014_a_014).returns( " 014_a_014")
|
10
|
+
subject.stubs(:segmento_s_posicao_015_a_015).returns( " 015_a_015")
|
11
|
+
subject.stubs(:segmento_s_posicao_016_a_017).returns( " 016_a_017")
|
12
|
+
subject.stubs(:segmento_s_posicao_018_a_018).with(pagamento).returns(" 018_a_018")
|
13
|
+
|
14
|
+
subject.expects(:segmento_s_tipo_impressao_1_ou_2).with(pagamento).returns(" 999")
|
15
|
+
# Deve dar um upcase
|
16
|
+
subject.monta_segmento_s(pagamento, 1, 2).must_equal(" 001_A_003 004_A_007 008_A_008 009_A_013 014_A_014 015_A_015 016_A_017 018_A_018 999")
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_SegmentoSTest_metodo_monta_segmento_s_deve_ter_o_conteudo_dos_metodos_na_sequencia_tipo_imressao_2
|
20
|
+
pagamento.tipo_impressao = '2'
|
21
|
+
subject.stubs(:segmento_s_posicao_001_a_003).returns( " 001_a_003")
|
22
|
+
subject.stubs(:segmento_s_posicao_004_a_007).with(1).returns( " 004_a_007")
|
23
|
+
subject.stubs(:segmento_s_posicao_008_a_008).returns( " 008_a_008")
|
24
|
+
subject.stubs(:segmento_s_posicao_009_a_013).with(2).returns( " 009_a_013")
|
25
|
+
subject.stubs(:segmento_s_posicao_014_a_014).returns( " 014_a_014")
|
26
|
+
subject.stubs(:segmento_s_posicao_015_a_015).returns( " 015_a_015")
|
27
|
+
subject.stubs(:segmento_s_posicao_016_a_017).returns( " 016_a_017")
|
28
|
+
subject.stubs(:segmento_s_posicao_018_a_018).with(pagamento).returns(" 018_a_018")
|
29
|
+
|
30
|
+
subject.expects(:segmento_s_tipo_impressao_1_ou_2).with(pagamento).returns(" 888")
|
31
|
+
# Deve dar um upcase
|
32
|
+
subject.monta_segmento_s(pagamento, 1, 2).must_equal(" 001_A_003 004_A_007 008_A_008 009_A_013 014_A_014 015_A_015 016_A_017 018_A_018 888")
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_SegmentoSTest_metodo_monta_segmento_s_deve_ter_o_conteudo_dos_metodos_na_sequencia_tipo_imressao_3
|
36
|
+
pagamento.tipo_impressao = '3'
|
37
|
+
subject.stubs(:segmento_s_posicao_001_a_003).returns( " 001_a_003")
|
38
|
+
subject.stubs(:segmento_s_posicao_004_a_007).with(1).returns( " 004_a_007")
|
39
|
+
subject.stubs(:segmento_s_posicao_008_a_008).returns( " 008_a_008")
|
40
|
+
subject.stubs(:segmento_s_posicao_009_a_013).with(2).returns( " 009_a_013")
|
41
|
+
subject.stubs(:segmento_s_posicao_014_a_014).returns( " 014_a_014")
|
42
|
+
subject.stubs(:segmento_s_posicao_015_a_015).returns( " 015_a_015")
|
43
|
+
subject.stubs(:segmento_s_posicao_016_a_017).returns( " 016_a_017")
|
44
|
+
subject.stubs(:segmento_s_posicao_018_a_018).with(pagamento).returns(" 018_a_018")
|
45
|
+
|
46
|
+
subject.expects(:segmento_s_tipo_impressao_3).with(pagamento).returns(" 777")
|
47
|
+
# Deve dar um upcase
|
48
|
+
subject.monta_segmento_s(pagamento, 1, 2).must_equal(" 001_A_003 004_A_007 008_A_008 009_A_013 014_A_014 015_A_015 016_A_017 018_A_018 777")
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_SegmentoSHelper_deve_ter_240_posicoes_com_tipo_impressao_1_ou_2
|
52
|
+
pagamento.tipo_impressao = '1'
|
53
|
+
subject.stubs(:codigo_banco).returns("123")
|
54
|
+
subject.monta_segmento_s(pagamento, 1, 2).size.must_equal 240
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_SegmentoSHelper_deve_ter_240_posicoes_com_tipo_impressao_3
|
58
|
+
pagamento.tipo_impressao = '3'
|
59
|
+
subject.stubs(:codigo_banco).returns("123")
|
60
|
+
subject.monta_segmento_s(pagamento, 1, 2).size.must_equal 240
|
61
|
+
end
|
62
|
+
|
63
|
+
# Código do banco
|
64
|
+
# 3 posições
|
65
|
+
#
|
66
|
+
def test_SegmentoSHelper_metodo_segmento_s_posicao_001_a_003
|
67
|
+
subject.expects(:codigo_banco).returns("123")
|
68
|
+
subject.segmento_s_posicao_001_a_003 .must_equal '123'
|
69
|
+
end
|
70
|
+
|
71
|
+
# Lote de Serviço: Número seqüencial para identificar univocamente um lote de serviço.
|
72
|
+
# Criado e controlado pelo responsável pela geração magnética dos dados contidos no arquivo.
|
73
|
+
# Preencher com '0001' para o primeiro lote do arquivo.
|
74
|
+
# Para os demais: número do lote anterior acrescido de 1. O número não poderá ser repetido dentro do arquivo.
|
75
|
+
# 4 posições
|
76
|
+
#
|
77
|
+
def test_SegmentoSHelper_metodo_segmento_s_posicao_004_a_007
|
78
|
+
subject.segmento_s_posicao_004_a_007(5).must_equal '0005'
|
79
|
+
end
|
80
|
+
|
81
|
+
# Tipo do registro -> Padrão 3
|
82
|
+
# 1 posição
|
83
|
+
#
|
84
|
+
def test_SegmentoSHelper_metodo_segmento_s_posicao_008_a_008
|
85
|
+
subject.segmento_s_posicao_008_a_008.must_equal '3'
|
86
|
+
end
|
87
|
+
|
88
|
+
# Nº Sequencial do Registro no Lote
|
89
|
+
# 5 posições
|
90
|
+
#
|
91
|
+
def test_SegmentoSHelper_metodo_segmento_s_posicao_009_a_013#(sequencial)
|
92
|
+
subject.segmento_s_posicao_009_a_013('4').must_equal '00004'
|
93
|
+
end
|
94
|
+
|
95
|
+
# Cód. Segmento do Registro Detalhe
|
96
|
+
# 1 posição
|
97
|
+
#
|
98
|
+
def test_SegmentoSHelper_metodo_segmento_s_posicao_014_a_014
|
99
|
+
subject.segmento_s_posicao_014_a_014.must_equal 'S'
|
100
|
+
end
|
101
|
+
|
102
|
+
# Uso Exclusivo FEBRABAN/CNAB
|
103
|
+
# 1 posição
|
104
|
+
#
|
105
|
+
def test_SegmentoSHelper_metodo_segmento_s_posicao_015_a_015
|
106
|
+
subject.segmento_s_posicao_015_a_015.must_equal ' '
|
107
|
+
end
|
108
|
+
|
109
|
+
# Código de Movimento Remessa - 01 = Entrada de Titulos
|
110
|
+
# 2 posições
|
111
|
+
#
|
112
|
+
def test_SegmentoSHelper_metodo_segmento_s_posicao_016_a_017
|
113
|
+
subject.segmento_s_posicao_016_a_017.must_equal '01'
|
114
|
+
end
|
115
|
+
|
116
|
+
# Tipo de impressão
|
117
|
+
# 1 - Frente do Bloqueto
|
118
|
+
# 2 - Verso do Bloauqto
|
119
|
+
# 3 - Corpo de instruções da Ficha de Complansação
|
120
|
+
# 1 posição
|
121
|
+
#
|
122
|
+
def test_SegmentoSHelper_metodo_segmento_s_posicao_018_a_018#(pagamento)
|
123
|
+
pagamento.expects(:tipo_impressao).returns('999')
|
124
|
+
subject.segmento_s_posicao_018_a_018(pagamento).must_equal '9'
|
125
|
+
end
|
126
|
+
|
127
|
+
########### TIPO DE IMPRESÃO 1 OU 2 ################
|
128
|
+
def test_SegmentoSHelper_metodo_segmento_s_tipo_impressao_1_ou_2#(pagamento)
|
129
|
+
subject.stubs(:segmento_s_posicao_019_a_020_tipo_impressao_1_ou_2).with(pagamento).returns(" 019_a_020")
|
130
|
+
subject.stubs(:segmento_s_posicao_021_a_160_tipo_impressao_1_ou_2).with(pagamento).returns(" 021_a_160")
|
131
|
+
subject.stubs(:segmento_s_posicao_161_a_162_tipo_impressao_1_ou_2).with(pagamento).returns(" 161_a_162")
|
132
|
+
subject.stubs(:segmento_s_posicao_163_a_240_tipo_impressao_1_ou_2).returns(" 163_a_240")
|
133
|
+
subject.segmento_s_tipo_impressao_1_ou_2(pagamento).must_equal(" 019_a_020 021_a_160 161_a_162 163_a_240")
|
134
|
+
end
|
135
|
+
# Numero da Linha a ser impressa
|
136
|
+
# 2 posições
|
137
|
+
#
|
138
|
+
def test_SegmentoSHelper_metodo_segmento_s_posicao_019_a_020_tipo_impressao_1_ou_2#(pagamento)
|
139
|
+
subject.segmento_s_posicao_019_a_020_tipo_impressao_1_ou_2(pagamento).must_equal '01'
|
140
|
+
end
|
141
|
+
# Mensagem a ser impresas
|
142
|
+
# 140 posições
|
143
|
+
#
|
144
|
+
def test_SegmentoSHelper_metodo_segmento_s_posicao_021_a_160_tipo_impressao_1_ou_2#(pagamento)
|
145
|
+
subject.segmento_s_posicao_021_a_160_tipo_impressao_1_ou_2(pagamento).must_equal ''.rjust(140, ' ')
|
146
|
+
end
|
147
|
+
|
148
|
+
# Tipo de caractere a ser impresso
|
149
|
+
# '01' = Normal
|
150
|
+
# '02' = Itálico
|
151
|
+
# '03' = Normal Negrito
|
152
|
+
# '04' = Itálico Negrito
|
153
|
+
# 2 posições
|
154
|
+
def test_SegmentoSHelper_metodo_segmento_s_posicao_161_a_162_tipo_impressao_1_ou_2#(pagamento)
|
155
|
+
subject.segmento_s_posicao_161_a_162_tipo_impressao_1_ou_2(pagamento).must_equal '01'
|
156
|
+
end
|
157
|
+
|
158
|
+
# Uso exclusivo
|
159
|
+
# 78 posições
|
160
|
+
def test_SegmentoSHelper_metodo_segmento_s_posicao_163_a_240_tipo_impressao_1_ou_2
|
161
|
+
subject.segmento_s_posicao_163_a_240_tipo_impressao_1_ou_2.must_equal ''.rjust(78, ' ')
|
162
|
+
end
|
163
|
+
########################################################
|
164
|
+
############## TIPO DE IMPRESSÃO 3 #####################
|
165
|
+
def test_SegmentoSHelper_metodo_segmento_s_tipo_impressao_3#(pagamento)
|
166
|
+
subject.stubs(:segmento_s_posicao_019_a_058_tipo_impressao_3).with(pagamento).returns(" 019_a_058")
|
167
|
+
subject.stubs(:segmento_s_posicao_059_a_098_tipo_impressao_3).with(pagamento).returns(" 059_a_098")
|
168
|
+
subject.stubs(:segmento_s_posicao_099_a_138_tipo_impressao_3).with(pagamento).returns(" 099_a_138")
|
169
|
+
subject.stubs(:segmento_s_posicao_139_a_178_tipo_impressao_3).with(pagamento).returns(" 139_a_178")
|
170
|
+
subject.stubs(:segmento_s_posicao_179_a_218_tipo_impressao_3).with(pagamento).returns(" 179_a_218")
|
171
|
+
subject.stubs(:segmento_s_posicao_219_a_240_tipo_impressao_3).returns(" 219_a_240")
|
172
|
+
subject.segmento_s_tipo_impressao_3(pagamento).must_equal(" 019_a_058 059_a_098 099_a_138 139_a_178 179_a_218 219_a_240")
|
173
|
+
end
|
174
|
+
# Informação 5
|
175
|
+
# 40 posições
|
176
|
+
#
|
177
|
+
def test_SegmentoSHelper_metodo_segmento_s_posicao_019_a_058_tipo_impressao_3#(pagamento)
|
178
|
+
subject.segmento_s_posicao_019_a_058_tipo_impressao_3(pagamento).must_equal ''.rjust(40, ' ')
|
179
|
+
end
|
180
|
+
|
181
|
+
# Informação 6
|
182
|
+
# 40 posições
|
183
|
+
#
|
184
|
+
def test_SegmentoSHelper_metodo_segmento_s_posicao_059_a_098_tipo_impressao_3#(pagamento)
|
185
|
+
subject.segmento_s_posicao_059_a_098_tipo_impressao_3(pagamento).must_equal ''.rjust(40, ' ')
|
186
|
+
end
|
187
|
+
|
188
|
+
# Informação 7
|
189
|
+
# 40 posições
|
190
|
+
#
|
191
|
+
def test_SegmentoSHelper_metodo_segmento_s_posicao_099_a_138_tipo_impressao_3#(pagamento)
|
192
|
+
subject.segmento_s_posicao_099_a_138_tipo_impressao_3(pagamento).must_equal ''.rjust(40, ' ')
|
193
|
+
end
|
194
|
+
|
195
|
+
# Informação 8
|
196
|
+
# 40 posições
|
197
|
+
#
|
198
|
+
def test_SegmentoSHelper_metodo_segmento_s_posicao_139_a_178_tipo_impressao_3#(pagamento)
|
199
|
+
subject.segmento_s_posicao_139_a_178_tipo_impressao_3(pagamento).must_equal ''.rjust(40, ' ')
|
200
|
+
end
|
201
|
+
|
202
|
+
# Informação 9
|
203
|
+
# 40 posições
|
204
|
+
#
|
205
|
+
def test_SegmentoSHelper_metodo_segmento_s_posicao_179_a_218_tipo_impressao_3#(pagamento)
|
206
|
+
subject.segmento_s_posicao_179_a_218_tipo_impressao_3(pagamento).must_equal ''.rjust(40, ' ')
|
207
|
+
end
|
208
|
+
|
209
|
+
# Uso exclusivo
|
210
|
+
# 78 posições
|
211
|
+
def test_SegmentoSHelper_metodo_segmento_s_posicao_219_a_240_tipo_impressao_3
|
212
|
+
subject.segmento_s_posicao_219_a_240_tipo_impressao_3.must_equal ''.rjust(22, ' ')
|
213
|
+
end
|
214
|
+
########################################################
|
215
|
+
|
216
|
+
end
|
217
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
module Helper
|
2
|
+
module TrailerArquivoTest
|
3
|
+
def test_TrailerArquivo_metodo_monta_trailer_arquivo_deve_ter_o_conteudo_dos_metodos_na_sequencia
|
4
|
+
subject.stubs(:trailer_arquivo_posicao_001_a_003).returns( " 001_a_003")
|
5
|
+
subject.stubs(:trailer_arquivo_posicao_004_a_007).with(1).returns(" 004_a_007")
|
6
|
+
subject.stubs(:trailer_arquivo_posicao_008_a_008).returns( " 008_a_008")
|
7
|
+
subject.stubs(:trailer_arquivo_posicao_009_a_017).returns( " 009_a_017")
|
8
|
+
subject.stubs(:trailer_arquivo_posicao_018_a_023).with(1).returns(" 018_a_023")
|
9
|
+
subject.stubs(:trailer_arquivo_posicao_024_a_029).with(2).returns(" 024_a_029")
|
10
|
+
subject.stubs(:trailer_arquivo_posicao_030_a_035).returns( " 030_a_035")
|
11
|
+
subject.stubs(:trailer_arquivo_posicao_036_a_240).returns( " 036_a_240")
|
12
|
+
# Deve dar um upcase
|
13
|
+
subject.monta_trailer_arquivo(1, 2).must_equal(" 001_A_003 004_A_007 008_A_008 009_A_017 018_A_023 024_A_029 030_A_035 036_A_240")
|
14
|
+
end
|
15
|
+
|
16
|
+
# Código do banco
|
17
|
+
# 3 posições
|
18
|
+
# Por padrão deve retornar o "codigo_banco"
|
19
|
+
#
|
20
|
+
def test_TrailerArquivo_metodo_trailer_arquivo_posicao_001_a_003
|
21
|
+
subject.expects(:codigo_banco).returns("669")
|
22
|
+
subject.trailer_arquivo_posicao_001_a_003.must_equal("669")
|
23
|
+
end
|
24
|
+
|
25
|
+
# Lote de Serviço -> Padrão 9999
|
26
|
+
# 4 posições
|
27
|
+
# Padrão retorna 9999
|
28
|
+
#
|
29
|
+
def test_TrailerArquivo_metodo_trailer_arquivo_posicao_004_a_007#(nro_lotes)
|
30
|
+
subject.trailer_arquivo_posicao_004_a_007('tato faz').must_equal '9999'
|
31
|
+
end
|
32
|
+
|
33
|
+
# Tipo do registro -> Padrão 9
|
34
|
+
# 1 posição
|
35
|
+
# Retorna '9'
|
36
|
+
#
|
37
|
+
def test_TrailerArquivo_metodo_trailer_arquivo_posicao_008_a_008
|
38
|
+
subject.trailer_arquivo_posicao_008_a_008.must_equal '9'
|
39
|
+
end
|
40
|
+
|
41
|
+
# Uso Exclusivo FEBRABAN/CNAB
|
42
|
+
# 9 posições
|
43
|
+
# todas as posições em branco
|
44
|
+
#
|
45
|
+
def test_TrailerArquivo_metodo_trailer_arquivo_posicao_009_a_017
|
46
|
+
subject.trailer_arquivo_posicao_009_a_017.must_equal ''.rjust(9, ' ')
|
47
|
+
end
|
48
|
+
|
49
|
+
# Quantidade de Lotes do Arquivo
|
50
|
+
# 6 posições
|
51
|
+
# deve retornar o numero de lotes com 6 posições
|
52
|
+
#
|
53
|
+
def test_TrailerArquivo_metodo_trailer_arquivo_posicao_018_a_023#(nro_lotes)
|
54
|
+
subject.trailer_arquivo_posicao_018_a_023(123).must_equal '123'.rjust(6, '0')
|
55
|
+
end
|
56
|
+
|
57
|
+
# Quantidade de Registros do Arquivo
|
58
|
+
# 6 posições
|
59
|
+
# Deve retornar o sequencial com 6 posições
|
60
|
+
#
|
61
|
+
def test_TrailerArquivo_metodo_trailer_arquivo_posicao_024_a_029#(sequencial)
|
62
|
+
subject.trailer_arquivo_posicao_024_a_029(888).must_equal '888'.to_s.rjust(6, '0')
|
63
|
+
end
|
64
|
+
|
65
|
+
# Qtde de Contas p/ Conc. (Lotes)
|
66
|
+
# 6 posições
|
67
|
+
# Retorna 6 posições em branco
|
68
|
+
#
|
69
|
+
def test_TrailerArquivo_metodo_trailer_arquivo_posicao_030_a_035
|
70
|
+
subject.trailer_arquivo_posicao_030_a_035.must_equal ''.rjust(6, ' ')
|
71
|
+
end
|
72
|
+
|
73
|
+
# Uso Exclusivo FEBRABAN/CNAB
|
74
|
+
# 205 posições
|
75
|
+
# Retorna todas as posições em branco
|
76
|
+
#
|
77
|
+
def test_TrailerArquivo_metodo_trailer_arquivo_posicao_036_a_240
|
78
|
+
subject.trailer_arquivo_posicao_036_a_240.must_equal ''.rjust(205, ' ')
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module Helper
|
2
|
+
module TrailerLoteTest
|
3
|
+
def test_TrailerLote_metodo_monta_trailer_lote_deve_ter_o_conteudo_dos_metodos_na_sequencia
|
4
|
+
subject.stubs(:trailer_lote_posicao_001_a_003).returns( ' 001_a_003')
|
5
|
+
subject.stubs(:trailer_lote_posicao_004_a_007).with(1).returns(' 004_a_007')
|
6
|
+
subject.stubs(:trailer_lote_posicao_008_a_008).returns( ' 008_a_008')
|
7
|
+
subject.stubs(:trailer_lote_posicao_009_a_017).returns( ' 009_a_017')
|
8
|
+
subject.stubs(:trailer_lote_posicao_018_a_023).with(2).returns(' 018_a_023')
|
9
|
+
subject.stubs(:trailer_lote_posicao_024_a_240).returns( ' 024_a_240')
|
10
|
+
# Deve dar um upcase
|
11
|
+
subject.monta_trailer_lote(lote, 1, 2).must_equal(" 001_A_003 004_A_007 008_A_008 009_A_017 018_A_023 024_A_240")
|
12
|
+
end
|
13
|
+
|
14
|
+
# Código do banco
|
15
|
+
# 3 posições
|
16
|
+
# Por padrão deve retornar o "codigo_banco"
|
17
|
+
#
|
18
|
+
def test_TrailerLote_metodo_trailer_lote_posicao_001_a_003
|
19
|
+
subject.expects(:codigo_banco).returns("669")
|
20
|
+
subject.trailer_lote_posicao_001_a_003.must_equal("669")
|
21
|
+
end
|
22
|
+
|
23
|
+
# Lote de Serviço: Número seqüencial para identificar univocamente um lote de serviço.
|
24
|
+
# Criado e controlado pelo responsável pela geração magnética dos dados contidos no arquivo.
|
25
|
+
# Preencher com '0001' para o primeiro lote do arquivo.
|
26
|
+
# Para os demais: número do lote anterior acrescido de 1. O número não poderá ser repetido dentro do arquivo.
|
27
|
+
# 4 posições
|
28
|
+
# Padrão recebe o nro do lote por parametro e ajusta para 4 caracteres
|
29
|
+
#
|
30
|
+
def test_TrailerLote_metodo_trailer_lote_posicao_004_a_007
|
31
|
+
subject.trailer_lote_posicao_004_a_007(5).to_s.rjust(4, '0')
|
32
|
+
end
|
33
|
+
|
34
|
+
# Tipo do registro -> Padrão 5
|
35
|
+
# 1 posição
|
36
|
+
# Por padrão retorna '5'
|
37
|
+
#
|
38
|
+
def test_TrailerLote_metodo_trailer_lote_posicao_008_a_008
|
39
|
+
subject.trailer_lote_posicao_008_a_008.must_equal '5'
|
40
|
+
end
|
41
|
+
|
42
|
+
# Uso Exclusivo FEBRABAN/CNAB
|
43
|
+
# 9 posições
|
44
|
+
# Deve ser 9 posiçẽos em branco
|
45
|
+
#
|
46
|
+
def test_TrailerLote_metodo_trailer_lote_posicao_009_a_017
|
47
|
+
subject.trailer_lote_posicao_009_a_017.must_equal ''.rjust(9, ' ')
|
48
|
+
end
|
49
|
+
|
50
|
+
# Quantidade de Registros no Lote
|
51
|
+
# 6 posições
|
52
|
+
# todas as posições em branco
|
53
|
+
#
|
54
|
+
def test_TrailerLote_metodo_trailer_lote_posicao_018_a_023#(nro_registros)
|
55
|
+
subject.trailer_lote_posicao_018_a_023(1).must_equal '1'.to_s.rjust(6, '0')
|
56
|
+
end
|
57
|
+
|
58
|
+
# Complemento trailer diferente para cada banco
|
59
|
+
# 217 posições
|
60
|
+
# Deve pegar o valor do metodo "complemento_trailer_lote"
|
61
|
+
#
|
62
|
+
def test_TrailerLote_metodo_trailer_lote_posicao_024_a_240
|
63
|
+
subject.expects(:complemento_trailer_lote).with(lote, 1).returns('complemento_trailer_lote')
|
64
|
+
subject.trailer_lote_posicao_024_a_240(lote, 1).must_equal 'complemento_trailer_lote'
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,347 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe BrBoleto::Remessa::Cnab240::Sicoob do
|
4
|
+
subject { FactoryGirl.build(:remessa_cnab240_sicoob, lotes: lote) }
|
5
|
+
let(:pagamento) { FactoryGirl.build(:remessa_pagamento, valor_documento: 100.00) }
|
6
|
+
let(:lote) { FactoryGirl.build(:remessa_lote, pagamentos: pagamento) }
|
7
|
+
|
8
|
+
it "deve herdar da class Base" do
|
9
|
+
subject.class.superclass.must_equal BrBoleto::Remessa::Cnab240::Base
|
10
|
+
end
|
11
|
+
|
12
|
+
context "validations" do
|
13
|
+
it { must validate_presence_of(:modalidade_carteira) }
|
14
|
+
it { must validate_presence_of(:tipo_formulario) }
|
15
|
+
it { must validate_presence_of(:parcela) }
|
16
|
+
it { must validate_presence_of(:conta_corrente) }
|
17
|
+
# Segundo a documentação do Sicoob o convênio deve ter 20 caracteres em branco
|
18
|
+
# Então ele não pode ser obrigatorio
|
19
|
+
it { wont validate_presence_of(:convenio) }
|
20
|
+
|
21
|
+
it { must validate_length_of(:conta_corrente ).is_at_most(12).with_message("deve ter no máximo 12 dígitos.") }
|
22
|
+
it { must validate_length_of(:agencia ).is_equal_to(4).with_message("deve ter 4 dígitos.") }
|
23
|
+
it { must validate_length_of(:modalidade_carteira).is_equal_to(2).with_message("deve ter 2 dígitos.") }
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "conveio" do
|
27
|
+
it "por padrão tem 20 caracteres em branco" do
|
28
|
+
subject.convenio = nil
|
29
|
+
subject.convenio.must_equal "".rjust(20, ' ')
|
30
|
+
end
|
31
|
+
|
32
|
+
it "deve ser possivel setar um valor" do
|
33
|
+
subject.convenio = "123"
|
34
|
+
subject.convenio.must_equal "123".ljust(20, " ")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "#default_values" do
|
39
|
+
it "for emissao_boleto" do
|
40
|
+
object = subject.class.new()
|
41
|
+
object.emissao_boleto.must_equal '2'
|
42
|
+
end
|
43
|
+
|
44
|
+
it "for distribuicao_boleto" do
|
45
|
+
object = subject.class.new()
|
46
|
+
object.distribuicao_boleto.must_equal '2'
|
47
|
+
end
|
48
|
+
|
49
|
+
it "for especie_titulo" do
|
50
|
+
object = subject.class.new()
|
51
|
+
object.especie_titulo.must_equal '02'
|
52
|
+
end
|
53
|
+
|
54
|
+
it "for tipo_formulario" do
|
55
|
+
object = subject.class.new()
|
56
|
+
object.tipo_formulario.must_equal '4'
|
57
|
+
end
|
58
|
+
|
59
|
+
it "for parcela" do
|
60
|
+
object = subject.class.new()
|
61
|
+
object.parcela.must_equal '01'
|
62
|
+
end
|
63
|
+
|
64
|
+
it "for modalidade_carteira" do
|
65
|
+
object = subject.class.new()
|
66
|
+
object.modalidade_carteira.must_equal '01'
|
67
|
+
end
|
68
|
+
|
69
|
+
context "Deve sobrescrever os campos default se houver algum igual" do
|
70
|
+
it "forma_cadastramento deve ser sobrescrita" do
|
71
|
+
object = subject.class.new()
|
72
|
+
object.forma_cadastramento.must_equal '0' # Na classe base é '1'
|
73
|
+
end
|
74
|
+
end
|
75
|
+
context "deve manter os defaults da classe Base" do
|
76
|
+
it "for codigo_carteira" do
|
77
|
+
object = subject.class.new()
|
78
|
+
object.codigo_carteira.must_equal '1'
|
79
|
+
end
|
80
|
+
it "deve continuar com o default da superclass" do
|
81
|
+
object = subject.class.new()
|
82
|
+
object.aceite.must_equal 'N'
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
it "codigo_banco deve ser 756" do
|
88
|
+
subject.codigo_banco.must_equal '756'
|
89
|
+
end
|
90
|
+
|
91
|
+
it "metodo nome_banco deve retornar SICOOB com 30 posições" do
|
92
|
+
subject.nome_banco.must_equal 'SICOOB'.ljust(30, ' ')
|
93
|
+
end
|
94
|
+
|
95
|
+
it "metodo versao_layout_arquivo deve retornar 081" do
|
96
|
+
subject.versao_layout_arquivo.must_equal '081'
|
97
|
+
end
|
98
|
+
|
99
|
+
it "metodo versao_layout_lote deve retornar 040" do
|
100
|
+
subject.versao_layout_lote.must_equal '040'
|
101
|
+
end
|
102
|
+
|
103
|
+
it "o digito_agencia deve calcular o modulo11 de 2 a 9 com resto zero " do
|
104
|
+
subject.agencia = '33'
|
105
|
+
BrBoleto::Calculos::Modulo11FatorDe2a9RestoZero.expects(:new).with('33').returns(1)
|
106
|
+
subject.digito_agencia.must_equal '1'
|
107
|
+
end
|
108
|
+
|
109
|
+
it "o digito_conta deve calcular o modulo11 de 2 a 9 com resto zero " do
|
110
|
+
subject.conta_corrente = '34'
|
111
|
+
BrBoleto::Calculos::Modulo11FatorDe2a9RestoZero.expects(:new).with('34').returns(1)
|
112
|
+
subject.digito_conta.must_equal '1'
|
113
|
+
end
|
114
|
+
|
115
|
+
it "o codigo_convenio deve ter 20 posições em branco" do
|
116
|
+
subject.codigo_convenio.must_equal ''.rjust(20, ' ')
|
117
|
+
end
|
118
|
+
|
119
|
+
it "o convenio_lote deve ser o mesmo valor que o codigo_convenio" do
|
120
|
+
subject.stubs(:convenio_lote).returns('qqcoisa')
|
121
|
+
subject.convenio_lote.must_equal "qqcoisa"
|
122
|
+
end
|
123
|
+
|
124
|
+
describe "#informacoes_da_conta" do
|
125
|
+
it "deve ter 20 posições" do
|
126
|
+
subject.informacoes_da_conta.size.must_equal 20
|
127
|
+
end
|
128
|
+
context "1 Primeira parte = agencia 5 posicoes" do
|
129
|
+
it "se for menor que 5 deve preencher com zero" do
|
130
|
+
subject.agencia = '123'
|
131
|
+
subject.informacoes_da_conta[0..4].must_equal '00123'
|
132
|
+
end
|
133
|
+
it "quando agencia tiver as 5 posições" do
|
134
|
+
subject.agencia = '12345'
|
135
|
+
subject.informacoes_da_conta[0..4].must_equal '12345'
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
context "2 - Segunda parte = digito_agencia" do
|
140
|
+
it "deve pegar o digito da agencia" do
|
141
|
+
subject.expects(:digito_agencia).returns("&")
|
142
|
+
subject.informacoes_da_conta[5].must_equal "&"
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
context "3 - Terceira parte = conta_corrente com 12 posições" do
|
147
|
+
it "se tiver menos que 12 caracteres deve preencher com zero" do
|
148
|
+
subject.stubs(:digito_conta)
|
149
|
+
subject.expects(:conta_corrente).returns("123456")
|
150
|
+
subject.informacoes_da_conta[6..17].must_equal "123456".rjust(12, '0')
|
151
|
+
end
|
152
|
+
it "se tiver 12 caracteres deve manter" do
|
153
|
+
subject.stubs(:digito_conta)
|
154
|
+
subject.expects(:conta_corrente).returns("".rjust(12, '1'))
|
155
|
+
subject.informacoes_da_conta[6..17].must_equal "1".rjust(12, '1')
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
context "4 - Quarta parte = digito_conta" do
|
160
|
+
it "deve buscar o valor do metodo digito_conta" do
|
161
|
+
subject.expects(:digito_conta).returns('*')
|
162
|
+
subject.informacoes_da_conta[18].must_equal('*')
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
describe "#complemento_header" do
|
168
|
+
it "deve ter 29 posições em branco" do
|
169
|
+
subject.complemento_header.must_equal ''.rjust(29, ' ')
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
describe "#complemento_trailer_lote" do
|
174
|
+
let(:pagamento_2) { FactoryGirl.build(:remessa_pagamento, valor_documento: 50.25) }
|
175
|
+
it "deve carregar os dados dos metodos complemento_trailer_lote na sequencia" do
|
176
|
+
subject.stubs(:complemento_trailer_lote_posicao_024_a_029).with(lote).returns(" 024_a_029")
|
177
|
+
subject.stubs(:complemento_trailer_lote_posicao_030_a_046).with(lote).returns(" 030_a_046")
|
178
|
+
subject.stubs(:complemento_trailer_lote_posicao_047_a_052).with(lote).returns(" 047_a_052")
|
179
|
+
subject.stubs(:complemento_trailer_lote_posicao_053_a_069).with(lote).returns(" 053_a_069")
|
180
|
+
subject.stubs(:complemento_trailer_lote_posicao_070_a_075).with(lote).returns(" 070_a_075")
|
181
|
+
subject.stubs(:complemento_trailer_lote_posicao_076_a_092).with(lote).returns(" 076_a_092")
|
182
|
+
subject.stubs(:complemento_trailer_lote_posicao_093_a_098).with(lote).returns(" 093_a_098")
|
183
|
+
subject.stubs(:complemento_trailer_lote_posicao_099_a_115).with(lote).returns(" 099_a_115")
|
184
|
+
subject.stubs(:complemento_trailer_lote_posicao_116_a_123).with(lote).returns(" 116_a_123")
|
185
|
+
subject.stubs(:complemento_trailer_lote_posicao_124_a_240).returns(" 124_a_240")
|
186
|
+
subject.complemento_trailer_lote(lote, 1).must_equal(" 024_A_029 030_A_046 047_A_052 053_A_069 070_A_075 076_A_092 093_A_098 099_A_115 116_A_123 124_A_240")
|
187
|
+
end
|
188
|
+
|
189
|
+
before do
|
190
|
+
lote.pagamentos << pagamento_2
|
191
|
+
end
|
192
|
+
|
193
|
+
describe "#complemento_trailer_lote_posicao_024_a_029" do
|
194
|
+
it "se o tipo_cobranca for simples, então deve contar o total de pagamentos do lote" do
|
195
|
+
subject.expects(:tipo_cobranca).returns(:simples)
|
196
|
+
subject.complemento_trailer_lote_posicao_024_a_029(lote).must_equal "2".rjust(6, "0")
|
197
|
+
end
|
198
|
+
it "se o tipo_cobranca não for simples, então não deve contar o total de pagamentos do lote" do
|
199
|
+
subject.expects(:tipo_cobranca).returns(:caucionada)
|
200
|
+
subject.complemento_trailer_lote_posicao_024_a_029(lote).must_equal "".rjust(6, "0")
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
describe "#complemento_trailer_lote_posicao_030_a_046" do
|
205
|
+
it "se o tipo_cobranca for simples, então deve somar o valor_documento dos pagamentos do lote" do
|
206
|
+
subject.expects(:tipo_cobranca).returns(:simples)
|
207
|
+
subject.complemento_trailer_lote_posicao_030_a_046(lote).must_equal "15025".rjust(17, "0")
|
208
|
+
end
|
209
|
+
it "se o tipo_cobranca não for simples, então não deve somar o valor_documento dos pagamentos do lote" do
|
210
|
+
subject.expects(:tipo_cobranca).returns(:caucionada)
|
211
|
+
subject.complemento_trailer_lote_posicao_030_a_046(lote).must_equal "".rjust(17, "0")
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
describe "#complemento_trailer_lote_posicao_047_a_052" do
|
216
|
+
it { subject.complemento_trailer_lote_posicao_047_a_052(lote).must_equal "".rjust(6, "0") }
|
217
|
+
end
|
218
|
+
|
219
|
+
describe "#complemento_trailer_lote_posicao_053_a_069" do
|
220
|
+
it { subject.complemento_trailer_lote_posicao_053_a_069(lote).must_equal "".rjust(17, "0") }
|
221
|
+
end
|
222
|
+
|
223
|
+
describe "#complemento_trailer_lote_posicao_070_a_075" do
|
224
|
+
it "se o tipo_cobranca for caucionada, então deve contar o total de pagamentos do lote" do
|
225
|
+
subject.expects(:tipo_cobranca).returns(:caucionada)
|
226
|
+
subject.complemento_trailer_lote_posicao_070_a_075(lote).must_equal "2".rjust(6, "0")
|
227
|
+
end
|
228
|
+
it "se o tipo_cobranca não for caucionada, então não deve contar o total de pagamentos do lote" do
|
229
|
+
subject.expects(:tipo_cobranca).returns(:simples)
|
230
|
+
subject.complemento_trailer_lote_posicao_070_a_075(lote).must_equal "".rjust(6, "0")
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
describe "#complemento_trailer_lote_posicao_076_a_092" do
|
235
|
+
it "se o tipo_cobranca for caucionada, então deve somar o valor_documento dos pagamentos do lote" do
|
236
|
+
subject.expects(:tipo_cobranca).returns(:caucionada)
|
237
|
+
subject.complemento_trailer_lote_posicao_076_a_092(lote).must_equal "15025".rjust(17, "0")
|
238
|
+
end
|
239
|
+
it "se o tipo_cobranca não for caucionada, então não deve somar o valor_documento dos pagamentos do lote" do
|
240
|
+
subject.expects(:tipo_cobranca).returns(:simples)
|
241
|
+
subject.complemento_trailer_lote_posicao_076_a_092(lote).must_equal "".rjust(17, "0")
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
describe "#complemento_trailer_lote_posicao_093_a_098" do
|
246
|
+
it { subject.complemento_trailer_lote_posicao_093_a_098(lote).must_equal "".rjust(6, "0") }
|
247
|
+
end
|
248
|
+
|
249
|
+
describe "#complemento_trailer_lote_posicao_099_a_115" do
|
250
|
+
it { subject.complemento_trailer_lote_posicao_099_a_115(lote).must_equal "".rjust(17, "0") }
|
251
|
+
end
|
252
|
+
|
253
|
+
describe "#complemento_trailer_lote_posicao_116_a_123" do
|
254
|
+
it { subject.complemento_trailer_lote_posicao_116_a_123(lote).must_equal "".rjust(8, " ") }
|
255
|
+
end
|
256
|
+
|
257
|
+
describe "#complemento_trailer_lote_posicao_124_a_240" do
|
258
|
+
it { subject.complemento_trailer_lote_posicao_124_a_240.must_equal "".rjust(117, " ") }
|
259
|
+
end
|
260
|
+
|
261
|
+
end
|
262
|
+
|
263
|
+
describe "#formata_nosso_numero" do
|
264
|
+
it "posicao 0 até 9 deve pegar o nosso_numero passado por parametro e ajustar para 10 posições" do
|
265
|
+
subject.formata_nosso_numero(123)[0..9].must_equal "123".rjust(10, '0')
|
266
|
+
end
|
267
|
+
it "posicao 10 até 11 deve ter o numero da parcela" do
|
268
|
+
subject.expects(:parcela).returns("99")
|
269
|
+
subject.formata_nosso_numero(1)[10..11].must_equal "99"
|
270
|
+
end
|
271
|
+
it "posicao 12 até 13 deve ter a modalidade_carteira" do
|
272
|
+
subject.expects(:modalidade_carteira).returns("23")
|
273
|
+
subject.formata_nosso_numero(1)[12..13].must_equal "23"
|
274
|
+
end
|
275
|
+
it "posicao 14 deve ter o tipo_formulario" do
|
276
|
+
subject.expects(:tipo_formulario).returns("4")
|
277
|
+
subject.formata_nosso_numero(1)[14].must_equal "4"
|
278
|
+
end
|
279
|
+
it "posição 15 até 19 deve ser valor em branco" do
|
280
|
+
subject.formata_nosso_numero(123)[15..19].must_equal "".rjust(5, ' ')
|
281
|
+
end
|
282
|
+
it "deve ajustar a string para no maximo 20 posições" do
|
283
|
+
subject.expects(:modalidade_carteira).returns("".rjust(20, "1"))
|
284
|
+
subject.formata_nosso_numero(123456).size.must_equal 20
|
285
|
+
end
|
286
|
+
end
|
287
|
+
|
288
|
+
describe "#complemento_p" do
|
289
|
+
it "posicao 0 até 11 deve ter a conta_corrente" do
|
290
|
+
subject.stubs(:digito_conta)
|
291
|
+
subject.expects(:conta_corrente).returns(123456789)
|
292
|
+
subject.complemento_p(pagamento)[0..11].must_equal "000123456789"
|
293
|
+
end
|
294
|
+
it "posicao 12 deve te o digito_conta" do
|
295
|
+
subject.expects(:digito_conta).returns("%")
|
296
|
+
subject.complemento_p(pagamento)[12].must_equal "%"
|
297
|
+
end
|
298
|
+
it "posição 13 deve ser um caracter em branco" do
|
299
|
+
subject.complemento_p(pagamento)[13].must_equal " "
|
300
|
+
end
|
301
|
+
it "posição 14 até 33 deve ter o valor do metodo formata_nosso_numero passando o nosso_numero do pagamento" do
|
302
|
+
subject.expects(:formata_nosso_numero).with(pagamento.nosso_numero).returns("12345678901234567890")
|
303
|
+
subject.complemento_p(pagamento)[14..33].must_equal '12345678901234567890'
|
304
|
+
end
|
305
|
+
end
|
306
|
+
|
307
|
+
describe "#dados_do_arquivo" do
|
308
|
+
it "deve gerar os dados do arquivo" do
|
309
|
+
subject.dados_do_arquivo.size.must_equal 1927
|
310
|
+
end
|
311
|
+
end
|
312
|
+
|
313
|
+
describe "#tipo_cobranca" do
|
314
|
+
it "deve ser :simples se modalidade_carteira for 01" do
|
315
|
+
subject.modalidade_carteira = '01'
|
316
|
+
subject.tipo_cobranca.must_equal :simples
|
317
|
+
end
|
318
|
+
it "deve ser :simples se modalidade_carteira for 1" do
|
319
|
+
subject.modalidade_carteira = 1
|
320
|
+
subject.tipo_cobranca.must_equal :simples
|
321
|
+
end
|
322
|
+
it "deve ser :simples se modalidade_carteira for 02" do
|
323
|
+
subject.modalidade_carteira = '02'
|
324
|
+
subject.tipo_cobranca.must_equal :simples
|
325
|
+
end
|
326
|
+
it "deve ser :simples se modalidade_carteira for 2" do
|
327
|
+
subject.modalidade_carteira = 2
|
328
|
+
subject.tipo_cobranca.must_equal :simples
|
329
|
+
end
|
330
|
+
it "deve ser :caucionada se modalidade_carteira for 03" do
|
331
|
+
subject.modalidade_carteira = '03'
|
332
|
+
subject.tipo_cobranca.must_equal :caucionada
|
333
|
+
end
|
334
|
+
it "deve ser :caucionada se modalidade_carteira for 3" do
|
335
|
+
subject.modalidade_carteira = 3
|
336
|
+
subject.tipo_cobranca.must_equal :caucionada
|
337
|
+
end
|
338
|
+
it "deve ser nil se modalidade_carteira for outro numero" do
|
339
|
+
subject.modalidade_carteira = 4
|
340
|
+
subject.tipo_cobranca.must_be_nil
|
341
|
+
end
|
342
|
+
it "deve ser nil se modalidade_carteira for nil" do
|
343
|
+
subject.modalidade_carteira = nil
|
344
|
+
subject.tipo_cobranca.must_be_nil
|
345
|
+
end
|
346
|
+
end
|
347
|
+
end
|