from plomtask.exceptions import NotFoundException, HandledException
+class TestCaseSansDB(TestCase):
+ """Tests requiring no DB setup."""
+ checked_class: Any
+
+ def check_id_setting(self) -> None:
+ """Test .id_ being set and its legal range being enforced."""
+ with self.assertRaises(HandledException):
+ self.checked_class(0)
+ obj = self.checked_class(5)
+ self.assertEqual(obj.id_, 5)
+
+ def check_versioned_defaults(self, attrs: dict[str, Any]) -> None:
+ """Test defaults of VersionedAttributes."""
+ obj = self.checked_class(None)
+ for k, v in attrs.items():
+ self.assertEqual(getattr(obj, k).newest, v)
+
+
class TestCaseWithDB(TestCase):
"""Module tests not requiring DB setup."""
checked_class: Any
- default_ids: tuple[int | str, int | str, int | str]
+ default_ids: tuple[int | str, int | str, int | str] = (1, 2, 3)
def setUp(self) -> None:
Condition.empty_cache()
self.assertEqual(self.checked_class.get_cache(), expected_cache)
db_found: list[Any] = []
for item in content:
- assert isinstance(item.id_, (str, int))
+ assert isinstance(item.id_, type(self.default_ids[0]))
for row in self.db_conn.row_where(self.checked_class.table_name,
'id', item.id_):
db_found += [self.checked_class.from_table_row(self.db_conn,
self.assertEqual(self.checked_class(id2), by_id_created)
self.check_storage([obj])
- def check_from_table_row(self, id_: int | str) -> None:
+ def check_from_table_row(self, *args: Any) -> None:
"""Test .from_table_row() properly reads in class from DB"""
- obj = self.checked_class(id_) # pylint: disable=not-callable
+ id_ = self.default_ids[0]
+ obj = self.checked_class(id_, *args) # pylint: disable=not-callable
obj.save(self.db_conn)
- assert isinstance(obj.id_, (str, int))
+ assert isinstance(obj.id_, type(self.default_ids[0]))
for row in self.db_conn.row_where(self.checked_class.table_name,
'id', obj.id_):
retrieved = self.checked_class.from_table_row(self.db_conn, row)
return item1, item2, item3
def check_singularity(self, defaulting_field: str,
- non_default_value: Any) -> None:
+ non_default_value: Any, *args: Any) -> None:
"""Test pointers made for single object keep pointing to it."""
id1 = self.default_ids[0]
- obj = self.checked_class(id1) # pylint: disable=not-callable
+ obj = self.checked_class(id1, *args) # pylint: disable=not-callable
obj.save(self.db_conn)
setattr(obj, defaulting_field, non_default_value)
retrieved = self.checked_class.by_id(self.db_conn, id1)
self.assertEqual(non_default_value,
getattr(retrieved, defaulting_field))
- def check_remove(self) -> None:
+ def check_versioned_singularity(self) -> None:
+ """Test singularity of VersionedAttributes on saving (with .title)."""
+ obj = self.checked_class(None) # pylint: disable=not-callable
+ obj.save(self.db_conn)
+ assert isinstance(obj.id_, int)
+ obj.title.set('named')
+ retrieved = self.checked_class.by_id(self.db_conn, obj.id_)
+ self.assertEqual(obj.title.history, retrieved.title.history)
+
+ def check_remove(self, *args: Any) -> None:
"""Test .remove() effects on DB and cache."""
id_ = self.default_ids[0]
- obj = self.checked_class(id_) # pylint: disable=not-callable
+ obj = self.checked_class(id_, *args) # pylint: disable=not-callable
with self.assertRaises(HandledException):
obj.remove(self.db_conn)
obj.save(self.db_conn)