home · contact · privacy
Base core models on BaseModel providing sensible defaults.
[plomtask] / tests / processes.py
index 390b1302932dce72da1ebc375a5f1ec6f59d8eec..491a48f170a7375bdfc64ed067e00ef6fef8f69c 100644 (file)
@@ -4,7 +4,7 @@ from typing import Any
 from tests.utils import TestCaseWithDB, TestCaseWithServer
 from plomtask.processes import Process, ProcessStep
 from plomtask.conditions import Condition
 from tests.utils import TestCaseWithDB, TestCaseWithServer
 from plomtask.processes import Process, ProcessStep
 from plomtask.conditions import Condition
-from plomtask.exceptions import NotFoundException, BadFormatException
+from plomtask.exceptions import NotFoundException, HandledException
 
 
 class TestsSansDB(TestCase):
 
 
 class TestsSansDB(TestCase):
@@ -18,7 +18,7 @@ class TestsSansDB(TestCase):
 
     def test_Process_legal_ID(self) -> None:
         """Test Process cannot be instantiated with id_=0."""
 
     def test_Process_legal_ID(self) -> None:
         """Test Process cannot be instantiated with id_=0."""
-        with self.assertRaises(BadFormatException):
+        with self.assertRaises(HandledException):
             Process(0)
 
 
             Process(0)
 
 
@@ -28,61 +28,72 @@ class TestsWithDB(TestCaseWithDB):
     def setUp(self) -> None:
         super().setUp()
         self.proc1 = Process(None)
     def setUp(self) -> None:
         super().setUp()
         self.proc1 = Process(None)
-        self.proc1.save_without_steps(self.db_conn)
+        self.proc1.save(self.db_conn)
         self.proc2 = Process(None)
         self.proc2 = Process(None)
-        self.proc2.save_without_steps(self.db_conn)
+        self.proc2.save(self.db_conn)
         self.proc3 = Process(None)
         self.proc3 = Process(None)
-        self.proc3.save_without_steps(self.db_conn)
+        self.proc3.save(self.db_conn)
 
     def test_Process_ids(self) -> None:
 
     def test_Process_ids(self) -> None:
-        """Test Process.save_without_steps() re Process.id_."""
+        """Test Process.save() re Process.id_."""
         self.assertEqual(self.proc1.id_,
                          Process.by_id(self.db_conn, 1, create=False).id_)
         self.assertEqual(self.proc2.id_,
                          Process.by_id(self.db_conn, 2, create=False).id_)
         proc5 = Process(5)
         self.assertEqual(self.proc1.id_,
                          Process.by_id(self.db_conn, 1, create=False).id_)
         self.assertEqual(self.proc2.id_,
                          Process.by_id(self.db_conn, 2, create=False).id_)
         proc5 = Process(5)
-        proc5.save_without_steps(self.db_conn)
+        proc5.save(self.db_conn)
         self.assertEqual(proc5.id_,
                          Process.by_id(self.db_conn, 5, create=False).id_)
 
     def test_Process_steps(self) -> None:
         """Test addition, nesting, and non-recursion of ProcessSteps"""
         self.assertEqual(proc5.id_,
                          Process.by_id(self.db_conn, 5, create=False).id_)
 
     def test_Process_steps(self) -> None:
         """Test addition, nesting, and non-recursion of ProcessSteps"""
-        assert self.proc2.id_ is not None
-        assert self.proc3.id_ is not None
-        self.proc1.add_step(self.db_conn, None, self.proc2.id_, None)
+        def add_step(proc: Process,
+                     steps_proc: list[tuple[int | None, int, int | None]],
+                     step_tuple: tuple[int | None, int, int | None],
+                     expected_id: int) -> None:
+            steps_proc += [step_tuple]
+            proc.set_steps(self.db_conn, steps_proc)
+            steps_proc[-1] = (expected_id, step_tuple[1], step_tuple[2])
+        assert isinstance(self.proc2.id_, int)
+        assert isinstance(self.proc3.id_, int)
+        steps_proc1: list[tuple[int | None, int, int | None]] = []
+        add_step(self.proc1, steps_proc1, (None, self.proc2.id_, None), 1)
         p_1_dict: dict[int, dict[str, Any]] = {1: {
             'process': self.proc2, 'parent_id': None,
             'is_explicit': True, 'steps': {}, 'seen': False
         }}
         self.assertEqual(self.proc1.get_steps(self.db_conn, None), p_1_dict)
         p_1_dict: dict[int, dict[str, Any]] = {1: {
             'process': self.proc2, 'parent_id': None,
             'is_explicit': True, 'steps': {}, 'seen': False
         }}
         self.assertEqual(self.proc1.get_steps(self.db_conn, None), p_1_dict)
