brdinheiro 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +0 -0
- data/MIT-LICENSE +20 -0
- data/README +0 -0
- data/Rakefile +100 -0
- data/TODO +5 -0
- data/lib/brdinheiro/dinheiro.rb +349 -0
- data/lib/brdinheiro/dinheiro_active_record.rb +41 -0
- data/lib/brdinheiro/dinheiro_util.rb +43 -0
- data/lib/brdinheiro/excecoes.rb +7 -0
- data/lib/brdinheiro/number_portuguese.rb +163 -0
- data/lib/brdinheiro/version.rb +9 -0
- data/lib/brdinheiro.rb +20 -0
- data/test/br_dinheiro_test.rb +11 -0
- data/test/dinheiro_active_record_test.rb +49 -0
- data/test/dinheiro_test.rb +498 -0
- data/test/test_helper.rb +16 -0
- metadata +86 -0
@@ -0,0 +1,498 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
|
3
|
+
class DinheiroTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
CONTABIL = { "(2,00)" => -2,
|
6
|
+
"2,00" => 2,
|
7
|
+
"0,00" => 0,
|
8
|
+
"0,32" => 0.32,
|
9
|
+
"(0,01)" => -0.01 }
|
10
|
+
|
11
|
+
REAL_CONTABIL = { "R$ (1,00)" => -1,
|
12
|
+
"R$ (0,12)" => -0.12,
|
13
|
+
"R$ 1,00" => 1,
|
14
|
+
"R$ 1,00" => 1,
|
15
|
+
"R$ 1,00" => 1,
|
16
|
+
"R$ 0,00" => 0 }
|
17
|
+
|
18
|
+
SOMA = { 0.real => 0.real + 0.real,
|
19
|
+
1.real => 0.real + 1.real,
|
20
|
+
1.real => 1.real + 0.real,
|
21
|
+
2.reais => 1.real + 1.real,
|
22
|
+
2.reais => 0.real + 2.reais,
|
23
|
+
2.reais => 2.reais + 0.real,
|
24
|
+
0.real => 2.real + -2.real,
|
25
|
+
0.real => 0.real + BigDecimal.new("0"),
|
26
|
+
0.3.real => 0.real + 0.3.real,
|
27
|
+
-0.3.real => 0.real + -0.3.real,
|
28
|
+
-0.03.real => 0 + -0.03.real,
|
29
|
+
-0.03.real => 0.real + -0.03,
|
30
|
+
-1.03.real => -1.real + -0.03,
|
31
|
+
-1.03.real => -1.real + BigDecimal.new("-0.03") }
|
32
|
+
|
33
|
+
SUBTRACAO = { 0.real => 0.real - 0.real,
|
34
|
+
-1.real => 0.real - 1.real,
|
35
|
+
1.real => 1.real - 0.real,
|
36
|
+
0.real => 1.real - 1.real,
|
37
|
+
-2.reais => 0.real - 2.reais,
|
38
|
+
2.reais => 2.reais - 0.real,
|
39
|
+
-4.reais => -2.reais - 2.reais,
|
40
|
+
0.3.real => 0.3.real - 0.real,
|
41
|
+
0.03.real => 0.03.real - 0.real,
|
42
|
+
0.03.real => 0.06.real - 0.03.real,
|
43
|
+
-0.03.real => 0 - 0.03.real,
|
44
|
+
-0.03.real => 0.real - 0.03,
|
45
|
+
-1.03.real => -1.real - 0.03,
|
46
|
+
-1.03.real => -1.real - BigDecimal.new("0.03") }
|
47
|
+
|
48
|
+
MULTIPLICACAO = { 0.real => 0.real * 0,
|
49
|
+
0.real => 0.real * 1,
|
50
|
+
0.real => 0.real * -1,
|
51
|
+
1.real => 1.real * 1,
|
52
|
+
10.real => 10.real * 1,
|
53
|
+
100.real => 100.real * 1,
|
54
|
+
1000.real => 1000.real * 1,
|
55
|
+
1.real => -1.real * -1,
|
56
|
+
-1.real => 1.real * -1,
|
57
|
+
-1.real => -1.real * 1,
|
58
|
+
0.1.real => 1.real * 0.1,
|
59
|
+
0.01.real => 1.real * 0.01,
|
60
|
+
0.01.real => 1.real * 0.009,
|
61
|
+
0.01.real => 1.real * 0.005,
|
62
|
+
0.00.real => 1.real * 0.0049,
|
63
|
+
0.1.real => 0.1.real * 1,
|
64
|
+
0.01.real => 0.01.real * 1,
|
65
|
+
0.01.real => 0.009.real * 1,
|
66
|
+
0.00.real => 0.00049.real * 1,
|
67
|
+
0.real => 0.real * 0.real,
|
68
|
+
0.real => 0.real * BigDecimal("0"),
|
69
|
+
1.real => 1.real * 1.real,
|
70
|
+
1.real => 1.real * BigDecimal("1"),
|
71
|
+
1.real => 0.5.real * 2.real,
|
72
|
+
1.real => 0.5.real * BigDecimal("2"),
|
73
|
+
1.real => 1 * 1.real,
|
74
|
+
-1.real => -1 * 1.real,
|
75
|
+
1.real => -1 * -1.real,
|
76
|
+
0.01.real => 0.01 * 1.real,
|
77
|
+
0.01.real => 1.real * BigDecimal("0.01"),
|
78
|
+
0.01.real => BigDecimal("0.01") * 1.real }
|
79
|
+
|
80
|
+
DIVISAO = {
|
81
|
+
Dinheiro.new(0.33) => Dinheiro.new(1) / 3,
|
82
|
+
Dinheiro.new(33.33) => Dinheiro.new(100) / 3,
|
83
|
+
Dinheiro.new(50.00) => Dinheiro.new(100) / 2,
|
84
|
+
Dinheiro.new(0.25) => Dinheiro.new(0.5) / 2,
|
85
|
+
Dinheiro.new(0.17) => Dinheiro.new(0.5) / 3,
|
86
|
+
Dinheiro.new(0.33) => Dinheiro.new(0.33) / 1
|
87
|
+
}
|
88
|
+
|
89
|
+
PARCELAS = {
|
90
|
+
[Dinheiro.new(0.33), Dinheiro.new(0.33), Dinheiro.new(0.34)] => Dinheiro.new(1).parcelar(3),
|
91
|
+
[Dinheiro.new(33.33), Dinheiro.new(33.33), Dinheiro.new(33.34)] => Dinheiro.new(100).parcelar(3),
|
92
|
+
[Dinheiro.new(50.00), Dinheiro.new(50)] => Dinheiro.new(100).parcelar(2),
|
93
|
+
[Dinheiro.new(0.25), Dinheiro.new(0.25)] => Dinheiro.new(0.5).parcelar(2),
|
94
|
+
[Dinheiro.new(0.16), Dinheiro.new(0.16),Dinheiro.new(0.18)] => Dinheiro.new(0.5).parcelar(3),
|
95
|
+
[Dinheiro.new(0.33)] => Dinheiro.new(0.33).parcelar(1) ,
|
96
|
+
[Dinheiro.new(0.33)] => Dinheiro.new(0.33).parcelar(1) ,
|
97
|
+
}
|
98
|
+
|
99
|
+
|
100
|
+
QUANTIA_COM_FORMATO_VALIDO = [ "1211",
|
101
|
+
"1211.",
|
102
|
+
"1211.0",
|
103
|
+
"1211.23",
|
104
|
+
"1211,23",
|
105
|
+
"1.211",
|
106
|
+
"1.211,00",
|
107
|
+
"1.211,01",
|
108
|
+
"1.211,1",
|
109
|
+
"1.211,",
|
110
|
+
"1,",
|
111
|
+
"12,",
|
112
|
+
"32349898989912,",
|
113
|
+
"32.349.898.989.912,",
|
114
|
+
"32.349.898.989.912,1",
|
115
|
+
"32.349.898.989.912,12",
|
116
|
+
"1",
|
117
|
+
"1.00",
|
118
|
+
"1.01",
|
119
|
+
"1.1",
|
120
|
+
"1.",
|
121
|
+
".1",
|
122
|
+
".12",
|
123
|
+
"0.12",
|
124
|
+
"1.12",
|
125
|
+
"12.12",
|
126
|
+
"12.12",
|
127
|
+
"123.12",
|
128
|
+
"1,234.12",
|
129
|
+
"12,234.12",
|
130
|
+
"123,234.12",
|
131
|
+
"2,123,234.12",
|
132
|
+
",1",
|
133
|
+
",11",
|
134
|
+
",01",
|
135
|
+
"0,01" ]
|
136
|
+
QUANTIA_COM_FORMATO_INVALIDO = [ 'teste',
|
137
|
+
'12,123,99',
|
138
|
+
'12.123.99',
|
139
|
+
'1,123,99',
|
140
|
+
'1212,39.90' ]
|
141
|
+
|
142
|
+
COMPARACAO = [ 1.real < 2.reais,
|
143
|
+
1.real <= 2.reais,
|
144
|
+
2.real > 1.real,
|
145
|
+
2.real >= 1.real,
|
146
|
+
1.real == 1.real,
|
147
|
+
1.real >= 1.real,
|
148
|
+
1.real <= 1.real ]
|
149
|
+
|
150
|
+
COMPARACAO_COM_ESCALAR = [ 1.real < 2.00,
|
151
|
+
1.real <= 2.00,
|
152
|
+
2.real > 1.00,
|
153
|
+
2.real >= 1.00,
|
154
|
+
1.real == 1.00,
|
155
|
+
1.real >= 1.00,
|
156
|
+
1.real <= 1.00 ]
|
157
|
+
|
158
|
+
ARREDONDAMENTO = { 23049 => 230.49,
|
159
|
+
23049 => 230.4949999999,
|
160
|
+
23050 => 230.495 }
|
161
|
+
|
162
|
+
PONTO_NO_MILHAR = { "234.175.211" => "234175211",
|
163
|
+
"" => "",
|
164
|
+
"1" => "1",
|
165
|
+
"12" => "12",
|
166
|
+
"123" => "123",
|
167
|
+
"1.234" => "1234",
|
168
|
+
"12.345" => "12345",
|
169
|
+
"123.456" => "123456",
|
170
|
+
"123.112.211" => "123112211",
|
171
|
+
"1.234.567" => "1234567" }
|
172
|
+
|
173
|
+
QUANTIA_VALIDA = { "0,00" => 0 ,
|
174
|
+
"0,00" => 0.0 ,
|
175
|
+
"0,00" => "0" ,
|
176
|
+
"0,00" => "0,00" ,
|
177
|
+
"1,00" => 1 ,
|
178
|
+
"1,03" => 1.03 ,
|
179
|
+
"1,03" => "1,03" ,
|
180
|
+
"0,03" => ",03" ,
|
181
|
+
"0,30" => ",3" ,
|
182
|
+
"0,03" => ".03" ,
|
183
|
+
"0,30" => ".3" ,
|
184
|
+
"-0,30" => -0.3 ,
|
185
|
+
"-0,03" => -0.03 ,
|
186
|
+
"1,00" => "1,00" ,
|
187
|
+
"-1,00" => -1 ,
|
188
|
+
"-1,00" => -1.0 ,
|
189
|
+
"-1,00" => "-1" ,
|
190
|
+
"-1,00" => "-1,00" ,
|
191
|
+
"-2,30" => "-2,30" ,
|
192
|
+
"2,30" => "2,30" ,
|
193
|
+
"2,30" => 2.30 ,
|
194
|
+
"2,30" => 2.3 ,
|
195
|
+
"1.211,00" => "1211,00" ,
|
196
|
+
"1.211,01" => "1211,01" ,
|
197
|
+
"1.211,50" => "1211,5" ,
|
198
|
+
"1.211,00" => "1211," ,
|
199
|
+
"1.211,00" => "1211" ,
|
200
|
+
"1.211,00" => "1211.00" ,
|
201
|
+
"1.211,01" => "1211.01" ,
|
202
|
+
"1.211,20" => "1211.2" ,
|
203
|
+
"1.211,00" => "1211." ,
|
204
|
+
"1.211,00" => "1211" ,
|
205
|
+
"1.211,00" => "1.211" ,
|
206
|
+
"123.112.211,35" => "123112211,35" ,
|
207
|
+
"-123.112.211,35" => "-123112211,35" ,
|
208
|
+
"123.112.211,35" => "+123112211,35" }
|
209
|
+
|
210
|
+
PARTE_INTEIRA = [ -1, -123112211, 0, 1, 12344545 ]
|
211
|
+
|
212
|
+
|
213
|
+
def setup
|
214
|
+
tornar_metodos_publicos Dinheiro
|
215
|
+
@dinheiro = 1.real
|
216
|
+
end
|
217
|
+
|
218
|
+
def testa_se_cria_dinheiro_a_partir_de_quantias_validos
|
219
|
+
QUANTIA_VALIDA.each do |esperado, quantia|
|
220
|
+
assert_equal esperado, Dinheiro.new(quantia).to_s, "Deveria ter vindo o quantia: #{esperado} quando recebeu #{quantia}"
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
# coloca_ponto_no_milhar
|
225
|
+
def testa_se_coloca_ponto_no_milhar
|
226
|
+
PONTO_NO_MILHAR.each do |esperado, quantia|
|
227
|
+
{ esperado => quantia,
|
228
|
+
"-#{esperado}" => "-#{quantia}" }.each do |esperado, quantia|
|
229
|
+
assert_equal esperado, @dinheiro.inteiro_com_milhar(quantia)
|
230
|
+
end
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
def testa_to_s
|
235
|
+
assert_equal "1,00", Dinheiro.new(1).to_s
|
236
|
+
assert_equal "1.000,00", Dinheiro.new(1000).to_s
|
237
|
+
end
|
238
|
+
|
239
|
+
# real
|
240
|
+
def testa_real_nao_eh_dinheiro
|
241
|
+
assert_kind_of(Dinheiro, 1.real)
|
242
|
+
end
|
243
|
+
|
244
|
+
def testa_real_eh_dinheiro
|
245
|
+
assert_kind_of(Dinheiro, Dinheiro.new(1).real)
|
246
|
+
end
|
247
|
+
|
248
|
+
def testa_real_contabil
|
249
|
+
REAL_CONTABIL.each { |esperado, quantia| assert_equal esperado, Dinheiro.new(quantia).real_contabil }
|
250
|
+
end
|
251
|
+
|
252
|
+
def testa_reais_contabeis
|
253
|
+
REAL_CONTABIL.each { |esperado, quantia| assert_equal esperado, Dinheiro.new(quantia).reais_contabeis }
|
254
|
+
end
|
255
|
+
|
256
|
+
# reais
|
257
|
+
def testa_reais
|
258
|
+
assert_equal Dinheiro.new("2,00"), Dinheiro.new(2).reais
|
259
|
+
end
|
260
|
+
|
261
|
+
def testa_contabil
|
262
|
+
CONTABIL.each { |esperado, quantia| assert_equal esperado, Dinheiro.new(quantia).contabil }
|
263
|
+
end
|
264
|
+
|
265
|
+
# real_formatado
|
266
|
+
def test_real_formatado
|
267
|
+
assert_equal "R$ 2,00", Dinheiro.new(2).real_formatado
|
268
|
+
end
|
269
|
+
|
270
|
+
# ==
|
271
|
+
def testa_igualdade
|
272
|
+
assert_equal Dinheiro.new(1), Dinheiro.new(1)
|
273
|
+
end
|
274
|
+
|
275
|
+
def testa_igualdade_quando_passa_possivel_dinheiro
|
276
|
+
assert_equal Dinheiro.new(1), 1.0
|
277
|
+
end
|
278
|
+
|
279
|
+
def testa_igualdade_quando_passa_algo_que_nao_seja_dinheiro
|
280
|
+
assert_equal false, Dinheiro.new(1) == 'salario'
|
281
|
+
end
|
282
|
+
|
283
|
+
# / (divisao)
|
284
|
+
def testa_divisao
|
285
|
+
DIVISAO.each { |parcelas, divisao| assert_equal parcelas, divisao }
|
286
|
+
end
|
287
|
+
|
288
|
+
def testa_divisao_por_zero
|
289
|
+
assert_raise(ZeroDivisionError) { 1.real / 0 }
|
290
|
+
end
|
291
|
+
|
292
|
+
def testa_divisao_por_algo_que_nao_seja_um_escalar
|
293
|
+
assert_raise(DivisaPorNaoEscalarError) { 10.reais / 2.reais }
|
294
|
+
end
|
295
|
+
|
296
|
+
# parcelar
|
297
|
+
def testa_parcelar
|
298
|
+
PARCELAS.each { |parcelas, divisao| assert_equal parcelas, divisao }
|
299
|
+
end
|
300
|
+
|
301
|
+
def testa_parcelar_por_zero
|
302
|
+
assert_raise(ZeroDivisionError) { 1.real.parcelar 0 }
|
303
|
+
end
|
304
|
+
|
305
|
+
def testa_parcelar_por_algo_que_nao_seja_um_escalar
|
306
|
+
assert_raise(DivisaPorNaoEscalarError) { 10.reais.parcelar(2.reais) }
|
307
|
+
end
|
308
|
+
|
309
|
+
# initialize
|
310
|
+
def testa_se_cria_dinheiro_a_partir_de_float
|
311
|
+
verifica_se_cria_dinheiro_para 1.0
|
312
|
+
end
|
313
|
+
|
314
|
+
def testa_se_cria_dinheiro_a_partir_de_fixnum
|
315
|
+
verifica_se_cria_dinheiro_para 1
|
316
|
+
end
|
317
|
+
|
318
|
+
def testa_se_cria_dinheiro_a_partir_de_bigdecimal
|
319
|
+
verifica_se_cria_dinheiro_para BigDecimal.new("1")
|
320
|
+
end
|
321
|
+
|
322
|
+
def testa_se_cria_dinheiro_a_partir_de_string
|
323
|
+
verifica_se_cria_dinheiro_para "1"
|
324
|
+
end
|
325
|
+
|
326
|
+
def testa_se_rejeita_criacao_de_dinheiro_a_partir_de_string_invalida
|
327
|
+
QUANTIA_COM_FORMATO_INVALIDO.each do |quantia|
|
328
|
+
assert_raise DinheiroInvalidoError, "Deveria ter rejeitado [#{quantia}]" do
|
329
|
+
Dinheiro.new quantia
|
330
|
+
end
|
331
|
+
end
|
332
|
+
end
|
333
|
+
|
334
|
+
# + (soma)
|
335
|
+
def testa_soma
|
336
|
+
SOMA.each{ |esperado, soma| assert_equal esperado, soma }
|
337
|
+
end
|
338
|
+
|
339
|
+
# - (subtracao)
|
340
|
+
def testa_subtracao
|
341
|
+
SUBTRACAO.each { |esperado, subtracao| assert_equal esperado, subtracao }
|
342
|
+
end
|
343
|
+
|
344
|
+
# * (multiplicacao)
|
345
|
+
def testa_multiplicacao
|
346
|
+
MULTIPLICACAO.each { |esperado, multiplicacao| assert_equal esperado, multiplicacao }
|
347
|
+
end
|
348
|
+
|
349
|
+
# quantia_de
|
350
|
+
def testa_quantia_de
|
351
|
+
assert_equal 0, @dinheiro.quantia_de(0.real)
|
352
|
+
assert_equal 0, @dinheiro.quantia_de(0)
|
353
|
+
end
|
354
|
+
|
355
|
+
#por_extenso
|
356
|
+
def testa_por_extenso
|
357
|
+
assert_equal 'um real', 1.real.por_extenso
|
358
|
+
assert_equal 'um centavo', (0.01).real.por_extenso
|
359
|
+
assert_equal 'cem reais', 100.real.por_extenso
|
360
|
+
assert_equal 'cem reais e um centavo', (100.01).real.por_extenso
|
361
|
+
end
|
362
|
+
|
363
|
+
#por_extenso_em_reais
|
364
|
+
def testa_por_extenso_em_reais
|
365
|
+
assert_equal 'um real', 1.real.por_extenso_em_reais
|
366
|
+
assert_equal 'um centavo', (0.01).real.por_extenso_em_reais
|
367
|
+
assert_equal 'cem reais', 100.real.por_extenso_em_reais
|
368
|
+
assert_equal 'cem reais e um centavo', (100.01).real.por_extenso_em_reais
|
369
|
+
end
|
370
|
+
|
371
|
+
def testa_por_extenso_negativo
|
372
|
+
assert_equal 'um real negativo', -1.real.por_extenso_em_reais
|
373
|
+
assert_equal 'um centavo negativo', (-0.01).real.por_extenso_em_reais
|
374
|
+
assert_equal 'cem reais negativos', -100.real.por_extenso_em_reais
|
375
|
+
assert_equal 'cem reais e um centavo negativos', (-100.01).real.por_extenso_em_reais
|
376
|
+
assert_equal 'cento e dez reais negativos', (-110).real.por_extenso_em_reais
|
377
|
+
assert_equal 'vinte e dois reais negativos', -22.reais.por_extenso
|
378
|
+
assert_not_equal 'vinte e dois centavos negativos', -22.reais.por_extenso
|
379
|
+
assert_not_equal 'vinte e dois centavos', -22.reais.por_extenso
|
380
|
+
end
|
381
|
+
|
382
|
+
# to_f
|
383
|
+
def testa_to_f
|
384
|
+
assert_equal 2.30, 2.30.real.to_f
|
385
|
+
assert_equal 1000, 1000.real.to_f
|
386
|
+
end
|
387
|
+
|
388
|
+
# quantia_respeita_formato?
|
389
|
+
def testa_se_quantia_respeita_formato
|
390
|
+
QUANTIA_COM_FORMATO_VALIDO.each { |quantia| verifica_se_quantia_respeita_formato quantia }
|
391
|
+
end
|
392
|
+
|
393
|
+
# >, <, == (ordenacao)
|
394
|
+
def testa_comparacao_entre_dinheiro
|
395
|
+
COMPARACAO.each { |comparacao| assert comparacao }
|
396
|
+
end
|
397
|
+
|
398
|
+
def testa_comparacao_entre_possivel_dinheiro
|
399
|
+
COMPARACAO_COM_ESCALAR.each { |comparacao_com_escalar| assert comparacao_com_escalar }
|
400
|
+
end
|
401
|
+
|
402
|
+
# decimal
|
403
|
+
def testa_decimal_quando_todas_as_casas_estao_preenchidas
|
404
|
+
verifica_decimal("12")
|
405
|
+
end
|
406
|
+
|
407
|
+
def testa_decimal_quando_apenas_uma_das_casas_esta_preenchida
|
408
|
+
verifica_decimal("10", "1")
|
409
|
+
end
|
410
|
+
|
411
|
+
def testa_decimal_quando_nenhuma_das_casas_esta_preenchida
|
412
|
+
verifica_decimal("00", "")
|
413
|
+
end
|
414
|
+
|
415
|
+
def testa_se_transforma_em_string_que_represente_a_quantia_quando_tem_tres_digitos
|
416
|
+
verifica_se_transforma_em_string_corretamente "1.23", 123
|
417
|
+
end
|
418
|
+
|
419
|
+
def testa_se_transforma_em_string_que_represente_a_quantia_quando_tem_dois_digitos
|
420
|
+
verifica_se_transforma_em_string_corretamente "0.12", 12
|
421
|
+
end
|
422
|
+
|
423
|
+
def testa_se_transforma_em_string_que_represente_a_quantia_quando_tem_um_digito
|
424
|
+
verifica_se_transforma_em_string_corretamente "0.03", 3
|
425
|
+
end
|
426
|
+
|
427
|
+
def testa_se_transforma_em_string_para_valores_especiais
|
428
|
+
verifica_se_transforma_em_string_corretamente "-123112211.00", -12311221100
|
429
|
+
end
|
430
|
+
|
431
|
+
# parte_inteira
|
432
|
+
def testa_parte_inteira
|
433
|
+
PARTE_INTEIRA.each { |quantia| assert_equal "#{quantia}", Dinheiro.new(quantia).parte_inteira }
|
434
|
+
end
|
435
|
+
|
436
|
+
def testa_se_arredonda_valores_corretamente
|
437
|
+
ARREDONDAMENTO.each do |esperado, quantia|
|
438
|
+
assert_equal esperado, Dinheiro.new(quantia).quantia, "Deveria retornar #{esperado} para #{quantia}"
|
439
|
+
end
|
440
|
+
end
|
441
|
+
|
442
|
+
def testa_se_valor_decimal_cria_o_big_decimal_corretamente
|
443
|
+
assert_equal BigDecimal.new("1234.56"), Dinheiro.new("1234,56").valor_decimal
|
444
|
+
end
|
445
|
+
|
446
|
+
def testa_soma_de_dinheiro_com_big_decimal
|
447
|
+
assert_equal Dinheiro.new(200), BigDecimal.new("100").reais + "100".reais
|
448
|
+
end
|
449
|
+
|
450
|
+
def testa_zero_quando_eh_zero
|
451
|
+
assert Dinheiro.new(0).zero?
|
452
|
+
end
|
453
|
+
|
454
|
+
def testa_zero_quando_nao_eh_zero
|
455
|
+
assert !Dinheiro.new(1).zero?
|
456
|
+
end
|
457
|
+
|
458
|
+
private
|
459
|
+
|
460
|
+
def verifica_se_transforma_em_string_corretamente(quantia_esperada, quantia)
|
461
|
+
assert_equal quantia_esperada, @dinheiro.transforma_em_string_que_represente_a_quantia(quantia)
|
462
|
+
end
|
463
|
+
|
464
|
+
def verifica_decimal(esperado, quantia = esperado)
|
465
|
+
assert_equal esperado, @dinheiro.decimal("." + quantia)
|
466
|
+
assert_equal esperado, @dinheiro.decimal("," + quantia)
|
467
|
+
assert_equal esperado, @dinheiro.decimal(quantia) if quantia.blank?
|
468
|
+
end
|
469
|
+
|
470
|
+
def verifica_se_quantia_respeita_formato(quantia)
|
471
|
+
formatos_validos(quantia).each do |quantia_str|
|
472
|
+
assert 1.real.quantia_respeita_formato?(quantia_str), "O sistema deveria considerar o quantia '#{quantia_str}' dentro do formato valido."
|
473
|
+
end
|
474
|
+
end
|
475
|
+
|
476
|
+
def formatos_validos(quantia)
|
477
|
+
formatos_validos = []
|
478
|
+
quantias_validas(quantia).each do |quantia|
|
479
|
+
formatos_validos << quantia
|
480
|
+
[ "R$", "r$" ].each do |simbolo|
|
481
|
+
[ "", " ", " " ].each do |espacos|
|
482
|
+
formatos_validos << "#{simbolo}#{espacos}#{quantia}"
|
483
|
+
end
|
484
|
+
end
|
485
|
+
end
|
486
|
+
formatos_validos
|
487
|
+
end
|
488
|
+
|
489
|
+
def quantias_validas(quantia)
|
490
|
+
return [quantia] if [ ".", "," ].include?(quantia[0..0])
|
491
|
+
[ quantia, "-#{quantia}" ]
|
492
|
+
end
|
493
|
+
|
494
|
+
def verifica_se_cria_dinheiro_para(quantia)
|
495
|
+
assert quantia.para_dinheiro.kind_of?(Dinheiro)
|
496
|
+
end
|
497
|
+
|
498
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require File.dirname(__FILE__) + '/../lib/brdinheiro'
|
3
|
+
|
4
|
+
|
5
|
+
def tornar_metodos_publicos(clazz)
|
6
|
+
clazz.class_eval do
|
7
|
+
private_instance_methods.each { |instance_method| public instance_method }
|
8
|
+
private_methods.each { |method| public_class_method method }
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def p80 text
|
13
|
+
p '*'*80
|
14
|
+
p text
|
15
|
+
p '*'*80
|
16
|
+
end
|
metadata
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: brdinheiro
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- "Marcos Tapaj\xC3\xB3s"
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-06-22 00:00:00 -03:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: actionpack
|
17
|
+
version_requirement:
|
18
|
+
version_requirements: !ruby/object:Gem::Requirement
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.4.2
|
23
|
+
version:
|
24
|
+
- !ruby/object:Gem::Dependency
|
25
|
+
name: activerecord
|
26
|
+
version_requirement:
|
27
|
+
version_requirements: !ruby/object:Gem::Requirement
|
28
|
+
requirements:
|
29
|
+
- - ">="
|
30
|
+
- !ruby/object:Gem::Version
|
31
|
+
version: 1.15.3
|
32
|
+
version:
|
33
|
+
description: "brdinheiro \xC3\xA9 uma das gems que compoem o Brazilian Rails"
|
34
|
+
email: tapajos@gmail.com
|
35
|
+
executables: []
|
36
|
+
|
37
|
+
extensions: []
|
38
|
+
|
39
|
+
extra_rdoc_files: []
|
40
|
+
|
41
|
+
files:
|
42
|
+
- Rakefile
|
43
|
+
- README
|
44
|
+
- CHANGELOG
|
45
|
+
- TODO
|
46
|
+
- MIT-LICENSE
|
47
|
+
- lib/brdinheiro
|
48
|
+
- lib/brdinheiro/dinheiro.rb
|
49
|
+
- lib/brdinheiro/dinheiro_active_record.rb
|
50
|
+
- lib/brdinheiro/dinheiro_util.rb
|
51
|
+
- lib/brdinheiro/excecoes.rb
|
52
|
+
- lib/brdinheiro/number_portuguese.rb
|
53
|
+
- lib/brdinheiro/version.rb
|
54
|
+
- lib/brdinheiro.rb
|
55
|
+
- test/br_dinheiro_test.rb
|
56
|
+
- test/dinheiro_active_record_test.rb
|
57
|
+
- test/dinheiro_test.rb
|
58
|
+
- test/test_helper.rb
|
59
|
+
has_rdoc: true
|
60
|
+
homepage: http://www.improveit.com.br/software_livre/brazilian_rails
|
61
|
+
post_install_message:
|
62
|
+
rdoc_options: []
|
63
|
+
|
64
|
+
require_paths:
|
65
|
+
- lib
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: "0"
|
71
|
+
version:
|
72
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: "0"
|
77
|
+
version:
|
78
|
+
requirements:
|
79
|
+
- none
|
80
|
+
rubyforge_project: brdinheiro
|
81
|
+
rubygems_version: 1.1.1
|
82
|
+
signing_key:
|
83
|
+
specification_version: 2
|
84
|
+
summary: "brdinheiro \xC3\xA9 uma das gems que compoem o Brazilian Rails"
|
85
|
+
test_files: []
|
86
|
+
|