Skip to content

Commit

Permalink
Update test_app.py
Browse files Browse the repository at this point in the history
Update tests
  • Loading branch information
jltk authored Sep 20, 2024
1 parent 5387fc4 commit e5c42f5
Showing 1 changed file with 69 additions and 63 deletions.
132 changes: 69 additions & 63 deletions tests/test_app.py
Original file line number Diff line number Diff line change
@@ -1,86 +1,92 @@
import unittest
from unittest.mock import patch, MagicMock
from pathlib import Path
import tkinter as tk
import json
from todo_app.app import TodoApp, Task, TaskStatus, ThemeColors
from pathlib import Path
import sys
sys.path.append('../')
from todo_app.todo_app import TodoApp

class TestTodoApp(unittest.TestCase):

@patch('todo_app.app.Path.read_text')
def setUp(self):
self.root = tk.Tk()
self.app = TodoApp(self.root)

def tearDown(self):
self.root.destroy()

@patch('todo_app.todo_app.Path.read_text')
def test_load_tasks(self, mock_read_text):
mock_read_text.return_value = json.dumps([
{"name": "Task 1", "status": "PENDING", "urgent": False},
{"name": "Task 2", "status": "DONE", "urgent": True}
])
tasks = TodoApp._load_tasks()
self.assertEqual(len(tasks), 2)
self.assertIsInstance(tasks[0], Task)
self.assertEqual(tasks[0].name, "Task 1")
self.assertEqual(tasks[0].status, TaskStatus.PENDING)
self.assertFalse(tasks[0].urgent)
self.assertEqual(tasks[1].name, "Task 2")
self.assertEqual(tasks[1].status, TaskStatus.DONE)
self.assertTrue(tasks[1].urgent)
mock_tasks = [
{"name": "Task 1", "done": False, "cancelled": False, "urgent": False, "separator": False},
{"name": "Task 2", "done": True, "cancelled": False, "urgent": True, "separator": False},
{"name": "───────", "separator": True, "title": False}
]
mock_read_text.return_value = json.dumps(mock_tasks)

tasks = self.app.load_tasks()
self.assertEqual(len(tasks), 3)
self.assertEqual(tasks[0]['name'], "Task 1")
self.assertFalse(tasks[0]['done'])
self.assertTrue(tasks[1]['done'])
self.assertTrue(tasks[1]['urgent'])
self.assertTrue(tasks[2]['separator'])

@patch('todo_app.app.Path.write_text')
@patch('todo_app.todo_app.Path.write_text')
def test_save_tasks(self, mock_write_text):
tasks = [
Task("Task 1", TaskStatus.PENDING, False),
Task("Task 2", TaskStatus.DONE, True)
self.app.tasks = [
{"name": "Task 1", "done": False, "cancelled": False, "urgent": False, "separator": False},
{"name": "Task 2", "done": True, "cancelled": False, "urgent": True, "separator": False},
{"name": "───────", "separator": True, "title": False}
]
TodoApp._save_tasks(tasks)
self.app.save_tasks()
mock_write_text.assert_called_once()
saved_data = json.loads(mock_write_text.call_args[0][0])
self.assertEqual(len(saved_data), 2)
self.assertEqual(len(saved_data), 3)
self.assertEqual(saved_data[0]['name'], "Task 1")
self.assertEqual(saved_data[0]['status'], "PENDING")
self.assertFalse(saved_data[0]['urgent'])
self.assertEqual(saved_data[1]['name'], "Task 2")
self.assertEqual(saved_data[1]['status'], "DONE")
self.assertFalse(saved_data[0]['done'])
self.assertTrue(saved_data[1]['urgent'])
self.assertTrue(saved_data[2]['separator'])

def test_toggle_dark_mode(self):
app = TodoApp(MagicMock())
initial_mode = app.is_dark_mode
app._toggle_dark_mode()
self.assertNotEqual(initial_mode, app.is_dark_mode)

def test_get_theme_colors(self):
app = TodoApp(MagicMock())
light_colors = app._get_theme_colors()
self.assertEqual(light_colors, ThemeColors.LIGHT.value)
app.is_dark_mode = True
dark_colors = app._get_theme_colors()
self.assertEqual(dark_colors, ThemeColors.DARK.value)
initial_mode = self.app.is_dark_mode
self.app.toggle_dark_mode()
self.assertNotEqual(initial_mode, self.app.is_dark_mode)

def test_add_task(self):
app = TodoApp(MagicMock())
app.entry = MagicMock()
app.entry.get.return_value = "New Task"
app._add_task()
self.assertEqual(len(app.tasks), 1)
self.assertEqual(app.tasks[0].name, "New Task")
self.assertEqual(app.tasks[0].status, TaskStatus.PENDING)
self.assertFalse(app.tasks[0].urgent)
self.app.entry = MagicMock()
self.app.entry.get.return_value = "New Task"
self.app.add_task()
self.assertEqual(len(self.app.tasks), 1)
self.assertEqual(self.app.tasks[0]['name'], "New Task")
self.assertFalse(self.app.tasks[0]['done'])

def test_remove_selected_tasks(self):
app = TodoApp(MagicMock())
app.tasks = [Task("Task 1"), Task("Task 2"), Task("Task 3")]
app.listbox = MagicMock()
app.listbox.curselection.return_value = [1]
app._remove_selected_tasks()
self.assertEqual(len(app.tasks), 2)
self.assertEqual(app.tasks[0].name, "Task 1")
self.assertEqual(app.tasks[1].name, "Task 3")
@patch('todo_app.todo_app.TodoApp.populate_listbox')
@patch('todo_app.todo_app.TodoApp.save_tasks')
def test_remove_selected_tasks(self, mock_save, mock_populate):
self.app.tasks = [
{"name": "Task 1", "done": False, "cancelled": False, "urgent": False, "separator": False},
{"name": "Task 2", "done": False, "cancelled": False, "urgent": False, "separator": False}
]
self.app.listbox = MagicMock()
self.app.listbox.curselection.return_value = [0]
self.app.remove_selected_tasks()
self.assertEqual(len(self.app.tasks), 1)
self.assertEqual(self.app.tasks[0]['name'], "Task 2")

def test_mark_selected_tasks_done(self):
app = TodoApp(MagicMock())
app.tasks = [Task("Task 1"), Task("Task 2")]
app.listbox = MagicMock()
app.listbox.curselection.return_value = [0]
app._mark_selected_tasks_done()
self.assertEqual(app.tasks[0].status, TaskStatus.DONE)
self.assertEqual(app.tasks[1].status, TaskStatus.PENDING)
@patch('todo_app.todo_app.TodoApp.populate_listbox')
@patch('todo_app.todo_app.TodoApp.save_tasks')
def test_mark_selected_tasks_done(self, mock_save, mock_populate):
self.app.tasks = [
{"name": "Task 1", "done": False, "cancelled": False, "urgent": False, "separator": False},
{"name": "Task 2", "done": False, "cancelled": False, "urgent": False, "separator": False}
]
self.app.listbox = MagicMock()
self.app.listbox.curselection.return_value = [0]
self.app.mark_selected_tasks_done()
self.assertTrue(self.app.tasks[0]['done'])
self.assertFalse(self.app.tasks[1]['done'])

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

0 comments on commit e5c42f5

Please sign in to comment.