Skip to content

Commit e5c42f5

Browse files
authored
Update test_app.py
Update tests
1 parent 5387fc4 commit e5c42f5

File tree

1 file changed

+69
-63
lines changed

1 file changed

+69
-63
lines changed

tests/test_app.py

Lines changed: 69 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,86 +1,92 @@
11
import unittest
22
from unittest.mock import patch, MagicMock
3-
from pathlib import Path
3+
import tkinter as tk
44
import json
5-
from todo_app.app import TodoApp, Task, TaskStatus, ThemeColors
5+
from pathlib import Path
6+
import sys
7+
sys.path.append('../')
8+
from todo_app.todo_app import TodoApp
69

710
class TestTodoApp(unittest.TestCase):
811

9-
@patch('todo_app.app.Path.read_text')
12+
def setUp(self):
13+
self.root = tk.Tk()
14+
self.app = TodoApp(self.root)
15+
16+
def tearDown(self):
17+
self.root.destroy()
18+
19+
@patch('todo_app.todo_app.Path.read_text')
1020
def test_load_tasks(self, mock_read_text):
11-
mock_read_text.return_value = json.dumps([
12-
{"name": "Task 1", "status": "PENDING", "urgent": False},
13-
{"name": "Task 2", "status": "DONE", "urgent": True}
14-
])
15-
tasks = TodoApp._load_tasks()
16-
self.assertEqual(len(tasks), 2)
17-
self.assertIsInstance(tasks[0], Task)
18-
self.assertEqual(tasks[0].name, "Task 1")
19-
self.assertEqual(tasks[0].status, TaskStatus.PENDING)
20-
self.assertFalse(tasks[0].urgent)
21-
self.assertEqual(tasks[1].name, "Task 2")
22-
self.assertEqual(tasks[1].status, TaskStatus.DONE)
23-
self.assertTrue(tasks[1].urgent)
21+
mock_tasks = [
22+
{"name": "Task 1", "done": False, "cancelled": False, "urgent": False, "separator": False},
23+
{"name": "Task 2", "done": True, "cancelled": False, "urgent": True, "separator": False},
24+
{"name": "───────", "separator": True, "title": False}
25+
]
26+
mock_read_text.return_value = json.dumps(mock_tasks)
27+
28+
tasks = self.app.load_tasks()
29+
self.assertEqual(len(tasks), 3)
30+
self.assertEqual(tasks[0]['name'], "Task 1")
31+
self.assertFalse(tasks[0]['done'])
32+
self.assertTrue(tasks[1]['done'])
33+
self.assertTrue(tasks[1]['urgent'])
34+
self.assertTrue(tasks[2]['separator'])
2435

