-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_Client_portfolio.py
More file actions
119 lines (88 loc) · 3.96 KB
/
test_Client_portfolio.py
File metadata and controls
119 lines (88 loc) · 3.96 KB
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
"""
Test file for testing the DataCollection modules.
"""
import unittest
from copy import deepcopy
from Client.portfolio import Stock, Portfolio, InvalidRemovalOfSharesException, InsufficientFundsException
class Test_ClientPortfolio(unittest.TestCase):
def setUp(self):
stocks = [Stock("MSFT", 200, 5), Stock("AAPL", 250, 7)]
self.port = Portfolio(1000.0, 1000.0, stocks)
def test_Init(self):
stocks = [Stock("MSFT", 200, 5), Stock("AAPL", 250, 7)]
self.port = Portfolio(1000.0, 1000.0, stocks)
portStocks = self.port.Stocks
st = portStocks["MSFT"]
self.assertEqual(st.NumShares, 5)
self.assertEqual(st.AvgCost, 200)
st = portStocks["AAPL"]
self.assertEqual(st.NumShares, 7)
self.assertEqual(st.AvgCost, 250)
def testOwnedValidBuyStock(self):
self.port.buyStock("MSFT", 5, 200.0)
self.assertEqual(self.port.CashForInvestment, 0)
self.assertEqual(self.port.NetCash, 0)
self.assertEqual(self.port.Stocks["MSFT"].NumShares, 10)
def testNewValidBuyStock(self):
self.port.buyStock("V", 5, 150.0)
self.assertEqual(self.port.CashForInvestment, 250)
self.assertEqual(self.port.NetCash, 250)
self.assertEqual(self.port.Stocks["V"].NumShares, 5)
def testInValidBuyStock(self):
self.assertRaises(InsufficientFundsException, self.port.buyStock, "MSFT", 20, 200.0)
portStocks = self.port.Stocks
st = portStocks["MSFT"]
self.assertEqual(st.NumShares, 5)
self.assertEqual(st.AvgCost, 200)
self.assertEqual(self.port.CashForInvestment, 1000)
self.assertEqual(self.port.NetCash, 1000)
def testInvalidSellStock(self):
self.assertRaises(KeyError, self.port.sellStock, "V", 2, 100)
self.assertEqual(self.port.CashForInvestment, 1000)
self.assertEqual(self.port.NetCash, 1000)
def testValidSellStock(self):
self.port.sellStock("MSFT", 2, 100)
self.assertEqual(self.port.CashForInvestment, 1000)
self.assertEqual(self.port.NetCash, 1200)
self.assertEqual(self.port.Stocks["MSFT"].NumShares, 3)
class Test_StockClass(unittest.TestCase):
def setUp(self):
self.stock = Stock("MSFT", 200.0, 8)
assert (self.stock.NumShares == 8)
assert (self.stock.AvgCost == 200.0)
assert (self.stock.TickerSymbol == "MSFT")
assert (self.stock.TotalCost == 1600.0)
def test_percentGain(self):
assert (self.stock.percentGain(250.0) == 0.25)
assert (self.stock.percentGain(150.0) == -0.25)
assert (self.stock.percentGain(200.0) == 0.0)
def test_addShares(self):
self.stock.addShares(4, 200.0)
self.assertEqual(self.stock.NumShares, 12)
self.assertEqual(self.stock.AvgCost, 200.0)
self.assertEqual(self.stock.TotalCost, 2400)
self.stock.addShares(4, 250)
self.assertEqual(self.stock.NumShares, 16)
self.assertEqual(self.stock.AvgCost, 212.5)
self.assertEqual(self.stock.TotalCost, 3400)
def test_invalidRemoveShares(self):
self.assertRaises(InvalidRemovalOfSharesException, self.stock.removeShares, 40)
def test_validRemoveShares(self):
self.stock.removeShares(4)
self.assertEqual(self.stock.NumShares, 4)
self.assertEqual(self.stock.TotalCost, 800)
self.stock.removeShares(4)
self.assertEqual(self.stock.NumShares, 0)
self.assertEqual(self.stock.TotalCost, 0)
def test_TickerSymbol(self):
assert (self.stock.TickerSymbol == "MSFT")
if __name__ == "__main__":
test_classes_to_run = [Test_ClientPortfolio, Test_StockClass]
loader = unittest.TestLoader()
suites_list = []
for test_class in test_classes_to_run:
suite = loader.loadTestsFromTestCase(test_class)
suites_list.append(suite)
big_suite = unittest.TestSuite(suites_list)
runner = unittest.TextTestRunner()
results = runner.run(big_suite)