'''
Created on 2021-07-23
@author: wf
'''
import unittest
from tests.basetest import Basetest
from lodstorage.sample import Sample, Royal
from lodstorage.entity import EntityManager
from lodstorage.storageconfig import StoreMode, StorageConfig
import os
[docs]class TestEntityManager(Basetest):
'''
test the entity manager wrapper
'''
[docs] def testStoreMode(self):
'''
test store mode display
'''
config=StorageConfig.getDefault()
self.configure(config)
em=EntityManager("tst","Test","Tests",config=config)
if self.debug:
print (em.storeMode().name)
self.assertEqual(StoreMode.SQL,em.storeMode())
[docs] def checkItem(self,item1,item2,attrs,msg):
# check mode
isDict=False
if isinstance(item1,dict):
self.assertTrue(isinstance(item2,dict))
isDict=True
else:
self.assertFalse(isinstance(item2,dict))
for attr in attrs:
if isDict:
value1=item1[attr]
value2=item2[attr]
else:
value1=getattr(item1,attr)
value2=getattr(item2,attr)
#if not value1==value2:
# print(f"{value1}!={value2} for {attr}-{msg}")
self.assertEqual(value1,value2,f"{attr}-{msg}")
[docs] def testEntityManager(self):
'''
test the entity Manager handling
'''
self.debug=True
for i,royals in enumerate([Sample.getRoyals(),Sample.getRoyalsInstances()]):
if self.debug:
print(f"{i+1}:{royals}")
sparqlConfig=StorageConfig.getSPARQL("http://example.bitplan.com", "http://localhost:3030/example",host="localhost")
# TODO use sparql Config
for config in [StorageConfig.getDefault(debug=self.debug),StorageConfig.getJSON(debug=self.debug),StorageConfig.getJsonPickle(self.debug)]:
self.configure(config)
name="royal" if i==0 else "royalorm"
clazz=None if i==0 else Royal
em=EntityManager(name=name,entityName="Royal",entityPluralName="Royals",clazz=clazz,listName="royals",config=config)
em.royals=royals
if i==0:
cacheFile=em.storeLoD(royals)
else:
cacheFile=em.store()
if cacheFile is not None:
self.assertTrue(os.path.isfile(cacheFile))
royalsLod=em.fromStore()
self.assertTrue(isinstance(royalsLod,list))
hint=f"{i}({config.mode}):{name}"
for item in royalsLod:
self.assertTrue(isinstance(item,dict),f"{hint}:expecting dict")
royalsList=em.getList()
self.assertEqual(len(royals),len(royalsList))
for j,item in enumerate(royalsList):
hint=f"{hint}/{j}"
royal=royals[j]
# TODO check type handling e.g. "born"
self.checkItem(royal, item, ["name","age","numberInLine","wikidataurl"],hint)
pass
if __name__ == "__main__":
#import sys;sys.argv = ['', 'Test.testName']
unittest.main()