From 4ec802df4167f2caa38773fc224fafe2d6646a87 Mon Sep 17 00:00:00 2001 From: ravi Date: Sun, 22 May 2016 14:25:13 +0530 Subject: [PATCH 1/3] added test cases for forex-python --- tests/test.py | 62 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 42 insertions(+), 20 deletions(-) diff --git a/tests/test.py b/tests/test.py index 61bd83b..461a2c3 100644 --- a/tests/test.py +++ b/tests/test.py @@ -1,18 +1,18 @@ +import datetime from unittest import TestCase from forex_python.converter import CurrencyRates +from forex_python.converter import RatesNotAvailableError -class TestBase(TestCase): - def setUp(self): - c = CurrencyRates() - - -class TestGetRates(TestBase): +class TestGetRates(TestCase): """ Test get_rates with valid(ex: USD) and invalid(ex: XYZ) currency code """ + def setUp(self): + self.c = CurrencyRates() + def test_get_rates_valid_code(self): - all_rates = c.get_rates('USD') + all_rates = self.c.get_rates('USD') # Check if return value of get_rates dictionary self.assertTrue(isinstance(all_rates, dict)) @@ -23,46 +23,68 @@ def test_get_rates_valid_code(self): # Test one rate in returned dict is float value self.assertTrue(isinstance(all_rates.get('INR'), float)) - def test_get_rates_invalid_code(self): - all_rates = c.get_rates('XYZ') + def test_get_rates_with_date(self): + date_obj = datetime.datetime.strptime('2010-05-10', "%Y-%m-%d").date() + all_rates = self.c.get_rates('USD', date_obj) # Check if return value of get_rates dictionary self.assertTrue(isinstance(all_rates, dict)) - # Test no values in dict(empty dict) - self.assertFalse(len(all_rates.keys())) + # Test at least one rate value returned + self.assertTrue(len(all_rates.keys())) - # Test one rate in returned dict is not float value - self.assertFalse(isinstance(all_rates.get('INR'), float)) + # Test one rate in returned dict is float value + self.assertTrue(isinstance(all_rates.get('INR'), float)) + + def test_get_rates_invalid_code(self): + self.assertRaises(RatesNotAvailableError, self.c.get_rates, 'XYZ') -class TestGetRate(TestBase): +class TestGetRate(TestCase): """ Test get_rate function using valid and invalid currency codes """ + def setUp(self): + self.c = CurrencyRates() def test_get_rate_with_valid_codes(self): - rate = c.get_rate(self, 'USD', 'INR') + rate = self.c.get_rate('USD', 'INR') + + # check if return value is float + self.assertTrue(isinstance(rate, float)) + + def test_get_rate_with_date(self): + date_obj = datetime.datetime.strptime('2010-05-10', "%Y-%m-%d").date() + rate = self.c.get_rate('USD', 'INR', date_obj) # check if return value is float self.assertTrue(isinstance(rate, float)) def test_get_rate_with_invalid_codes(self): # raise exception for invalid currency codes - self.assertRaises(RatesNotAvailableError, c.get_rate(self, 'ABCD', 'XYZ')) + self.assertRaises(RatesNotAvailableError, self.c.get_rate, 'ABCD', 'XYZ') -class TestAmountConvert(TestBase): +class TestAmountConvert(TestCase): """ test amount conversion from one currency to other """ + def setUp(self): + self.c = CurrencyRates() def test_amount_convert_valid_currency(self): - amount = c.convert('USD', 'INR', 10) + amount = self.c.convert('USD', 'INR', 10) # test if amount returned in float self.assertTrue(isinstance(amount, float)) - def test_amount_convert_valid_currency(self): + def test_amount_convert_date(self): + date_obj = datetime.datetime.strptime('2010-05-10', "%Y-%m-%d").date() + amount = self.c.convert('USD', 'INR', 10, date_obj) + + # test if amount returned in float + self.assertTrue(isinstance(amount, float)) + + def test_amount_convert_invalid_currency(self): # test if amount returned in float - self.assertRaises(RateNotFoundError, c.convert('ABC, 'XYZ', 10)) + self.assertRaises(RatesNotAvailableError, self.c.convert, 'ABC', 'XYZ', 10) From 73ec6ae16e337d975f403ca334062634be9cfdf0 Mon Sep 17 00:00:00 2001 From: ravi Date: Sun, 22 May 2016 14:54:21 +0530 Subject: [PATCH 2/3] added travis and coverall --- .travis.yml | 18 ++++++++++++++++++ forex_python/converter.py | 8 ++------ 2 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..3ae9b45 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,18 @@ +language: python + +python: + - "2.7" + - "3.2" + - "3.3" + - "3.4" + - "3.5" + +install: + - python setup.py install + - pip install nose + - pip install coveralls +script: + - nosetests --with-coverage --cover-package=forex_python + +after_success: + coveralls diff --git a/forex_python/converter.py b/forex_python/converter.py index cb8c2de..65ba926 100644 --- a/forex_python/converter.py +++ b/forex_python/converter.py @@ -1,5 +1,4 @@ import requests -import datetime class RatesNotAvailableError(Exception): @@ -20,11 +19,8 @@ def _source_url(self): def _get_date_string(self, date_obj): if date_obj is None: return 'latest' - try: - date_str = date_obj.strftime('%Y-%m-%d') - return date_str - except ValueError: - raise ValueError("Incorrect date String, date should be YYYY-MM-DD") + date_str = date_obj.strftime('%Y-%m-%d') + return date_str class CurrencyRates(Common): From e7928992148e993050a3549e3135c7a026f82681 Mon Sep 17 00:00:00 2001 From: ravi Date: Sun, 22 May 2016 14:57:13 +0530 Subject: [PATCH 3/3] drop python 3.2 support --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 3ae9b45..bc04fd2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,6 @@ language: python python: - "2.7" - - "3.2" - "3.3" - "3.4" - "3.5"