brdinheiro 0.0.1
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.
- 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
|
+
|