-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_module.py
150 lines (135 loc) · 6.25 KB
/
test_module.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
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
import unittest
import budget
from budget import create_spend_chart
class UnitTests(unittest.TestCase):
def setUp(self):
self.food = budget.Category("Food")
self.entertainment = budget.Category("Entertainment")
self.business = budget.Category("Business")
def test_deposit(self):
self.food.deposit(900, "deposit")
actual = self.food.ledger[0]
expected = {"amount": 900, "description": "deposit"}
self.assertEqual(
actual, expected,
'Expected `deposit` method to create a specific object in the ledger instance variable.'
)
def test_deposit_no_description(self):
self.food.deposit(45.56)
actual = self.food.ledger[0]
expected = {"amount": 45.56, "description": ""}
self.assertEqual(
actual, expected,
'Expected calling `deposit` method with no description to create a blank description.'
)
def test_withdraw(self):
self.food.deposit(900, "deposit")
self.food.withdraw(45.67, "milk, cereal, eggs, bacon, bread")
actual = self.food.ledger[1]
expected = {
"amount": -45.67,
"description": "milk, cereal, eggs, bacon, bread"
}
self.assertEqual(
actual, expected,
'Expected `withdraw` method to create a specific object in the ledger instance variable.'
)
def test_withdraw_no_description(self):
self.food.deposit(900, "deposit")
good_withdraw = self.food.withdraw(45.67)
actual = self.food.ledger[1]
expected = {"amount": -45.67, "description": ""}
self.assertEqual(
actual, expected,
'Expected `withdraw` method with no description to create a blank description.'
)
self.assertEqual(good_withdraw, True,
'Expected `transfer` method to return `True`.')
def test_get_balance(self):
self.food.deposit(900, "deposit")
self.food.withdraw(45.67, "milk, cereal, eggs, bacon, bread")
actual = self.food.get_balance()
expected = 854.33
self.assertEqual(actual, expected, 'Expected balance to be 854.33')
def test_transfer(self):
self.food.deposit(900, "deposit")
self.food.withdraw(45.67, "milk, cereal, eggs, bacon, bread")
transfer_amount = 20
food_balance_before = self.food.get_balance()
entertainment_balance_before = self.entertainment.get_balance()
good_transfer = self.food.transfer(transfer_amount, self.entertainment)
food_balance_after = self.food.get_balance()
entertainment_balance_after = self.entertainment.get_balance()
actual = self.food.ledger[2]
expected = {
"amount": -transfer_amount,
"description": "Transfer to Entertainment"
}
self.assertEqual(
actual, expected,
'Expected `transfer` method to create a specific ledger item in food object.'
)
self.assertEqual(good_transfer, True,
'Expected `transfer` method to return `True`.')
self.assertEqual(
food_balance_before - food_balance_after, transfer_amount,
'Expected `transfer` method to reduce balance in source category.')
self.assertEqual(
entertainment_balance_after - entertainment_balance_before,
transfer_amount,
'Expected `transfer` method to increase balance in target category.'
)
actual = self.entertainment.ledger[0]
expected = {
"amount": transfer_amount,
"description": "Transfer from Food"
}
self.assertEqual(
actual, expected,
'Expected `transfer` method to create a specific ledger item in entertainment object.'
)
def test_check_funds(self):
self.food.deposit(10, "deposit")
actual = self.food.check_funds(20)
expected = False
self.assertEqual(actual, expected,
'Expected `check_funds` method to be False')
actual = self.food.check_funds(10)
expected = True
self.assertEqual(actual, expected,
'Expected `check_funds` method to be True')
def test_withdraw_no_funds(self):
self.food.deposit(100, "deposit")
good_withdraw = self.food.withdraw(100.10)
self.assertEqual(good_withdraw, False,
'Expected `withdraw` method to return `False`.')
def test_transfer_no_funds(self):
self.food.deposit(100, "deposit")
good_transfer = self.food.transfer(200, self.entertainment)
self.assertEqual(good_transfer, False,
'Expected `transfer` method to return `False`.')
def test_to_string(self):
self.food.deposit(900, "deposit")
self.food.withdraw(45.67, "milk, cereal, eggs, bacon, bread")
self.food.transfer(20, self.entertainment)
actual = str(self.food)
expected = f"*************Food*************\ndeposit 900.00\nmilk, cereal, eggs, bac -45.67\nTransfer to Entertainme -20.00\nTotal: 834.33"
self.assertEqual(
actual, expected,
'Expected different string representation of object.')
def test_create_spend_chart(self):
self.food.deposit(900, "deposit")
self.entertainment.deposit(900, "deposit")
self.business.deposit(900, "deposit")
self.food.withdraw(105.55)
self.entertainment.withdraw(33.40)
self.business.withdraw(10.99)
actual = create_spend_chart(
[self.business, self.food, self.entertainment])
expected = "Percentage spent by category\n100| \n 90| \n 80| \n 70| o \n 60| o \n 50| o \n 40| o \n 30| o \n 20| o o \n 10| o o \n 0| o o o \n ----------\n B F E \n u o n \n s o t \n i d e \n n r \n e t \n s a \n s i \n n \n m \n e \n n \n t "
self.assertEqual(
actual, expected,
'Expected different chart representation. Check that all spacing is exact.'
)
if __name__ == "__main__":
unittest.main()