1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
# encoding: utf-8
require "cases/helper"
require 'active_record/base'
require 'active_record/connection_adapters/postgresql_adapter'
class PostgresqlMoneyTest < ActiveRecord::TestCase
class PostgresqlMoney < ActiveRecord::Base; end
setup do
@connection = ActiveRecord::Base.connection
@connection.execute("set lc_monetary = 'C'")
end
def test_column
column = PostgresqlMoney.columns_hash["wealth"]
assert_equal :decimal, column.type
assert_equal "money", column.sql_type
assert_equal 2, column.scale
assert column.number?
assert_not column.text?
assert_not column.binary?
assert_not column.array
end
def test_money_values
@connection.execute("INSERT INTO postgresql_moneys (id, wealth) VALUES (1, '567.89'::money)")
@connection.execute("INSERT INTO postgresql_moneys (id, wealth) VALUES (2, '-567.89'::money)")
first_money = PostgresqlMoney.find(1)
second_money = PostgresqlMoney.find(2)
assert_equal 567.89, first_money.wealth
assert_equal(-567.89, second_money.wealth)
end
def test_money_type_cast
column = PostgresqlMoney.columns_hash['wealth']
assert_equal(12345678.12, column.type_cast("$12,345,678.12"))
assert_equal(12345678.12, column.type_cast("$12.345.678,12"))
assert_equal(-1.15, column.type_cast("-$1.15"))
assert_equal(-2.25, column.type_cast("($2.25)"))
end
def test_create_and_update_money
money = PostgresqlMoney.create(wealth: "987.65")
assert_equal 987.65, money.wealth
new_value = BigDecimal.new('123.45')
money.wealth = new_value
money.save!
money.reload
assert_equal new_value, money.wealth
end
end
|