home · contact · privacy
Add Todo.comment, and for that purpose basic SQL migration infrastructure.
[plomtask] / tests / conditions.py
index f825ba460400be22e650608bf0ecafe51e94e990..45c3df7cfff43fe0f365216e7b6555d9299fefb0 100644 (file)
@@ -1,64 +1,46 @@
 """Test Conditions module."""
 """Test Conditions module."""
-from unittest import TestCase
-from tests.utils import TestCaseWithDB, TestCaseWithServer
+from tests.utils import TestCaseWithDB, TestCaseWithServer, TestCaseSansDB
 from plomtask.conditions import Condition
 from plomtask.processes import Process
 from plomtask.todos import Todo
 from plomtask.exceptions import HandledException
 
 
 from plomtask.conditions import Condition
 from plomtask.processes import Process
 from plomtask.todos import Todo
 from plomtask.exceptions import HandledException
 
 
-class TestsSansDB(TestCase):
+class TestsSansDB(TestCaseSansDB):
     """Tests requiring no DB setup."""
     """Tests requiring no DB setup."""
+    checked_class = Condition
 
     def test_Condition_id_setting(self) -> None:
         """Test .id_ being set and its legal range being enforced."""
 
     def test_Condition_id_setting(self) -> None:
         """Test .id_ being set and its legal range being enforced."""
-        with self.assertRaises(HandledException):
-            Condition(0)
-        condition = Condition(5)
-        self.assertEqual(condition.id_, 5)
+        self.check_id_setting()
+
+    def test_Condition_versioned_defaults(self) -> None:
+        """Test defaults of VersionedAttributes."""
+        self.check_versioned_defaults({
+            'title': 'UNNAMED',
+            'description': ''})
 
 
 class TestsWithDB(TestCaseWithDB):
     """Tests requiring DB, but not server setup."""
     checked_class = Condition
 
 
 class TestsWithDB(TestCaseWithDB):
     """Tests requiring DB, but not server setup."""
     checked_class = Condition
-    default_ids = (1, 2, 3)
-
-    def versioned_condition(self) -> Condition:
-        """Create Condition with some VersionedAttribute values."""
-        c = Condition(None)
-        c.title.set('title1')
-        c.title.set('title2')
-        c.description.set('desc1')
-        c.description.set('desc2')
-        return c
 
     def test_Condition_saving_and_caching(self) -> None:
         """Test .save/.save_core."""
         kwargs = {'id_': 1, 'is_active': False}
         self.check_saving_and_caching(**kwargs)
         # check .id_ set if None, and versioned attributes too
 
     def test_Condition_saving_and_caching(self) -> None:
         """Test .save/.save_core."""
         kwargs = {'id_': 1, 'is_active': False}
         self.check_saving_and_caching(**kwargs)
         # check .id_ set if None, and versioned attributes too
-        c = self.versioned_condition()
+        c = Condition(None)
         c.save(self.db_conn)
         self.assertEqual(c.id_, 2)
         c.save(self.db_conn)
         self.assertEqual(c.id_, 2)
-        self.assertEqual(sorted(c.title.history.values()),
-                         ['title1', 'title2'])
-        self.assertEqual(sorted(c.description.history.values()),
-                         ['desc1', 'desc2'])
+        self.check_saving_of_versioned('title', str)
+        self.check_saving_of_versioned('description', str)
 
     def test_Condition_from_table_row(self) -> None:
         """Test .from_table_row() properly reads in class from DB"""
 
     def test_Condition_from_table_row(self) -> None:
         """Test .from_table_row() properly reads in class from DB"""
-        self.check_from_table_row(1)
-        c = self.versioned_condition()
-        c.save(self.db_conn)
-        assert isinstance(c.id_, int)
-        for row in self.db_conn.row_where(Condition.table_name, 'id', c.id_):
-            retrieved = Condition.from_table_row(self.db_conn, row)
-            # pylint: disable=no-member
-            self.assertEqual(sorted(retrieved.title.history.values()),
-                             ['title1', 'title2'])
-            # pylint: disable=no-member
-            self.assertEqual(sorted(retrieved.description.history.values()),
-                             ['desc1', 'desc2'])
+        self.check_from_table_row()
+        self.check_versioned_from_table_row('title', str)
+        self.check_versioned_from_table_row('description', str)
 
     def test_Condition_by_id(self) -> None:
         """Test .by_id(), including creation."""
 
     def test_Condition_by_id(self) -> None:
         """Test .by_id(), including creation."""
@@ -72,11 +54,16 @@ class TestsWithDB(TestCaseWithDB):
         """Test pointers made for single object keep pointing to it."""
         self.check_singularity('is_active', True)
 
         """Test pointers made for single object keep pointing to it."""
         self.check_singularity('is_active', True)
 
+    def test_Condition_versioned_attributes_singularity(self) -> None:
+        """Test behavior of VersionedAttributes on saving (with .title)."""
+        self.check_versioned_singularity()
+
     def test_Condition_remove(self) -> None:
         """Test .remove() effects on DB and cache."""
         self.check_remove()
         c = Condition(None)
         proc = Process(None)
     def test_Condition_remove(self) -> None:
         """Test .remove() effects on DB and cache."""
         self.check_remove()
         c = Condition(None)
         proc = Process(None)
+        proc.save(self.db_conn)
         todo = Todo(None, proc, False, '2024-01-01')
         for depender in (proc, todo):
             assert hasattr(depender, 'save')
         todo = Todo(None, proc, False, '2024-01-01')
         for depender in (proc, todo):
             assert hasattr(depender, 'save')