Source code for tests.test_lod

'''
Created on 2021-06-11

@author: wf
'''
import unittest
from tests.basetest import Basetest
from lodstorage.jsonable import JSONAbleList, JSONAble
from lodstorage.lod import LOD
import copy

[docs]class TestLOD(Basetest): ''' test list of dicts base functionality '''
[docs] def testListIntersect(self): ''' test a list intersection ''' lod1 = [ { "name":"London" }, { "name":"Athens" } ] lod2 = [ { "name":"Athens" }, { "name":"Paris" } ] lodi = LOD.intersect(lod1, lod2, "name") self.assertEqual(1, len(lodi)) self.assertEqual("Athens", lodi[0]["name"]) pass
[docs] def testGetLookupIssue31And32(self): ''' test for https://github.com/WolfgangFahl/pyLoDStorage/issues/31 test for https://github.com/WolfgangFahl/pyLoDStorage/issues/32 ''' lod = [ { "name": "Athens", "Q": 1524}, { "name": "Paris", "Q": 90}, { "name": ["München", "Munich"], "Q": 1726}, { "name": "Athens", "Q": 1524}, ] cityMap,duplicates = LOD.getLookup(lod, "name") if self.debug: print(cityMap) self.assertEqual(1,len(duplicates)) self.assertEqual(4,len(cityMap)) self.assertEqual(cityMap["München"],cityMap["Munich"])
[docs] def checkHandleListTypeResult(self,lod,expectedLen,expected): ''' check the result of the handleListType function Args: lod(list): the list of dicts to check expectedLen(int): the expected Length expected(str): the expected entry for the München,Munich Q1524 record with a list ''' if self.debug: print(lod) self.assertEqual(expectedLen,len(lod)) cityByQ,_duplicates=LOD.getLookup(lod, "Q") if self.debug: print(cityByQ) if expected is not None: munichRecord=cityByQ[1726] self.assertEqual(expected,munichRecord["name"]) else: self.assertFalse(1726 in cityByQ)
[docs] def testListHandlingIssue33(self): ''' test for handling list ''' exampleLod = [ { "name": "Athens", "Q": 1524}, { "name": "Paris", "Q": 90}, { "name": ["München", "Munich"], "Q": 1726}, { "name": "Athens", "Q": 1524}, ] #self.debug=True lod=copy.deepcopy(exampleLod) LOD.handleListTypes(lod) self.checkHandleListTypeResult(lod, 4, "München,Munich") lod=copy.deepcopy(exampleLod) LOD.handleListTypes(lod,doFilter=True) self.checkHandleListTypeResult(lod, 3, None) lod=copy.deepcopy(exampleLod) LOD.handleListTypes(lod,separator=";") self.checkHandleListTypeResult(lod, 4, "München;Munich")
[docs] def testGetFields(self): ''' tests field extraction from list of JSONAble objects and LoD ''' lod=[ { "name":"Test", "label":1 }, { "name": "Test 2", "label": 2 }, { "name":"Different", "location":"Munich" } ] expectedFields=["name","label","location"] actualFieldsLoD=LOD.getFields(lod) self.assertEqual(actualFieldsLoD, expectedFields) jsonAbleList=JSONAbleList(clazz=JSONAble) jsonAbleList.fromLoD(lod) loj=jsonAbleList.getList() actualFieldsLoJ=LOD.getFields(loj) self.assertEqual(actualFieldsLoJ, expectedFields)
if __name__ == "__main__": # import sys;sys.argv = ['', 'Test.testName'] unittest.main()