home · contact · privacy
Always check if item is saved before removal attempt.
[plomtask] / tests / processes.py
index 2ac8cf4cf7787be287792b583a7402c6ed013855..ce7f8571cc7aa84aaa6a8a4855febfeb97d879b9 100644 (file)
@@ -3,6 +3,7 @@ from unittest import TestCase
 from tests.utils import TestCaseWithDB, TestCaseWithServer
 from plomtask.processes import Process, ProcessStep, ProcessStepsNode
 from plomtask.conditions import Condition
 from tests.utils import TestCaseWithDB, TestCaseWithServer
 from plomtask.processes import Process, ProcessStep, ProcessStepsNode
 from plomtask.conditions import Condition
+from plomtask.todos import Todo
 from plomtask.exceptions import NotFoundException, HandledException
 
 
 from plomtask.exceptions import NotFoundException, HandledException
 
 
@@ -22,7 +23,7 @@ class TestsSansDB(TestCase):
 
 
 class TestsWithDB(TestCaseWithDB):
 
 
 class TestsWithDB(TestCaseWithDB):
-    """Mdule tests not requiring DB setup."""
+    """Module tests requiring DB setup."""
 
     def setUp(self) -> None:
         super().setUp()
 
     def setUp(self) -> None:
         super().setUp()
@@ -158,12 +159,14 @@ class TestsWithDB(TestCaseWithDB):
         self.assertEqual(self.proc1.title.history, p_loaded.title.history)
 
     def test_Process_removal(self) -> None:
         self.assertEqual(self.proc1.title.history, p_loaded.title.history)
 
     def test_Process_removal(self) -> None:
-        """Test removal of Processes."""
+        """Test removal of Processes and ProcessSteps."""
         assert isinstance(self.proc3.id_, int)
         self.proc1.remove(self.db_conn)
         self.assertEqual({self.proc2.id_, self.proc3.id_},
                          set(p.id_ for p in Process.all(self.db_conn)))
         self.proc2.set_steps(self.db_conn, [(None, self.proc3.id_, None)])
         assert isinstance(self.proc3.id_, int)
         self.proc1.remove(self.db_conn)
         self.assertEqual({self.proc2.id_, self.proc3.id_},
                          set(p.id_ for p in Process.all(self.db_conn)))
         self.proc2.set_steps(self.db_conn, [(None, self.proc3.id_, None)])
+        with self.assertRaises(HandledException):
+            self.proc3.remove(self.db_conn)
         self.proc2.explicit_steps[0].remove(self.db_conn)
         retrieved = Process.by_id(self.db_conn, self.proc2.id_)
         self.assertEqual(retrieved.explicit_steps, [])
         self.proc2.explicit_steps[0].remove(self.db_conn)
         retrieved = Process.by_id(self.db_conn, self.proc2.id_)
         self.assertEqual(retrieved.explicit_steps, [])
@@ -172,6 +175,12 @@ class TestsWithDB(TestCaseWithDB):
         self.proc2.remove(self.db_conn)
         with self.assertRaises(NotFoundException):
             ProcessStep.by_id(self.db_conn, step.id_)
         self.proc2.remove(self.db_conn)
         with self.assertRaises(NotFoundException):
             ProcessStep.by_id(self.db_conn, step.id_)
+        todo = Todo(None, self.proc3, False, '2024-01-01')
+        todo.save(self.db_conn)
+        with self.assertRaises(HandledException):
+            self.proc3.remove(self.db_conn)
+        todo.remove(self.db_conn)
+        self.proc3.remove(self.db_conn)
 
 
 class TestsWithServer(TestCaseWithServer):
 
 
 class TestsWithServer(TestCaseWithServer):
@@ -180,32 +189,24 @@ class TestsWithServer(TestCaseWithServer):
     def test_do_POST_process(self) -> None:
         """Test POST /process and its effect on the database."""
         self.assertEqual(0, len(Process.all(self.db_conn)))
     def test_do_POST_process(self) -> None:
         """Test POST /process and its effect on the database."""
         self.assertEqual(0, len(Process.all(self.db_conn)))
-        form_data = {'title': 'foo', 'description': 'foo', 'effort': 1.1}
-        self.check_post(form_data, '/process?id=', 302, '/process?id=1')
+        form_data = self.post_process()
         self.assertEqual(1, len(Process.all(self.db_conn)))
         self.check_post(form_data, '/process?id=FOO', 400)
         self.assertEqual(1, len(Process.all(self.db_conn)))
         self.check_post(form_data, '/process?id=FOO', 400)
-        form_data['effort'] = 'foo'
-        self.check_post(form_data, '/process?id=', 400)
+        self.check_post(form_data | {'effort': 'foo'}, '/process?id=', 400)
         self.check_post({}, '/process?id=', 400)
         self.check_post({}, '/process?id=', 400)
-        form_data = {'title': '', 'description': ''}
-        self.check_post(form_data, '/process?id=', 400)
-        form_data = {'title': '', 'effort': 1.1}
-        self.check_post(form_data, '/process?id=', 400)
-        form_data = {'description': '', 'effort': 1.0}
-        self.check_post(form_data, '/process?id=', 400)
+        self.check_post({'title': '', 'description': ''}, '/process?id=', 400)
+        self.check_post({'title': '', 'effort': 1.1}, '/process?id=', 400)
+        self.check_post({'description': '', 'effort': 1.0},
+                        '/process?id=', 400)
         self.assertEqual(1, len(Process.all(self.db_conn)))
         self.assertEqual(1, len(Process.all(self.db_conn)))
-        form_data = {'title': 'foo', 'description': 'foo', 'effort': 1.0,
-                     'condition': []}
-        self.check_post(form_data, '/process?id=', 302, '/process?id=2')
-        form_data['condition'] = [1]
-        self.check_post(form_data, '/process?id=', 404)
-        form_data_cond = {'title': 'foo', 'description': 'foo'}
-        self.check_post(form_data_cond, '/condition', 302, '/condition?id=1')
-        self.check_post(form_data, '/process?id=', 302, '/process?id=3')
-        form_data['disables'] = [1]
-        self.check_post(form_data, '/process?id=', 302, '/process?id=4')
-        form_data['enables'] = [1]
-        self.check_post(form_data, '/process?id=', 302, '/process?id=5')
+        form_data = {'title': 'foo', 'description': 'foo', 'effort': 1.0}
+        self.post_process(2, form_data | {'condition': []})
+        self.check_post(form_data | {'condition': [1]}, '/process?id=', 404)
+        self.check_post({'title': 'foo', 'description': 'foo'},
+                        '/condition', 302, '/condition?id=1')
+        self.post_process(3, form_data | {'condition': [1]})
+        self.post_process(4, form_data | {'disables': [1]})
+        self.post_process(5, form_data | {'enables': [1]})
         form_data['delete'] = ''
         self.check_post(form_data, '/process?id=', 404)
         self.check_post(form_data, '/process?id=6', 404)
         form_data['delete'] = ''
         self.check_post(form_data, '/process?id=', 404)
         self.check_post(form_data, '/process?id=6', 404)
@@ -213,8 +214,6 @@ class TestsWithServer(TestCaseWithServer):
 
     def test_do_GET(self) -> None:
         """Test /process and /processes response codes."""
 
     def test_do_GET(self) -> None:
         """Test /process and /processes response codes."""
-        self.check_get('/process', 200)
-        self.check_get('/process?id=', 200)
-        self.check_get('/process?id=0', 500)
-        self.check_get('/process?id=FOO', 400)
+        self.post_process()
+        self.check_get_defaults('/process')
         self.check_get('/processes', 200)
         self.check_get('/processes', 200)