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_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"
)