-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_money.py
83 lines (71 loc) · 3.01 KB
/
test_money.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import unittest
#
from money import Money
from portfolio import Portfolio
from bank import Bank
class TestMoney(unittest.TestCase):
def setUp(self):
self.bank = Bank()
self.bank.addExchangeRate('EUR', 'USD', 1.2)
self.bank.addExchangeRate('USD', 'KRW', 1100)
def testMultiplication(self):
tenEuros = Money(10, 'EUR')
twentyEuros = Money(20, 'EUR')
self.assertEqual(twentyEuros, tenEuros.times(2))
def testDivision(self):
originalMoney = Money(4002, 'KRW')
dividedMoney = Money(1000.5, 'KRW')
self.assertEqual(dividedMoney, originalMoney.divide(4))
def testAddition(self):
fiveDollars = Money(5, 'USD')
tenDollars = Money(10, 'USD')
fifteenDollars = Money(15, 'USD')
portfolio = Portfolio()
portfolio.add(fiveDollars, tenDollars)
self.assertEqual(fifteenDollars, portfolio.evaluate(self.bank, 'USD'))
def testAdditionOfDollarsAndEuros(self):
fiveDollars = Money(5, 'USD')
tenEuros = Money(10, 'EUR')
portfolio = Portfolio()
portfolio.add(fiveDollars, tenEuros)
expectedValue = Money(17, 'USD')
actualValue = portfolio.evaluate(self.bank, 'USD')
self.assertEqual(expectedValue, actualValue,
f'{expectedValue} != {actualValue}')
def testAdditionOfDollarsAndWons(self):
oneDollar = Money(1, 'USD')
elevenHundredWon = Money(1100, 'KRW')
portfolio = Portfolio()
portfolio.add(oneDollar, elevenHundredWon)
expectedValue = Money(2200, 'KRW')
actualValue = portfolio.evaluate(self.bank, 'KRW')
self.assertEqual(expectedValue, actualValue,
f'{expectedValue} != {actualValue}')
def testAdditionWithMultipleMissingExchangeRates(self):
oneDollar = Money(1, 'USD')
oneEuro = Money(1, 'EUR')
oneWon = Money(1, 'KRW')
portfolio = Portfolio()
portfolio.add(oneDollar, oneEuro, oneWon)
with self.assertRaisesRegex(
Exception,
'Missing exchange rate\(s\):\[USD\->Kalganid,EUR->Kalganid,KRW->Kalganid]',
):
portfolio.evaluate(self.bank, 'Kalganid')
def testConversionWithDifferentRatesBetweenTwoCurrencies(self):
tenEuros = Money(10, 'EUR')
expectedMoney = Money(12, 'USD')
self.assertEqual(expectedMoney, self.bank.convert(tenEuros, 'USD'))
self.bank.addExchangeRate('EUR', 'USD', 1.3)
expectedMoney = Money(13, 'USD')
self.assertEqual(expectedMoney, self.bank.convert(tenEuros, 'USD'))
def testWhatIsTheConversionRatesFromEURToUSD(self):
tenEuros = Money(10, 'EUR')
expectedMoney = Money(12, 'USD')
self.assertEqual(expectedMoney, self.bank.convert(tenEuros, 'USD'))
def testConversionWithMissingExchangeRate(self):
tenEuros = Money(10, 'EUR')
with self.assertRaisesRegex(Exception, 'EUR->Kalganid'):
self.bank.convert(tenEuros, 'Kalganid')
if __name__ == '__main__':
unittest.main()