diff --git a/pyproject.toml b/pyproject.toml index 28154e6..6f9040d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,13 +12,13 @@ keywords = ["scopes"] authors = [{name = "Helmut Merz", email = "helmutm@cy55.de"}] dependencies = [ + "SQLAlchemy", ] [project.optional-dependencies] postgres = [ - "transaction", "psycopg[binary]", - "SQLAlchemy", + "transaction", "zope.sqlalchemy", ] app = ["python-dotenv", "zope.publisher", "zope.traversing"] diff --git a/scopes/storage/db/postgres.py b/scopes/storage/db/postgres.py index 55e49b8..beaa34a 100644 --- a/scopes/storage/db/postgres.py +++ b/scopes/storage/db/postgres.py @@ -22,6 +22,7 @@ def getEngine(dbtype, dbname, user, pw, host='localhost', port=5432, **kw): def commit(conn): transaction.commit() +# patch `common` module import scopes.storage.common scopes.storage.common.IdType = BigInteger scopes.storage.common.JsonType = JSONB diff --git a/tests/test_storage.py b/tests/test_storage.py index 59598bd..bea9d1f 100644 --- a/tests/test_storage.py +++ b/tests/test_storage.py @@ -5,7 +5,6 @@ import config from datetime import datetime -import transaction import unittest import scopes.storage.common @@ -19,72 +18,16 @@ scopes.storage.common.Session = sessionFactory(engine) storage = Storage(schema=config.dbschema) +import tlib class Test(unittest.TestCase): "Basic tests for the cco.storage package." def test_001_tracking(self): - storage.dropTable('tracks') - tracks = storage.create(tracking.Container) - - tr01 = tracking.Track('t01', 'john') - tr01.update(dict(activity='testing')) - self.assertEqual(tr01.head, {'taskId': 't01', 'userName': 'john'}) - self.assertEqual(tr01.taskId, 't01') - self.assertEqual(tr01.userName, 'john') - - self.assertTrue(tracks.getTable() is not None) - - trid01 = tracks.save(tr01) - self.assertTrue(trid01 > 0) - - tr01a = tracks.get(trid01) - self.assertEqual(tr01a.head, tr01.head) - self.assertEqual(tr01a.trackId, trid01) - self.assertEqual(tr01a.data.get('activity'), 'testing') - - tr01a.update(dict(text='Set up unit tests.')) - tr01a.timeStamp = None - self.assertTrue(tracks.save(tr01a) > 0) - - tr01b = tracks.queryLast(taskId='t01') - self.assertEqual(tr01b.head, tr01.head) - self.assertNotEqual(tr01b.trackId, trid01) - self.assertEqual(tr01b.data.get('activity'), 'testing') - - tr02 = tracking.Track('t02', 'jim', trackId=31, timeStamp=datetime(2023, 11, 30), - data=dict(activity='concept')) - trid02 = tracks.upsert(tr02) - self.assertEqual(trid02, 31) - self.assertEqual(tr02.uid, 'rec-31') - tr02.trackId = trid01 - trid021 = tracks.upsert(tr02) - self.assertEqual(trid021, trid01) - self.assertEqual(tr02.uid, 'rec-' + str(trid01)) - - tr03 = storage.getItem('rec-31') - self.assertEqual(tr03.trackId, 31) - - n = tracks.remove(31) - self.assertEqual(n, 1) - self.assertEqual(tracks.get(31), None) - - commit(storage.session) + tlib.test_tracking(self, storage) def test_002_folder(self): - storage.dropTable('folders') - root = folder.Root(storage) - self.assertEqual(list(root.keys()), []) - root['top'] = folder.Folder() - self.assertEqual(list(root.keys()), ['top']) - top = root['top'] - top['child1'] = folder.Folder(data=dict(title='First Child')) - self.assertEqual(list(top.keys()), ['child1']) - ch1 = top['child1'] - self.assertEqual(ch1.parent, top.rid) - assert list(top.keys()) == ['child1'] - - commit(storage.session) + tlib.test_folder(self, storage) def suite(): return unittest.TestSuite(( diff --git a/tests/tlib.py b/tests/tlib.py new file mode 100644 index 0000000..00fa6d7 --- /dev/null +++ b/tests/tlib.py @@ -0,0 +1,72 @@ +"""The real test implementations""" + + +from datetime import datetime +from scopes.storage import folder, tracking +from scopes.storage.common import commit + + +def test_tracking(self, storage): + storage.dropTable('tracks') + tracks = storage.create(tracking.Container) + + tr01 = tracking.Track('t01', 'john') + tr01.update(dict(activity='testing')) + self.assertEqual(tr01.head, {'taskId': 't01', 'userName': 'john'}) + self.assertEqual(tr01.taskId, 't01') + self.assertEqual(tr01.userName, 'john') + + self.assertTrue(tracks.getTable() is not None) + + trid01 = tracks.save(tr01) + self.assertTrue(trid01 > 0) + + tr01a = tracks.get(trid01) + self.assertEqual(tr01a.head, tr01.head) + self.assertEqual(tr01a.trackId, trid01) + self.assertEqual(tr01a.data.get('activity'), 'testing') + + tr01a.update(dict(text='Set up unit tests.')) + tr01a.timeStamp = None + self.assertTrue(tracks.save(tr01a) > 0) + + tr01b = tracks.queryLast(taskId='t01') + self.assertEqual(tr01b.head, tr01.head) + self.assertNotEqual(tr01b.trackId, trid01) + self.assertEqual(tr01b.data.get('activity'), 'testing') + + tr02 = tracking.Track('t02', 'jim', trackId=31, timeStamp=datetime(2023, 11, 30), + data=dict(activity='concept')) + trid02 = tracks.upsert(tr02) + self.assertEqual(trid02, 31) + self.assertEqual(tr02.uid, 'rec-31') + tr02.trackId = trid01 + trid021 = tracks.upsert(tr02) + self.assertEqual(trid021, trid01) + self.assertEqual(tr02.uid, 'rec-' + str(trid01)) + + tr03 = storage.getItem('rec-31') + self.assertEqual(tr03.trackId, 31) + + n = tracks.remove(31) + self.assertEqual(n, 1) + self.assertEqual(tracks.get(31), None) + + commit(storage.session) + + +def test_folder(self, storage): + storage.dropTable('folders') + root = folder.Root(storage) + self.assertEqual(list(root.keys()), []) + root['top'] = folder.Folder() + self.assertEqual(list(root.keys()), ['top']) + top = root['top'] + top['child1'] = folder.Folder(data=dict(title='First Child')) + self.assertEqual(list(top.keys()), ['child1']) + ch1 = top['child1'] + self.assertEqual(ch1.parent, top.rid) + self.assertEqual(list(top.keys()), ['child1']) + + commit(storage.session) +