-
Notifications
You must be signed in to change notification settings - Fork 0
/
ToDoListTest.py
210 lines (185 loc) · 9.08 KB
/
ToDoListTest.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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
import unittest
from io import StringIO
from unittest.mock import patch
from Format import Format
from ToDoList import ToDoList
class ToDoListTest(unittest.TestCase):
@patch('builtins.input', return_value="Meet Ema at 7")
def test_adding_single_task_in_todo_and_matching_view_output_with_expected(self, mock_input):
formatter = Format()
todo = ToDoList(formatter)
todo.add_task()
with patch('sys.stdout', new=StringIO()) as fake_out:
todo.view_tasks()
self.assertEqual("Incomplete Tasks:\n\n1. Meet Ema at 7\n", fake_out.getvalue())
@patch('builtins.input', side_effect=["Meet Ema at 7", "Complete the assignment"])
def test_adding_two_tasks_in_todo_and_checking_if_view_output_matches_expected(self, mock_input):
formatter = Format()
todo = ToDoList(formatter)
todo.add_task()
todo.add_task()
with patch('sys.stdout', new=StringIO()) as fake_out:
todo.view_tasks()
self.assertEqual("Incomplete Tasks:\n\n1. Meet Ema at 7\n2. Complete the assignment\n", fake_out.getvalue())
@patch('builtins.input', side_effect=["Meet Ema at 7", "Complete the assignment"])
def test_adding_two_tasks_in_two_todo_and_checking_if_output_matches_expected(self, mock_input):
formatter = Format()
todo = ToDoList(formatter)
todo.add_task()
todo1 = ToDoList(formatter)
todo1.add_task()
with patch('sys.stdout', new=StringIO()) as fake_out:
todo.view_tasks()
self.assertEqual("Incomplete Tasks:\n\n1. Meet Ema at 7\n", fake_out.getvalue())
@patch('builtins.input', return_value='')
def test_adding_no_task(self, mock_input):
formatter = Format()
todo = ToDoList(formatter)
with patch('sys.stdout', new=StringIO()) as fake_out:
todo.add_task()
self.assertEqual("Empty Task\n", fake_out.getvalue())
@patch('builtins.input', side_effect=["Meet Ema at 7:00", 1, "Meet Ema at 8:00"])
def test_adding_task_and_editing_there_itself(self, mock_input):
formatter = Format()
todo = ToDoList(formatter)
todo.add_task()
with patch('sys.stdout', new=StringIO()) as fake_out:
todo.view_tasks()
self.assertEqual("Incomplete Tasks:\n\n1. Meet Ema at 7:00\n", fake_out.getvalue())
todo.edit_task()
with patch('sys.stdout', new=StringIO()) as fake_out:
todo.view_tasks()
self.assertEqual("Incomplete Tasks:\n\n1. Meet Ema at 8:00\n", fake_out.getvalue())
def test_empty_todo_list(self):
formatter = Format()
todo = ToDoList(formatter)
with patch('sys.stdout', new=StringIO()) as fake_out:
todo.view_tasks()
self.assertEqual("Your TODO list is empty!\n", fake_out.getvalue())
@patch('builtins.input', side_effect=["Have Lunch at 1:00pm", "Meet Ema at 7:00", 2, "Meet Stacy at 8:00"])
def test_adding_two_task_and_editing_second_task(self, mock_input):
formatter = Format()
todo = ToDoList(formatter)
todo.add_task()
todo.add_task()
with patch('sys.stdout', new=StringIO()) as fake_out:
todo.view_tasks()
self.assertEqual("Incomplete Tasks:\n\n1. Have Lunch at 1:00pm\n2. Meet Ema at 7:00\n", fake_out.getvalue())
todo.edit_task()
with patch('sys.stdout', new=StringIO()) as fake_out:
todo.view_tasks()
self.assertEqual("Incomplete Tasks:\n\n1. Have Lunch at 1:00pm\n2. Meet Stacy at 8:00\n",
fake_out.getvalue())
@patch('builtins.input', side_effect=["Have Lunch at 1:00pm", "Meet Ema at 7:00", 2])
def test_marking_a_task_as_complete_moves_it_to_the_complete_list(self, mock_input):
formatter = Format()
todo = ToDoList(formatter)
todo.add_task()
todo.add_task()
todo.mark_completed()
with patch('sys.stdout', new=StringIO()) as fake_out:
todo.view_tasks()
self.assertEqual("Incomplete Tasks:\n\n1. Have Lunch at 1:00pm\n\nComplete Tasks:\n\n1. Meet Ema at 7:00\n",
fake_out.getvalue())
@patch('builtins.input',
side_effect=["Have Lunch at 1:00pm", "Meet Ema at 7:00", "Do your assignments", "Sleep", 2])
def test_the_list_order_is_retained_when_a_task_from_middle_is_marked_as_complete(self, mock_input):
formatter = Format()
todo = ToDoList(formatter)
todo.add_task()
todo.add_task()
todo.add_task()
todo.add_task()
todo.mark_completed()
with patch('sys.stdout', new=StringIO()) as fake_out:
todo.view_tasks()
self.assertEqual(
"Incomplete Tasks:\n\n1. Have Lunch at 1:00pm\n2. Do your assignments\n3. Sleep\n\nComplete Tasks:\n\n1. Meet Ema at 7:00\n",
fake_out.getvalue())
@patch('builtins.input',
side_effect=["Have Lunch at 1:00pm", "Meet Ema at 7:00", "Do your assignments", "Sleep", 7])
def test_the_task_which_is_not_in_list_can_not_be_marked_as_completed(self, mock_input):
formatter = Format()
todo = ToDoList(formatter)
todo.add_task()
todo.add_task()
todo.add_task()
todo.add_task()
with patch('sys.stdout', new=StringIO()) as fake_out:
todo.mark_completed()
self.assertEqual(
"Incomplete Tasks:\n\n1. Have Lunch at 1:00pm\n2. Meet Ema at 7:00\n3. Do your assignments\n4. Sleep\nThe task you're trying to mark is not present in the list\n",
fake_out.getvalue())
@patch('builtins.input',
side_effect=["Have Lunch at 1:00pm", "Meet Ema at 7:00", "Do your assignments", "Sleep", -1])
def test_when_the_task_number_is_negative_it_can_not_be_marked_as_completed(self, mock_input):
formatter = Format()
todo = ToDoList(formatter)
todo.add_task()
todo.add_task()
todo.add_task()
todo.add_task()
with patch('sys.stdout', new=StringIO()) as fake_out:
todo.mark_completed()
self.assertEqual(
"Incomplete Tasks:\n\n1. Have Lunch at 1:00pm\n2. Meet Ema at 7:00\n3. Do your assignments\n4. Sleep\nThe task you're trying to mark is not present in the list\n",
fake_out.getvalue())
def test_when_TODO_list_is_empty_mark_as_complete_is_not_allowed(self):
formatter = Format()
todo = ToDoList(formatter)
with patch('sys.stdout', new=StringIO()) as fake_out:
todo.mark_completed()
self.assertEqual("Your TODO list is empty!\n", fake_out.getvalue())
@patch('builtins.input',
side_effect=["Have Lunch at 1:00pm", "Send Email at 3:00", "Meeting at 4:00"])
def test_when_saving_tasks_in_a_file(self, mock_input):
formatter = Format()
todo = ToDoList(formatter)
todo.add_task()
todo.add_task()
todo.add_task()
todo.save_task()
with patch('sys.stdout', new=StringIO()) as fake_out:
with open("MyTasks.txt", "r") as file:
content = file.readlines()
all_tasks = ""
for _ in content:
all_tasks += _
self.assertEqual("Incomplete Tasks:\n\n1. Have Lunch at 1:00pm\n2. Send Email at 3:00\n3. Meeting at 4:00",
all_tasks)
def test_when_TODO_list_is_empty_then_no_task_to_delete(self):
formatter = Format()
todo = ToDoList(formatter)
with patch('sys.stdout', new=StringIO()) as fake_out:
todo.delete_task()
self.assertEqual("Your Todo List is empty\n", fake_out.getvalue())
@patch('builtins.input', side_effect=["Meet Ema at 7:00", 1, 1])
def test_when_TODO_list_is_not_empty_then_one_task_to_delete(self, mock_list_type):
formatter = Format()
todo = ToDoList(formatter)
todo.add_task()
with patch('sys.stdout', new=StringIO()) as fake_out:
todo.delete_task()
self.assertEqual("Your task has been deleted successfully\n",
fake_out.getvalue())
@patch('builtins.input', side_effect=["Meet Ema at 7:00", 1, 2, 1])
def test_when_TODO_list_is_not_empty_and_list_type_is_given_then_one_task_to_delete(self, mock_list_type):
formatter = Format()
todo = ToDoList(formatter)
todo.add_task()
todo.mark_completed()
with patch('sys.stdout', new=StringIO()) as fake_out:
todo.delete_task()
self.assertEqual("Your task has been deleted successfully\n",
fake_out.getvalue())
@patch('builtins.input', side_effect=["Meet Rishabh", 1])
def test_when_incomplete_list_is_empty_and_completed_list_has_elements(self, mock_list_type):
formatter = Format()
todo = ToDoList(formatter)
todo.add_task()
todo.mark_completed()
with patch('sys.stdout', new=StringIO()) as fake_out:
todo.view_tasks()
self.assertEqual("Complete Tasks:\n\n1. Meet Rishabh\n", fake_out.getvalue())
if __name__ == '__main__':
unittest.main()