25-
@patch('todo_app.app.Path.write_text')
36+
@patch('todo_app.todo_app.Path.write_text')
2637
def test_save_tasks(self, mock_write_text):
27-
tasks = [
28-
Task("Task 1", TaskStatus.PENDING, False),
29-
Task("Task 2", TaskStatus.DONE, True)
38+
self.app.tasks = [
39+
{"name": "Task 1", "done": False, "cancelled": False, "urgent": False, "separator": False},
40+
{"name": "Task 2", "done": True, "cancelled": False, "urgent": True, "separator": False},
41+
{"name": "───────", "separator": True, "title": False}
3042
]
31-
TodoApp._save_tasks(tasks)
43+
self.app.save_tasks()
3244
mock_write_text.assert_called_once()
3345
saved_data = json.loads(mock_write_text.call_args[0][0])
34-
self.assertEqual(len(saved_data), 2)
46+
self.assertEqual(len(saved_data), 3)
3547
self.assertEqual(saved_data[0]['name'], "Task 1")
36-
self.assertEqual(saved_data[0]['status'], "PENDING")
37-
self.assertFalse(saved_data[0]['urgent'])
38-
self.assertEqual(saved_data[1]['name'], "Task 2")
39-
self.assertEqual(saved_data[1]['status'], "DONE")
48+
self.assertFalse(saved_data[0]['done'])
4049
self.assertTrue(saved_data[1]['urgent'])
50+
self.assertTrue(saved_data[2]['separator'])
4151

4252
def test_toggle_dark_mode(self):
43-
app = TodoApp(MagicMock())
44-
initial_mode = app.is_dark_mode
45-
app._toggle_dark_mode()
46-
self.assertNotEqual(initial_mode, app.is_dark_mode)
47-
48-
def test_get_theme_colors(self):
49-
app = TodoApp(MagicMock())
50-
light_colors = app._get_theme_colors()
51-
self.assertEqual(light_colors, ThemeColors.LIGHT.value)
52-
app.is_dark_mode = True
53-
dark_colors = app._get_theme_colors()
54-
self.assertEqual(dark_colors, ThemeColors.DARK.value)
53+
initial_mode = self.app.is_dark_mode
54+
self.app.toggle_dark_mode()
55+
self.assertNotEqual(initial_mode, self.app.is_dark_mode)
5556

5657
def test_add_task(self):
57-
app = TodoApp(MagicMock())
58-
app.entry = MagicMock()
59-
app.entry.get.return_value = "New Task"
60-
app._add_task()
61-
self.assertEqual(len(app.tasks), 1)
62-
self.assertEqual(app.tasks[0].name, "New Task")
63-
self.assertEqual(app.tasks[0].status, TaskStatus.PENDING)
64-
self.assertFalse(app.tasks[0].urgent)
58+
self.app.entry = MagicMock()
59+
self.app.entry.get.return_value = "New Task"
60+
self.app.add_task()
61+
self.assertEqual(len(self.app.tasks), 1)
62+
self.assertEqual(self.app.tasks[0]['name'], "New Task")
63+
self.assertFalse(self.app.tasks[0]['done'])
6564

66-
def test_remove_selected_tasks(self):
67-
app = TodoApp(MagicMock())
68-
app.tasks = [Task("Task 1"), Task("Task 2"), Task("Task 3")]
69-
app.listbox = MagicMock()
70-
app.listbox.curselection.return_value = [1]
71-
app._remove_selected_tasks()
72-
self.assertEqual(len(app.tasks), 2)
73-
self.assertEqual(app.tasks[0].name, "Task 1")
74-
self.assertEqual(app.tasks[1].name, "Task 3")
65+
@patch('todo_app.todo_app.TodoApp.populate_listbox')
66+
@patch('todo_app.todo_app.TodoApp.save_tasks')
67+
def test_remove_selected_tasks(self, mock_save, mock_populate):
68+
self.app.tasks = [
69+
{"name": "Task 1", "done": False, "cancelled": False, "urgent": False, "separator": False},
70+
{"name": "Task 2", "done": False, "cancelled": False, "urgent": False, "separator": False}
71+
]
72+
self.app.listbox = MagicMock()
73+
self.app.listbox.curselection.return_value = [0]
74+
self.app.remove_selected_tasks()
75+
self.assertEqual(len(self.app.tasks), 1)
76+
self.assertEqual(self.app.tasks[0]['name'], "Task 2")
7577

76-
def test_mark_selected_tasks_done(self):
77-
app = TodoApp(MagicMock())
78-
app.tasks = [Task("Task 1"), Task("Task 2")]
79-
app.listbox = MagicMock()
80-
app.listbox.curselection.return_value = [0]
81-
app._mark_selected_tasks_done()
82-
self.assertEqual(app.tasks[0].status, TaskStatus.DONE)
83-
self.assertEqual(app.tasks[1].status, TaskStatus.PENDING)
78+
@patch('todo_app.todo_app.TodoApp.populate_listbox')
79+
@patch('todo_app.todo_app.TodoApp.save_tasks')
80+
def test_mark_selected_tasks_done(self, mock_save, mock_populate):
81+
self.app.tasks = [
82+
{"name": "Task 1", "done": False, "cancelled": False, "urgent": False, "separator": False},
83+
{"name": "Task 2", "done": False, "cancelled": False, "urgent": False, "separator": False}
84+
]
85+
self.app.listbox = MagicMock()
86+
self.app.listbox.curselection.return_value = [0]
87+
self.app.mark_selected_tasks_done()
88+
self.assertTrue(self.app.tasks[0]['done'])
89+
self.assertFalse(self.app.tasks[1]['done'])
8490

8591
if __name__ == "__main__":
8692
unittest.main()

0 commit comments

Comments
 (0)