testing new features
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
import pytest
|
||||
|
||||
from cashflow_model import CurrencyConverter, CurrencyError, ExchangeRate
|
||||
|
||||
|
||||
class TestExchangeRate:
|
||||
def test_to_dict_roundtrip(self):
|
||||
rate = ExchangeRate(from_currency="USD", to_currency="RUB", rate=80.0)
|
||||
d = rate.to_dict()
|
||||
r2 = ExchangeRate.from_dict(d)
|
||||
assert r2.from_currency == "USD"
|
||||
assert r2.to_currency == "RUB"
|
||||
assert r2.rate == 80.0
|
||||
|
||||
def test_defaults(self):
|
||||
r = ExchangeRate()
|
||||
assert r.from_currency == "USD"
|
||||
assert r.to_currency == "RUB"
|
||||
assert r.rate == 80.0
|
||||
|
||||
|
||||
class TestCurrencyConverter:
|
||||
def test_convert_usd_to_rub(self, sample_converter):
|
||||
result = sample_converter.convert(100, "USD", "RUB")
|
||||
assert result == 8000.0
|
||||
|
||||
def test_convert_rub_to_usd(self, sample_converter):
|
||||
result = sample_converter.convert(8000, "RUB", "USD")
|
||||
assert result == 100.0
|
||||
|
||||
def test_same_currency(self, sample_converter):
|
||||
result = sample_converter.convert(500, "USD", "USD")
|
||||
assert result == 500.0
|
||||
|
||||
def test_unknown_pair(self):
|
||||
converter = CurrencyConverter()
|
||||
with pytest.raises(CurrencyError):
|
||||
converter.convert(100, "USD", "RUB")
|
||||
|
||||
def test_negative_rate(self):
|
||||
converter = CurrencyConverter()
|
||||
with pytest.raises(CurrencyError):
|
||||
converter.set_rate("USD", "RUB", -1)
|
||||
|
||||
def test_zero_rate(self):
|
||||
converter = CurrencyConverter()
|
||||
with pytest.raises(CurrencyError):
|
||||
converter.set_rate("USD", "RUB", 0)
|
||||
|
||||
def test_inverse_auto(self):
|
||||
rate = ExchangeRate(from_currency="EUR", to_currency="RUB", rate=90.0)
|
||||
converter = CurrencyConverter([rate])
|
||||
assert converter.convert(900, "RUB", "EUR") == 10.0
|
||||
|
||||
def test_get_symbol(self, sample_converter):
|
||||
assert sample_converter.get_symbol("USD") == "$"
|
||||
assert sample_converter.get_symbol("RUB") == "₽"
|
||||
assert sample_converter.get_symbol("XYZ") == "XYZ"
|
||||
|
||||
def test_with_defaults(self):
|
||||
converter = CurrencyConverter.with_defaults()
|
||||
assert converter.convert(10, "USD", "RUB") == 800.0
|
||||
|
||||
def test_multiple_rates(self):
|
||||
rates = [
|
||||
ExchangeRate(from_currency="USD", to_currency="RUB", rate=80.0),
|
||||
ExchangeRate(from_currency="EUR", to_currency="RUB", rate=90.0),
|
||||
]
|
||||
converter = CurrencyConverter(rates)
|
||||
assert converter.convert(10, "USD", "RUB") == 800.0
|
||||
assert converter.convert(10, "EUR", "RUB") == 900.0
|
||||
assert converter.convert(900, "RUB", "EUR") == 10.0
|
||||
Reference in New Issue
Block a user