Skip to content

Commit 7e8e96d

Browse files
author
Ravi kumar
committed
Merge pull request #3 from ravigadila/converter
Converter
2 parents 1f567cd + e792899 commit 7e8e96d

3 files changed

Lines changed: 61 additions & 26 deletions

File tree

.travis.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
language: python
2+
3+
python:
4+
- "2.7"
5+
- "3.3"
6+
- "3.4"
7+
- "3.5"
8+
9+
install:
10+
- python setup.py install
11+
- pip install nose
12+
- pip install coveralls
13+
script:
14+
- nosetests --with-coverage --cover-package=forex_python
15+
16+
after_success:
17+
coveralls

forex_python/converter.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import requests
2-
import datetime
32

43

54
class RatesNotAvailableError(Exception):
@@ -20,11 +19,8 @@ def _source_url(self):
2019
def _get_date_string(self, date_obj):
2120
if date_obj is None:
2221
return 'latest'
23-
try:
24-
date_str = date_obj.strftime('%Y-%m-%d')
25-
return date_str
26-
except ValueError:
27-
raise ValueError("Incorrect date String, date should be YYYY-MM-DD")
22+
date_str = date_obj.strftime('%Y-%m-%d')
23+
return date_str
2824

2925

3026
class CurrencyRates(Common):

tests/test.py

Lines changed: 42 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1+
import datetime
12
from unittest import TestCase
23
from forex_python.converter import CurrencyRates
4+
from forex_python.converter import RatesNotAvailableError
35

46

5-
class TestBase(TestCase):
6-
def setUp(self):
7-
c = CurrencyRates()
8-
9-
10-
class TestGetRates(TestBase):
7+
class TestGetRates(TestCase):
118
"""
129
Test get_rates with valid(ex: USD) and invalid(ex: XYZ) currency code
1310
"""
11+
def setUp(self):
12+
self.c = CurrencyRates()
13+
1414
def test_get_rates_valid_code(self):
15-
all_rates = c.get_rates('USD')
15+
all_rates = self.c.get_rates('USD')
1616

1717
# Check if return value of get_rates dictionary
1818
self.assertTrue(isinstance(all_rates, dict))
@@ -23,46 +23,68 @@ def test_get_rates_valid_code(self):
2323
# Test one rate in returned dict is float value
2424
self.assertTrue(isinstance(all_rates.get('INR'), float))
2525

26-
def test_get_rates_invalid_code(self):
27-
all_rates = c.get_rates('XYZ')
26+
def test_get_rates_with_date(self):
27+
date_obj = datetime.datetime.strptime('2010-05-10', "%Y-%m-%d").date()
28+
all_rates = self.c.get_rates('USD', date_obj)
2829

2930
# Check if return value of get_rates dictionary
3031
self.assertTrue(isinstance(all_rates, dict))
3132

32-
# Test no values in dict(empty dict)
33-
self.assertFalse(len(all_rates.keys()))
33+
# Test at least one rate value returned
34+
self.assertTrue(len(all_rates.keys()))
3435

35-
# Test one rate in returned dict is not float value
36-
self.assertFalse(isinstance(all_rates.get('INR'), float))
36+
# Test one rate in returned dict is float value
37+
self.assertTrue(isinstance(all_rates.get('INR'), float))
38+
39+
def test_get_rates_invalid_code(self):
40+
self.assertRaises(RatesNotAvailableError, self.c.get_rates, 'XYZ')
3741

3842

39-
class TestGetRate(TestBase):
43+
class TestGetRate(TestCase):
4044
"""
4145
Test get_rate function using valid and invalid currency codes
4246
"""
47+
def setUp(self):
48+
self.c = CurrencyRates()
4349

4450
def test_get_rate_with_valid_codes(self):
45-
rate = c.get_rate(self, 'USD', 'INR')
51+
rate = self.c.get_rate('USD', 'INR')
52+
53+
# check if return value is float
54+
self.assertTrue(isinstance(rate, float))
55+
56+
def test_get_rate_with_date(self):
57+
date_obj = datetime.datetime.strptime('2010-05-10', "%Y-%m-%d").date()
58+
rate = self.c.get_rate('USD', 'INR', date_obj)
4659

4760
# check if return value is float
4861
self.assertTrue(isinstance(rate, float))
4962

5063
def test_get_rate_with_invalid_codes(self):
5164
# raise exception for invalid currency codes
52-
self.assertRaises(RatesNotAvailableError, c.get_rate(self, 'ABCD', 'XYZ'))
65+
self.assertRaises(RatesNotAvailableError, self.c.get_rate, 'ABCD', 'XYZ')
5366

5467

55-
class TestAmountConvert(TestBase):
68+
class TestAmountConvert(TestCase):
5669
"""
5770
test amount conversion from one currency to other
5871
"""
72+
def setUp(self):
73+
self.c = CurrencyRates()
5974

6075
def test_amount_convert_valid_currency(self):
61-
amount = c.convert('USD', 'INR', 10)
76+
amount = self.c.convert('USD', 'INR', 10)
6277

6378
# test if amount returned in float
6479
self.assertTrue(isinstance(amount, float))
6580

66-
def test_amount_convert_valid_currency(self):
81+
def test_amount_convert_date(self):
82+
date_obj = datetime.datetime.strptime('2010-05-10', "%Y-%m-%d").date()
83+
amount = self.c.convert('USD', 'INR', 10, date_obj)
84+
85+
# test if amount returned in float
86+
self.assertTrue(isinstance(amount, float))
87+
88+
def test_amount_convert_invalid_currency(self):
6789
# test if amount returned in float
68-
self.assertRaises(RateNotFoundError, c.convert('ABC, 'XYZ', 10))
90+
self.assertRaises(RatesNotAvailableError, self.c.convert, 'ABC', 'XYZ', 10)

0 commit comments

Comments
 (0)