|
1 | 1 | import datetime |
2 | 2 | from unittest import TestCase |
3 | | -from forex_python.converter import get_rates, get_rate, convert, get_symbol, get_currency_name, RatesNotAvailableError |
| 3 | +from forex_python.converter import (get_rates, get_rate, convert, get_symbol, |
| 4 | + get_currency_name, RatesNotAvailableError, |
| 5 | + CurrencyRates, DecimalFloatMismatchError) |
| 6 | +from decimal import Decimal |
4 | 7 |
|
5 | 8 |
|
6 | 9 | class TestGetRates(TestCase): |
@@ -83,6 +86,66 @@ def test_amount_convert_invalid_currency(self): |
83 | 86 | self.assertRaises(RatesNotAvailableError, convert, 'ABC', 'XYZ', 10) |
84 | 87 |
|
85 | 88 |
|
| 89 | +class TestForceDecimalAmountConvert(TestCase): |
| 90 | + """ |
| 91 | + Test the force_decimal=True type enforcing |
| 92 | + """ |
| 93 | + |
| 94 | + def setUp(self): |
| 95 | + self.c = CurrencyRates(force_decimal=True) |
| 96 | + |
| 97 | + def test_amount_decimal_convert(self): |
| 98 | + amount = self.c.convert('USD', 'INR', Decimal('10.45')) |
| 99 | + |
| 100 | + self.assertTrue(isinstance(amount, Decimal)) |
| 101 | + |
| 102 | + def test_amount_decimal_convert_date(self): |
| 103 | + date_obj = datetime.datetime.strptime('2010-05-10', "%Y-%m-%d").date() |
| 104 | + amount = self.c.convert('USD', 'INR', Decimal('10.45'), date_obj) |
| 105 | + |
| 106 | + self.assertTrue(isinstance(amount, Decimal)) |
| 107 | + |
| 108 | + def test_amount_decimal_invalid_type(self): |
| 109 | + self.assertRaises(DecimalFloatMismatchError, self.c.convert, 'USD', 'INR', 10.45) |
| 110 | + |
| 111 | + def test_decimal_get_rates_valid_code(self): |
| 112 | + all_rates = self.c.get_rates('USD') |
| 113 | + # Check if return value of get_rates dictionary |
| 114 | + self.assertTrue(isinstance(all_rates, dict)) |
| 115 | + # Test at least one rate value returned |
| 116 | + self.assertTrue(len(all_rates.keys())) |
| 117 | + # Test one rate in returned dict is now a Decimal |
| 118 | + self.assertTrue(isinstance(all_rates.get('INR'), Decimal)) |
| 119 | + |
| 120 | + def test_decimal_get_rates_with_date(self): |
| 121 | + date_obj = datetime.datetime.strptime('2010-05-10', "%Y-%m-%d").date() |
| 122 | + all_rates = self.c.get_rates('USD', date_obj) |
| 123 | + # Check if return value of get_rates dictionary |
| 124 | + self.assertTrue(isinstance(all_rates, dict)) |
| 125 | + # Test at least one rate value returned |
| 126 | + self.assertTrue(len(all_rates.keys())) |
| 127 | + # Test one rate in returned dict is now a Decimal |
| 128 | + self.assertTrue(isinstance(all_rates.get('INR'), Decimal)) |
| 129 | + |
| 130 | + def test_decimal_get_rates_invalid_code(self): |
| 131 | + self.assertRaises(RatesNotAvailableError, self.c.get_rates, 'XYZ') |
| 132 | + |
| 133 | + def test_decimal_get_rate_with_valid_codes(self): |
| 134 | + rate = self.c.get_rate('USD', 'INR') |
| 135 | + # check if return value is Decimal |
| 136 | + self.assertTrue(isinstance(rate, Decimal)) |
| 137 | + |
| 138 | + def test_decimal_get_rate_with_date(self): |
| 139 | + date_obj = datetime.datetime.strptime('2010-05-10', "%Y-%m-%d").date() |
| 140 | + rate = self.c.get_rate('USD', 'INR', date_obj) |
| 141 | + # check if return value is Decimal |
| 142 | + self.assertTrue(isinstance(rate, Decimal)) |
| 143 | + |
| 144 | + def test_decimal_get_rate_with_invalid_codes(self): |
| 145 | + # raise exception for invalid currency codes |
| 146 | + self.assertRaises(RatesNotAvailableError, self.c.get_rate, 'ABCD', 'XYZ') |
| 147 | + |
| 148 | + |
86 | 149 | class TestCurrencySymbol(TestCase): |
87 | 150 | """ |
88 | 151 | test currency symbols from currency codes |
|
0 commit comments