def test_search_sorting_second_value(cfg_10_identical_sources): "If sortBy values are identical use id as secondary sort value." connector = source.SourceConnector(cfg_10_identical_sources) cfg_10_identical_sources result = connector.search(size=10, page=1, sort_by="createdWhen") sort_fields = [(s["createdWhen"], s["@id"]) for s in result] assert sort_fields == sorted(sort_fields)
def test_filter_by_relates_to_person(db200final_cfg): "Filter by relatesToPerson= parameter" connector = source.SourceConnector(db200final_cfg) assert len( connector.search(size=100, page=1, relatesToPerson="Related person 00056")) == 6 assert len( connector.search(size=100, page=1, relatesToPerson="related person 00056")) == 6 assert len( connector.search(size=100, page=1, relatesToPerson="lated person 00056")) == 6 assert len( connector.search( size=100, page=1, relatesToPerson="https://example.com/relatedpersons/00058")) == 3 assert connector.search( size=100, page=1, relatesToPerson="https://example.com/RelatedPersons/00058") == [] assert connector.search( size=100, page=1, relatesToPerson="https://example.com/relatedpersons/0005") == []
def test_filter_by_source_id(db200final_cfg): "Test the sourceId filter." connector = source.SourceConnector(db200final_cfg) assert len(connector.search(size=100, page=1, sourceId="S00055")) == 1 # searching for ids only matches full ids (not parts of id) assert connector.search(size=100, page=1, factoidId="F001") == []
def test_get_with_uri(db200final_cfg): "Test the connector get method for a single source when using an uri instead of the id." connector = source.SourceConnector(db200final_cfg) pers = connector.get('https://example.com/sources/2a') assert pers['@id'] == 'S00002' pers = connector.get('https://example.com/sources/2b') assert pers['@id'] == 'S00002'
def test_search_sorting(db200final_cfg): "Test if sort_by parameter works." connector = source.SourceConnector(db200final_cfg) # default sort_by is 'createdWhen' result = connector.search(size=10, page=1) sort_fields = [s["createdWhen"] for s in result] assert sort_fields == sorted(sort_fields) # I've ommitted uris here, because ist doen not make much sense for fieldname in ("@id", "createdBy", "createdWhen", "label", "modifiedBy", "modifiedWhen"): result = connector.search(size=10, page=1, sort_by=fieldname) sort_fields = [s[fieldname] for s in result] assert sort_fields == sorted( sort_fields ), "sorting for {} does not work".format(fieldname) result = connector.search(size=10, page=1, sort_by=fieldname, sort_order="ASC") sort_fields = [s[fieldname] for s in result] assert sort_fields == sorted( sort_fields ), "sorting for {} does not work".format(fieldname) result = connector.search(size=10, page=1, sort_by=fieldname, sort_order="DESC") sort_fields = [s[fieldname] for s in result] assert sort_fields == sorted( sort_fields, reverse=True ), "sorting for {} does not work".format(fieldname)
def test_filter_by_source_label(db200final_cfg): "Test the label filter." connector = source.SourceConnector(db200final_cfg) # search for exact label assert len(connector.search(size=100, page=1, label="Source 00002")) == 1 # search for part of label assert len(connector.search(size=100, page=1, label="Source 0000")) == 8 # search for non existing label assert connector.search(size=100, page=1, label="FooFooBar") == []
def test_create(mockcfg, mocksource1): "Test the save() method." connector = source.SourceConnector(mockcfg) rdata = connector.create(mocksource1) assert rdata["@id"] assert rdata["createdBy"] == mocksource1["createdBy"] assert rdata["createdWhen"] == mocksource1["createdWhen"] assert rdata["label"] == mocksource1["label"] assert rdata["uris"] == mocksource1["uris"]
def test_delete(mockcfg, mocksource1): "Test the delete method." connector = source.SourceConnector(mockcfg) # TODO: find a better way (without create) connector.create(mocksource1) rdata = connector.get(mocksource1["@id"]) assert rdata connector.delete(mocksource1["@id"]) rdata = connector.get(mocksource1["@id"]) assert rdata is None
def test_filter_factoid_and_source(db200final_cfg): "Test the sourceId filter together with factoid filter." connector = source.SourceConnector(db200final_cfg) # there are 2 person with this source id assert len(connector.search(size=100, page=1, sourceId="S00055")) == 1 # if we add a factoidId, there should be only one left assert len( connector.search(size=100, page=1, sourceId="S00055", factoidId="F00054")) == 1
def test_filter_by_st(db200final_cfg): "Test the st= parameter." connector = source.SourceConnector(db200final_cfg) assert len(connector.search(size=100, page=1, s="Source 00031")) == 1 # id assert len(connector.search(size=100, page=1, st="Stmt00048")) == 1 # date.label assert len(connector.search(size=100, page=1, st="Historical Date 00061")) == 2 # memberOf.label assert len(connector.search(size=100, page=1, st="Group 00061")) == 6 # memberOf.uri assert len( connector.search(size=100, page=1, st="https://example.com/groups/00061")) == 3 # name assert len(connector.search(size=100, page=1, st="Statement 00048")) == 1 # role.label assert len(connector.search(size=100, page=1, st="Role 00061")) == 6 # statementContent assert len(connector.search(size=100, page=1, st="Statement content 00061")) == 3 # statementtype.label assert len(connector.search(size=100, page=1, st="Statement type 00061")) == 6 # statementType.uri assert len( connector.search(size=100, page=1, st="https://example.com/statementtypes/00021")) == 9 # places.label assert len(connector.search(size=100, page=1, st="Place 00051")) == 10 # places.uri assert len( connector.search(size=100, page=1, st="https://example.com/places/00053")) == 4 # relatesToPersons.label assert len(connector.search(size=100, page=1, st="Related person 00056")) == 6 # relatesToPersons.uri assert len( connector.search(size=100, page=1, st="https://example.com/relatedpersons/00058")) == 3 # uris assert len( connector.search(size=100, page=1, st="https://example.com/statements/61a")) == 1
def test_filter_by_p(db200final_cfg): "Test the p= parameter." connector = source.SourceConnector(db200final_cfg) assert len(connector.search(size=200, page=1, p="P00058")) == 2 assert len(connector.search(size=200, page=1, p="P0005")) == 22 assert len( connector.search(size=200, page=1, p="https://example.com/persons/52a")) == 2 # Test if only full uris are matched, so only '52a', but not 52 assert len( connector.search(size=200, page=1, p="https://example.com/persons/52")) == 0
def test_update_new(mockcfg, mocksource1): "Create new source via PUT" connector = source.SourceConnector(mockcfg) rdata = connector.update("Foo99", mocksource1) assert rdata["@id"] == "Foo99" assert rdata["createdBy"] == "Foo Bar" assert rdata["createdWhen"] == mocksource1["createdWhen"] assert rdata["modifiedWhen"] == "" assert rdata["modifiedBy"] == "" assert rdata["label"] == mocksource1['label'] assert rdata["uris"] == [ "https://example.com/sources/1", "https://example.com/sources/2", ]
def test_filter_by_statement_content(db200final_cfg): "Filter by statementContent= parameter" connector = source.SourceConnector(db200final_cfg) assert len( connector.search(size=100, page=1, statementContent="Statement content 00061")) == 3 assert len( connector.search(size=100, page=1, statementContent="statement content 00061")) == 3 assert len( connector.search(size=100, page=1, statementContent="ement content 00061")) == 3
def test_get_factoid_refs(db200final_cfg): connector = source.SourceConnector(db200final_cfg) src = connector.get('S00001') refs = src['factoid-refs'] assert len(refs) == 2 assert refs[0]['@id'] == 'F00100' assert refs[0]['source-ref']['@id'] == 'S00001' assert refs[0]['person-ref']['@id'] == 'P00026' assert refs[0]['statement-refs'][0]['@id'] == 'Stmt00300' assert refs[1]['@id'] == 'F00200' assert refs[1]['source-ref']['@id'] == 'S00001' assert refs[1]['person-ref']['@id'] == 'P00051' assert refs[1]['statement-refs'][0]['@id'] == 'Stmt00600'
def test_search_paging(db200final_cfg): "Test search() without filtering." connector = source.SourceConnector(db200final_cfg) result = connector.search(size=30, page=1) assert len(result) == 30 result = connector.search(size=30, page=2) assert len(result) == 30 # Make sure all remaining sources are returned if size > number of pages result = connector.search(size=300, page=1) assert len(result) == 100 # make sure accessing objects outside range does return an empty list result = connector.search(size=200, page=2) assert result == []
def test_filter_by_role(db200final_cfg): "Filter by role= parameter" connector = source.SourceConnector(db200final_cfg) assert len(connector.search(size=100, page=1, role="Role 00051")) == 6 assert len(connector.search(size=100, page=1, role="role 00051")) == 6 assert len(connector.search(size=100, page=1, role="le 00051")) == 6 assert len( connector.search(size=100, page=1, role="https://example.com/roles/00053")) == 6 assert connector.search(size=100, page=1, role="https://example.com/ROLES/00053") == [] assert connector.search(size=100, page=1, role="https://example.com/roles/0005") == []
def test_filter_by_place(db200final_cfg): "Filter by place= parameter" connector = source.SourceConnector(db200final_cfg) assert len(connector.search(size=100, page=1, place="Place 00053")) == 8 assert len(connector.search(size=100, page=1, place="place 00053")) == 8 assert len(connector.search(size=100, page=1, place="ace 00053")) == 8 assert len( connector.search(size=100, page=1, place="https://example.com/places/00053")) == 4 assert connector.search(size=100, page=1, place="https://example.com/PLaces/00053") == [] assert connector.search(size=100, page=1, place="https://example.com/places/0005") == []
def test_get(db200final_cfg): "Test the connector get method without filters." connector = source.SourceConnector(db200final_cfg) src = connector.get('S00001') assert src['@id'] == 'S00001' assert src['createdBy'] == 'Creator 00001' assert src['createdWhen'] == '2003-02-15T00:03:00' assert src['modifiedBy'] == 'Modifier 00001' assert src['modifiedWhen'] == '2003-02-15T00:06:00' assert src['label'] == 'Source 00001' assert src['uris'] == ['https://example.com/sources/1a'] assert src['factoid-refs'][0]['@id'] == 'F00100' assert src['factoid-refs'][0]['source-ref']['@id'] == 'S00001' assert src['factoid-refs'][0]['person-ref']['@id'] == 'P00026' assert src['factoid-refs'][0]['statement-refs'][0]['@id'] == 'Stmt00300' assert src['factoid-refs'][1]['@id'] == 'F00200' assert src['factoid-refs'][1]['source-ref']['@id'] == 'S00001' assert src['factoid-refs'][1]['person-ref']['@id'] == 'P00051' assert src['factoid-refs'][1]['statement-refs'][0]['@id'] == 'Stmt00600'
def test_filter_by_statement_type(db200final_cfg): "Filter by statementContent= parameter" connector = source.SourceConnector(db200final_cfg) assert len( connector.search(size=100, page=1, statementType="Statement type 00061")) == 6 assert len( connector.search(size=100, page=1, statementType="statement TYPE 00061")) == 6 assert len( connector.search(size=100, page=1, statementType="tement type 00061")) == 6 assert len( connector.search( size=100, page=1, statementType="https://example.com/statementtypes/00021")) == 9 assert connector.search( size=100, page=1, statementType="https://example.com/statementtypes/0002") == []
def test_update_update(mockcfg, mocksource1): "Test updating an existing person" # create entry connector = source.SourceConnector(mockcfg) connector.update("Foo99", mocksource1) mocksource1["createdBy"] = "Bar Foo" mocksource1["modifiedBy"] = "Foo Bar" mocksource1["label"] = "Label 1a" mocksource1["modifiedWhen"] = datetime.datetime(2021, 1, 2, 12, 0, 0).isoformat() mocksource1["uris"] = [ "https://example.com/persons/1a", "https://example.com/persons/2a" ] # update entry rdata = connector.update("Foo99", copy.deepcopy(mocksource1)) assert rdata["@id"] == "Foo99" assert rdata["createdBy"] == mocksource1["createdBy"] assert rdata["createdWhen"] == mocksource1["createdWhen"] assert rdata["modifiedBy"] == mocksource1["modifiedBy"] assert rdata["modifiedWhen"] == mocksource1["modifiedWhen"] assert rdata["label"] == mocksource1["label"] assert rdata["uris"] == mocksource1["uris"]
def test_filter_by_member_of(db200final_cfg): "Filter by memberOf= parameter" connector = source.SourceConnector(db200final_cfg) assert len(connector.search(size=100, page=1, memberOf='Group 00051')) == 6 # search for partial entry in label assert len(connector.search(size=100, page=1, memberOf='oup 00051')) == 6 # searching in label is case insensitive assert len(connector.search(size=100, page=1, memberOf='group 00051')) == 6 # searching in uri is case sensitive and only matches full matches assert len( connector.search(size=100, page=1, memberOf='https://example.com/groups/00053')) == 6 # Upercase 'G' should not be found assert connector.search(size=100, page=1, memberOf='https://example.com/Groups/00053') == [] assert connector.search(size=100, page=1, memberOf='https://example.com/Groups/00053') == [] assert connector.search(size=100, page=1, memberOf='https://example.com/Groups/0005') == []
def test_filter_by_s(db200final_cfg): "Test the s= parameter." connector = source.SourceConnector(db200final_cfg) assert len(connector.search(size=200, page=1, s="S00033")) == 1 assert len(connector.search(size=200, page=1, s="S0003")) == 10 assert len(connector.search(size=200, page=1, s="Source 00031")) == 1
def test_delete_non_existing_object(mockcfg): "Calling delete() on a non exisiting object should cause an exception." connector = source.SourceConnector(mockcfg) with pytest.raises(orm.ObjectNotFound): connector.delete("foobarfoo")
def test_count(db200final_cfg): "Test the connectors count method." conector = source.SourceConnector(db200final_cfg) assert conector.count() == 100
def test_filter_by_name(db200final_cfg): "Filter by name= parameter" connector = source.SourceConnector(db200final_cfg) assert len(connector.search(size=100, page=1, name="Statement 0001")) == 4 assert len(connector.search(size=100, page=1, name="statement 0001")) == 4 assert len(connector.search(size=100, page=1, name="atement 0001")) == 4
def test_filter_by_to(db200final_cfg): "Filter by statementContent= parameter" connector = source.SourceConnector(db200final_cfg) assert len(connector.search(size=100, page=1, to='1800-06-01')) == 15
def test_filter_by_f(db200final_cfg): "Test the f= parameter" connector = source.SourceConnector(db200final_cfg) assert len(connector.search(size=220, page=1, f="F00033")) == 1 assert len(connector.search(size=200, page=1, f="F0003")) == 10
def test_filter_by_from(db200final_cfg): "Filter by from= parameter" connector = source.SourceConnector(db200final_cfg) assert len(connector.search(size=100, page=1, from_='1803-03-30')) == 15