-        s_b = self.proc1.add_step(self.db_conn, None, self.proc3.id_, None)
+        add_step(self.proc1, steps_proc1, (None, self.proc3.id_, None), 2)
+        step_2 = self.proc1.explicit_steps[-1]
+        assert isinstance(step_2.id_, int)
         p_1_dict[2] = {
             'process': self.proc3, 'parent_id': None,
             'is_explicit': True, 'steps': {}, 'seen': False
         }
         self.assertEqual(self.proc1.get_steps(self.db_conn, None), p_1_dict)
         p_1_dict[2] = {
             'process': self.proc3, 'parent_id': None,
             'is_explicit': True, 'steps': {}, 'seen': False
         }
         self.assertEqual(self.proc1.get_steps(self.db_conn, None), p_1_dict)
-        s_c = self.proc2.add_step(self.db_conn, None, self.proc3.id_, None)
-        assert s_c.id_ is not None
+        steps_proc2: list[tuple[int | None, int, int | None]] = []
+        add_step(self.proc2, steps_proc2, (None, self.proc3.id_, None), 3)
         p_1_dict[1]['steps'] = {3: {
             'process': self.proc3, 'parent_id': None,
             'is_explicit': False, 'steps': {}, 'seen': False
         }}
         self.assertEqual(self.proc1.get_steps(self.db_conn, None), p_1_dict)
         p_1_dict[1]['steps'] = {3: {
             'process': self.proc3, 'parent_id': None,
             'is_explicit': False, 'steps': {}, 'seen': False
         }}
         self.assertEqual(self.proc1.get_steps(self.db_conn, None), p_1_dict)
-        self.proc1.add_step(self.db_conn, None, self.proc2.id_, s_b.id_)
+        add_step(self.proc1, steps_proc1, (None, self.proc2.id_, step_2.id_),
+                 4)
         p_1_dict[2]['steps'][4] = {
         p_1_dict[2]['steps'][4] = {
-            'process': self.proc2, 'parent_id': s_b.id_, 'seen': False,
+            'process': self.proc2, 'parent_id': step_2.id_, 'seen': False,
             'is_explicit': True, 'steps': {3: {
                 'process': self.proc3, 'parent_id': None,
                 'is_explicit': False, 'steps': {}, 'seen': True
                 }}}
         self.assertEqual(self.proc1.get_steps(self.db_conn, None), p_1_dict)
             'is_explicit': True, 'steps': {3: {
                 'process': self.proc3, 'parent_id': None,
                 'is_explicit': False, 'steps': {}, 'seen': True
                 }}}
         self.assertEqual(self.proc1.get_steps(self.db_conn, None), p_1_dict)
-        self.proc1.add_step(self.db_conn, None, self.proc3.id_, 999)
+        add_step(self.proc1, steps_proc1, (None, self.proc3.id_, 999), 5)
         p_1_dict[5] = {
             'process': self.proc3, 'parent_id': None,
             'is_explicit': True, 'steps': {}, 'seen': False
         }
         self.assertEqual(self.proc1.get_steps(self.db_conn, None), p_1_dict)
         p_1_dict[5] = {
             'process': self.proc3, 'parent_id': None,
             'is_explicit': True, 'steps': {}, 'seen': False
         }
         self.assertEqual(self.proc1.get_steps(self.db_conn, None), p_1_dict)
