From 506e539c2daac0433e608ba3aeffbe444b2ed1a2 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Mon, 18 Dec 2023 13:53:37 +0100 Subject: [PATCH] work in progress: autommatic tests for SQL-based storage implementation --- organize/personal/storage/favorite.py | 3 ++- organize/tracking/storage/compat.py | 14 ++++++++++++ storage/__init__.py | 4 ++++ storage/tests/__init__.py | 4 ++++ storage/tests/common.py | 33 +++++++++++++++++++++++++++ storage/tests/test_storage.py | 27 ++++++++++++++++++++++ 6 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 organize/tracking/storage/compat.py create mode 100644 storage/__init__.py create mode 100644 storage/tests/__init__.py create mode 100644 storage/tests/common.py create mode 100644 storage/tests/test_storage.py diff --git a/organize/personal/storage/favorite.py b/organize/personal/storage/favorite.py index dcb77a2..5e79aba 100644 --- a/organize/personal/storage/favorite.py +++ b/organize/personal/storage/favorite.py @@ -4,6 +4,7 @@ from cco.storage.common import registerContainerClass from cco.storage.tracking import record +from loops.organize.tracking.storage import compat class Favorite(record.Track): @@ -12,7 +13,7 @@ class Favorite(record.Track): @registerContainerClass -class Favorites(record.Container): +class Favorites(compat.Container): itemFactory = Favorite tableName = 'favorites' diff --git a/organize/tracking/storage/compat.py b/organize/tracking/storage/compat.py new file mode 100644 index 0000000..c42e7f8 --- /dev/null +++ b/organize/tracking/storage/compat.py @@ -0,0 +1,14 @@ +# loops.organize.tracking.storage.compat + +"""loops compatibility layer on cco.storage.tracking. + +Provides a Container subclass that defines methods from cybertools...TrackingStorage +used by code based on loops.organize.tracking. +""" + +from cco.storage.tracking import record + + +class Container(record.Container): + + pass diff --git a/storage/__init__.py b/storage/__init__.py new file mode 100644 index 0000000..892fa4f --- /dev/null +++ b/storage/__init__.py @@ -0,0 +1,4 @@ +# loops.storage + +"""Common stuff for new SQL-based storage implementation. +""" diff --git a/storage/tests/__init__.py b/storage/tests/__init__.py new file mode 100644 index 0000000..c8d74a0 --- /dev/null +++ b/storage/tests/__init__.py @@ -0,0 +1,4 @@ +# loops.storage.tests + +"""Testing stuff for new SQL-based storage implementation. +""" diff --git a/storage/tests/common.py b/storage/tests/common.py new file mode 100644 index 0000000..b0f0fb8 --- /dev/null +++ b/storage/tests/common.py @@ -0,0 +1,33 @@ +# loops.storage.test.common + +"""Common definitions for testing the SQL-based storage implementation. +""" + +import unittest +from zope import component, interface +from zope.app.testing.setup import placefulSetUp, placefulTearDown + +from loops.expert.testsetup import TestSite +from loops.organize.setup import SetupManager +from loops.organize.tests import setupUtilitiesAndAdapters +from loops import util + + + +class TestCase(unittest.TestCase): + + @classmethod + def prepare(cls): + cls.site = site = placefulSetUp(True) + component.provideAdapter(SetupManager, name='organize') + t = TestSite(site) + cls.concepts, cls.resources, cls.views = t.setup() + cls.loopsRoot = loopsRoot = site['loops'] + loopsId = util.getUidForObject(loopsRoot) + setupData = setupUtilitiesAndAdapters(loopsRoot) + + @classmethod + def cleanup(cls): + placefulTearDown() + + diff --git a/storage/tests/test_storage.py b/storage/tests/test_storage.py new file mode 100644 index 0000000..e75f25b --- /dev/null +++ b/storage/tests/test_storage.py @@ -0,0 +1,27 @@ +# loops.storage.tests.test_storage + +"""Comprehensive functional testing for SQL-based storage implementation. +""" + +from loops.storage.tests import common + + +class TestStorage(common.TestCase): + + def test_000_setUp(self): + self.prepare() + self.assertEqual(self.loopsRoot.__name__, 'loops') + + def test_migration(self): + self.assertEqual('a'.upper(), 'A') + + def test_query(self): + self.assertEqual('a'.upper(), 'A') + + def test_zzz_tearDown(self): + self.cleanup() + + +if __name__ == '__main__': + unittest.main() +