def test_inversion_on_zero_amount(self): m = Money(0, 'USD') expected = Money(0, 'USD') actual = m.get_inverse() assert expected == actual
def test_inversion_on_negative_amount(self): m = Money(-500, 'USD') expected = Money(500, 'USD') actual = m.get_inverse() assert expected == actual
def test_rounding_to_currency_precision(self): m1 = Money(40000, "USD", 4) rounded = m1.round_to(2) assert rounded.get_amount() == 400 assert rounded.precise_amount == 400 assert rounded.precision == 2
def test_lifting_precision(self): m1 = Money(400, "USD") lifted = m1.round_to(4) assert lifted.precise_amount == 40000, "Precise amount {0} is not equal to 40000".format(m1.precise_amount) assert lifted == m1, "Currency amount {0} is not equal to 400".format(lifted.get_amount())
def test_using_currency_without_precision_int(self): amount = 2500 expected = 2500 # Yen has no fractional amounts m = Money(amount, 'JPY') assert m.get_amount() == expected
def test_materialized_fractional_amounts(self): m1 = Money(400, "USD") m2 = Money(40001, "USD", 4) assert m2.materialize() == m1
def test_highest_precision_with_lifted_money(self): m1 = Money(400, "USD") m2 = Money(40000, "USD", 4) assert Money.highest_precision(m1, m2) == 4
def test_using_currency_without_precision_float(self): amount = 2500.0 expected = 2500 m = Money(amount, 'JPY') assert m.get_amount() == expected
def test_passing_int_uses_exact(self): initial = 2500 expected = 2500 m = Money(initial, 'USD') assert m.get_amount() == expected
def test_passing_float_stores_as_int(self): initial = 25.0 expected = 2500 m = Money(initial, 'USD') assert m.get_amount() == expected