home · contact · privacy
Minor tests refactoring.
[plomtask] / tests / processes.py
index c718677f78e7afea5a95fdaa65e3c3981df96f1b..06ed257689b0601e814a074c454cabe6ea0b6c98 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
 
 
@@ -157,6 +158,30 @@ class TestsWithDB(TestCaseWithDB):
         p_loaded = Process.by_id(self.db_conn, self.proc1.id_)
         self.assertEqual(self.proc1.title.history, p_loaded.title.history)
 
         p_loaded = Process.by_id(self.db_conn, self.proc1.id_)
         self.assertEqual(self.proc1.title.history, p_loaded.title.history)
 
+    def test_Process_removal(self) -> None:
+        """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)])
+        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.set_steps(self.db_conn, [(None, self.proc3.id_, None)])
+        step = retrieved.explicit_steps[0]
+        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):
     """Module tests against our HTTP server/handler (and database)."""
 
 class TestsWithServer(TestCaseWithServer):
     """Module tests against our HTTP server/handler (and database)."""
@@ -165,7 +190,7 @@ class TestsWithServer(TestCaseWithServer):
         """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}
         """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, '/')
+        self.check_post(form_data, '/process?id=', 302, '/process?id=1')
         self.assertEqual(1, len(Process.all(self.db_conn)))
         self.check_post(form_data, '/process?id=FOO', 400)
         form_data['effort'] = 'foo'
         self.assertEqual(1, len(Process.all(self.db_conn)))
         self.check_post(form_data, '/process?id=FOO', 400)
         form_data['effort'] = 'foo'
@@ -180,21 +205,24 @@ class TestsWithServer(TestCaseWithServer):
         self.assertEqual(1, len(Process.all(self.db_conn)))
         form_data = {'title': 'foo', 'description': 'foo', 'effort': 1.0,
                      'condition': []}
         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, '/')
+        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'}
         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, '/')
-        self.check_post(form_data, '/process?id=', 302, '/')
+        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]
         form_data['disables'] = [1]
-        self.check_post(form_data, '/process?id=', 302, '/')
+        self.check_post(form_data, '/process?id=', 302, '/process?id=4')
         form_data['enables'] = [1]
         form_data['enables'] = [1]
-        self.check_post(form_data, '/process?id=', 302, '/')
+        self.check_post(form_data, '/process?id=', 302, '/process?id=5')
+        form_data['delete'] = ''
+        self.check_post(form_data, '/process?id=', 404)
+        self.check_post(form_data, '/process?id=6', 404)
+        self.check_post(form_data, '/process?id=5', 302, '/processes')
 
     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)
+        form_data = {'title': 'foo', 'description': 'foo', 'effort': 1.1}
+        self.check_post(form_data, '/process?id=', 302, '/process?id=1')
+        self.check_get_defaults('/process')
         self.check_get('/processes', 200)
         self.check_get('/processes', 200)