home · contact · privacy
Add most basic Todo family relations.
[plomtask] / tests / todos.py
index db4ad9ca1c828145ae6baaa1c764d0f005f7fc65..7ae6b64d4a58d6727659c870e5c84e7e7fea4074 100644 (file)
@@ -3,7 +3,8 @@ from tests.utils import TestCaseWithDB, TestCaseWithServer
 from plomtask.todos import Todo
 from plomtask.days import Day
 from plomtask.processes import Process
-from plomtask.exceptions import NotFoundException
+from plomtask.exceptions import (NotFoundException, BadFormatException,
+                                 HandledException)
 
 
 class TestsWithDB(TestCaseWithDB):
@@ -38,6 +39,26 @@ class TestsWithDB(TestCaseWithDB):
         self.assertEqual(Todo.by_date(self.db_conn, day2.date), [])
         self.assertEqual(Todo.by_date(self.db_conn, 'foo'), [])
 
+    def test_Todo_children(self) -> None:
+        """Test Todo.children relations."""
+        day = Day('2024-01-01')
+        process = Process(None)
+        process.save_without_steps(self.db_conn)
+        todo_1 = Todo(None, process, False, day)
+        todo_2 = Todo(None, process, False, day)
+        with self.assertRaises(HandledException):
+            todo_1.add_child(todo_2)
+        todo_1.save(self.db_conn)
+        with self.assertRaises(HandledException):
+            todo_1.add_child(todo_2)
+        todo_2.save(self.db_conn)
+        todo_1.add_child(todo_2)
+        todo_1.save(self.db_conn)
+        todo_retrieved = Todo.by_id(self.db_conn, todo_1.id_)
+        self.assertEqual(todo_retrieved.children, [todo_2])
+        with self.assertRaises(BadFormatException):
+            todo_2.add_child(todo_1)
+
     def test_Todo_singularity(self) -> None:
         """Test pointers made for single object keep pointing to it."""
         day = Day('2024-01-01')
@@ -57,7 +78,7 @@ class TestsWithDB(TestCaseWithDB):
 class TestsWithServer(TestCaseWithServer):
     """Tests against our HTTP server/handler (and database)."""
 
-    def test_do_POST_todo(self) -> None:
+    def test_do_POST_day(self) -> None:
         """Test Todo posting of POST /day."""
         form_data = {'title': '', 'description': '', 'effort': 1}
         self.check_post(form_data, '/process?id=', 302, '/')
@@ -83,6 +104,36 @@ class TestsWithServer(TestCaseWithServer):
         self.assertEqual(todo1.process.id_, process2.id_)
         self.assertEqual(todo1.is_done, False)
 
+    def test_do_POST_todo(self) -> None:
+        """Test POST /todo."""
+        form_data = {'title': '', 'description': '', 'effort': 1}
+        self.check_post(form_data, '/process', 302, '/')
+        form_data = {'comment': '', 'new_todo': 1}
+        self.check_post(form_data, '/day?date=2024-01-01', 302, '/')
+        form_data = {}
+        self.check_post(form_data, '/todo=', 404)
+        self.check_post(form_data, '/todo?id=', 404)
+        self.check_post(form_data, '/todo?id=FOO', 400)
+        self.check_post(form_data, '/todo?id=0', 404)
+        self.check_post(form_data, '/todo?id=1', 302, '/')
+        todo1 = Todo.by_date(self.db_conn, '2024-01-01')[0]
+        self.assertEqual(todo1.children, [])
+        form_data = {'adopt': 'foo'}
+        self.check_post(form_data, '/todo?id=1', 400)
+        form_data = {'adopt': 1}
+        self.check_post(form_data, '/todo?id=1', 400)
+        form_data = {'adopt': 2}
+        self.check_post(form_data, '/todo?id=1', 404)
+        form_data = {'comment': '', 'new_todo': 1}
+        self.check_post(form_data, '/day?date=2024-01-01', 302, '/')
+        form_data = {'adopt': 2}
+        self.check_post(form_data, '/todo?id=1', 302, '/')
+        self.db_conn.cached_todos = {}
+        todo1 = Todo.by_date(self.db_conn, '2024-01-01')[0]
+        todo2 = Todo.by_date(self.db_conn, '2024-01-01')[1]
+        self.assertEqual(todo1.children, [todo2])
+        self.check_post(form_data, '/todo?id=1', 400, '/')
+
     def test_do_GET_todo(self) -> None:
         """Test GET /todo response codes."""
         form_data = {'title': '', 'description': '', 'effort': 1}