Source code for ai.analysis.money.money_test

import pytest

from ai.analysis.money.currency import Currency
from ai.analysis.money.money import Money


[docs] @pytest.fixture def eur_money(): return Money(100, Currency.EUR)
[docs] def test_initialization(): usd_money = Money(100) assert usd_money.amount == 100 assert usd_money.currency_type == Currency.USD
[docs] def test_convert_to(): converted = Money(100).convert_to(Currency.EUR) assert converted.currency_type == Currency.EUR assert converted.amount == pytest.approx( Money(100).amount * Currency.EUR.value_in_usd, rel=1e-2 )
[docs] def test_in_formatted(): assert Money(100).in_formatted() == "100.00 $" assert Money(100).in_formatted(decimals=0) == "100 $"
[docs] def test_int_addition(): usd_money = Money(100) added_money = usd_money + 50 assert added_money.amount == 150 assert added_money.currency_type == Currency.USD
[docs] def test_money_addition(): added_money = Money(100) + Money(200) assert added_money.amount == 300 assert added_money.currency_type == Currency.USD
[docs] def test_addition_with_different_currencies_failed(): usd_money = Money(100) with pytest.raises(ValueError): usd_money + Money(100, Currency.EUR)
[docs] def test_int_subtraction(): usd_money = Money(100) subtracted_money = usd_money - 50 assert subtracted_money.amount == 50 assert subtracted_money.currency_type == Currency.USD
[docs] def test_money_subtraction(): subtracted_money = Money(100) - Money(50) assert subtracted_money.amount == 50 assert subtracted_money.currency_type == Currency.USD
[docs] def test_subtraction_with_different_currencies_failed(): with pytest.raises(ValueError): Money(100) - Money(50, Currency.EUR)
[docs] def test_int_multiplication(): multiplied_money = Money(100) * 2 assert multiplied_money.amount == 200 assert multiplied_money.currency_type == Currency.USD
[docs] def test_money_multiplication(): multiplied_money = Money(100) * Money(2) assert multiplied_money.amount == 200 assert multiplied_money.currency_type == Currency.USD
[docs] def test_multiplication_with_different_currencies_failed(): with pytest.raises(ValueError): Money(100) * Money(2, Currency.EUR)
[docs] def test_int_division(): divided_money = Money(100) / 2 assert divided_money.amount == 50 assert divided_money.currency_type == Currency.USD
[docs] def test_money_division(): divided_money = Money(100) / Money(2) assert divided_money.amount == 50 assert divided_money.currency_type == Currency.USD
[docs] def test_division_with_different_currencies_failed(): with pytest.raises(ValueError): Money(100) / Money(2, Currency.EUR)
[docs] def test_equality(): assert Money(100) == Money(100) assert Money(100) != Money(50) assert Money(100) != Money(100, Currency.EUR) assert Money(1e-6) == Money(1e-6 + 1e-20)
[docs] def test_currency_conversion(): assert Money(100).convert_to(Currency.EUR).amount != 100, ( "it is very unlikely that the conversion rate is 1:1" )