-        self.proc1.add_step(self.db_conn, None, self.proc3.id_, 3)
+        add_step(self.proc1, steps_proc1, (None, self.proc3.id_, 3), 6)
         p_1_dict[6] = {
             'process': self.proc3, 'parent_id': None,
             'is_explicit': True, 'steps': {}, 'seen': False
         p_1_dict[6] = {
             'process': self.proc3, 'parent_id': None,
             'is_explicit': True, 'steps': {}, 'seen': False
@@ -101,10 +112,10 @@ class TestsWithDB(TestCaseWithDB):
         for target in ('conditions', 'fulfills', 'undoes'):
             c1 = Condition(None, False)
             c1.save(self.db_conn)
         for target in ('conditions', 'fulfills', 'undoes'):
             c1 = Condition(None, False)
             c1.save(self.db_conn)
-            assert c1.id_ is not None
+            assert isinstance(c1.id_, int)
             c2 = Condition(None, False)
             c2.save(self.db_conn)
             c2 = Condition(None, False)
             c2.save(self.db_conn)
-            assert c2.id_ is not None
+            assert isinstance(c2.id_, int)
             self.proc1.set_conditions(self.db_conn, [], target)
             self.assertEqual(getattr(self.proc1, target), [])
             self.proc1.set_conditions(self.db_conn, [c1.id_], target)
             self.proc1.set_conditions(self.db_conn, [], target)
             self.assertEqual(getattr(self.proc1, target), [])
             self.proc1.set_conditions(self.db_conn, [c1.id_], target)
@@ -132,22 +143,25 @@ class TestsWithDB(TestCaseWithDB):
 
     def test_ProcessStep_singularity(self) -> None:
         """Test pointers made for single object keep pointing to it."""
 
     def test_ProcessStep_singularity(self) -> None:
         """Test pointers made for single object keep pointing to it."""
-        assert self.proc2.id_ is not None
-        step = self.proc1.add_step(self.db_conn, None, self.proc2.id_, None)
-        assert step.id_ is not None
+        assert isinstance(self.proc2.id_, int)
+        self.proc1.set_steps(self.db_conn, [(None, self.proc2.id_, None)])
+        step = self.proc1.explicit_steps[-1]
+        assert isinstance(step.id_, int)
         step_retrieved = ProcessStep.by_id(self.db_conn, step.id_)
         step.parent_step_id = 99
         self.assertEqual(step.parent_step_id, step_retrieved.parent_step_id)
 
     def test_Process_singularity(self) -> None:
         """Test pointers made for single object keep pointing to it."""
         step_retrieved = ProcessStep.by_id(self.db_conn, step.id_)
         step.parent_step_id = 99
         self.assertEqual(step.parent_step_id, step_retrieved.parent_step_id)
 
     def test_Process_singularity(self) -> None:
         """Test pointers made for single object keep pointing to it."""
-        assert self.proc2.id_ is not None
-        self.proc1.add_step(self.db_conn, None, self.proc2.id_, None)
+        assert isinstance(self.proc1.id_, int)
+        assert isinstance(self.proc2.id_, int)
+        self.proc1.set_steps(self.db_conn, [(None, self.proc2.id_, None)])
         p_retrieved = Process.by_id(self.db_conn, self.proc1.id_)
         self.assertEqual(self.proc1.explicit_steps, p_retrieved.explicit_steps)
 
     def test_Process_versioned_attributes_singularity(self) -> None:
         """Test behavior of VersionedAttributes on saving (with .title)."""
         p_retrieved = Process.by_id(self.db_conn, self.proc1.id_)
         self.assertEqual(self.proc1.explicit_steps, p_retrieved.explicit_steps)
 
     def test_Process_versioned_attributes_singularity(self) -> None:
         """Test behavior of VersionedAttributes on saving (with .title)."""
+        assert isinstance(self.proc1.id_, int)
         self.proc1.title.set('named')
         p_loaded = Process.by_id(self.db_conn, self.proc1.id_)
         self.assertEqual(self.proc1.title.history, p_loaded.title.history)
         self.proc1.title.set('named')
         p_loaded = Process.by_id(self.db_conn, self.proc1.id_)
         self.assertEqual(self.proc1.title.history, p_loaded.title.history)
@@ -190,6 +204,6 @@ class TestsWithServer(TestCaseWithServer):
         """Test /process and /processes response codes."""
         self.check_get('/process', 200)
         self.check_get('/process?id=', 200)
         """Test /process and /processes response codes."""
         self.check_get('/process', 200)
         self.check_get('/process?id=', 200)
-        self.check_get('/process?id=0', 400)
+        self.check_get('/process?id=0', 500)
         self.check_get('/process?id=FOO', 400)
         self.check_get('/processes', 200)
         self.check_get('/process?id=FOO', 400)
         self.check_get('/processes', 200)