# py-scopes: tests.test_storage """ Tests for the (PostgreSQL) storage-related functionalities""" from scopes import testing import config from datetime import datetime import pytest from scopes.api import main from scopes.storage import concept, folder, message, topic, tracking from scopes.util import keywords as k # predefined keywords used as domain, action, class head values in messages k('session system') @pytest.fixture(scope='module') def storage(): storage = config.StorageFactory(config)(config.dbschema) storage.dropTable('tracks') storage.dropTable('folders') storage.dropTable('types') storage.dropTable('preds') storage.dropTable('rels') storage.dropTable('topics') storage.dropTable('messages') storage.commit() return storage def test_tracking(storage): tracks = storage.create(tracking.Container) tr01 = tracking.Track('t01', 'john') assert tr01.head == {'taskId': 't01', 'userName': 'john'} assert tr01.taskId == 't01' assert tr01.userName == 'john' tr01.update(dict(activity='testing')) trid01 = tracks.save(tr01) assert trid01 > 0 tr01a = tracks[f'{trid01:07}'] assert tr01a.head == tr01.head assert tr01a.trackId == trid01 assert tr01a.data.get('activity') == 'testing' tr01a.update(dict(text='Set up unit tests.')) tr01a.timeStamp = None assert tracks.save(tr01a) > 0 tr01b = tracks.queryLast(taskId='t01') assert tr01b.head == tr01.head assert tr01b.trackId != trid01 assert tr01b.data.get('activity') == 'testing' assert tr01b.data.get('text') == 'Set up unit tests.' tr02 = tracking.Track('t02', 'jim', trackId=31, timeStamp=datetime(2023, 11, 30), data=dict(activity='concept')) trid02 = tracks.upsert(tr02) assert trid02 == 31 assert tr02.uid == 'rec-31' tr02.trackId = trid01 trid021 = tracks.upsert(tr02) assert trid021 == trid01 assert tr02.uid == 'rec-' + str(trid01) tr03 = storage.getItem('rec-31') assert tr03.trackId == 31 n = tracks.remove(tr03) assert n == 1 assert tracks.get(31) == None storage.commit() def test_folder(storage): root = folder.Root(storage) assert list(root.keys()) == [] root['top'] = folder.Folder() assert list(root.keys()) == ['top'] top = root['top'] top['child1'] = folder.Folder(data=dict(title='First Child')) assert list(top.keys()) == ['child1'] ch1 = top['child1'] assert ch1.parent == top.rid assert list(top.keys()) == ['child1'] ch1.set('name', 'level2-item1') ch1.storeTrack() storage.commit() def test_type(storage): concept.setupCoreTypes(storage) types = storage.getContainer(concept.Type) tps = list(types.query()) assert len(tps) == 7 tfolder = types.queryLast(name='folder') fldrs = list(tfolder.values()) assert len(fldrs) == 2 assert fldrs[0].name == 'top' storage.commit() def test_topic(storage): rels = storage.getContainer(concept.Triple) topics = storage.getContainer(topic.Topic) types = storage.getContainer(concept.Type) concept.storePredicate(storage, concept.defaultPredicate) root = folder.Root(storage) root['top']['topics'] = ftopics = folder.Folder() ttopic = types.queryLast(name='topic') assert ttopic.name == 'topic' ftopics.setTarget(ttopic) assert ftopics.getTarget().name == 'topic' tp_itc = topic.Topic('itc', data=dict( title='ITC', description='Information and Communication Technology')) topics.save(tp_itc) tp_proglang = topic.Topic('prog_lang', data=dict( title='Programming Languages', description='Programming Languages')) topics.save(tp_proglang) tp_itc.addChild(tp_proglang) c = list(tp_itc.children()) assert c[0].name == 'prog_lang' storage.commit() def test_message(storage): messages = storage.create(message.Messages) m01 = message.Message('system', 'data', 'session', 'V1_317784226621611853') m01.update(dict(userid='tst9')) mid01 = messages.save(m01) msgs = list(messages.query()) assert msgs[0].domain is k.system assert len(msgs) == 1 storage.commit()