diff --git a/unittests/test_entity.py b/unittests/test_entity.py index 73b65df9d4347d13da8c673fbdd7ddbd39cd616e..87ae606ce10db7ce4411e929d66a54bc19c2dffd 100644 --- a/unittests/test_entity.py +++ b/unittests/test_entity.py @@ -25,6 +25,7 @@ import os # pylint: disable=missing-docstring import unittest +from pytest import raises import linkahead from linkahead import (INTEGER, Entity, Property, Record, RecordType, @@ -105,20 +106,62 @@ def test_parent_list(): pl = linkahead.common.models.ParentList([p1]) assert p1 in pl assert RecordType(name="A") in pl - assert not RecordType(id=101) in pl + assert pl.index(RecordType(name="A")) == 0 + assert RecordType(id=101) not in pl pl.append(RecordType(id=101)) assert RecordType(name="A") in pl assert RecordType(id=101) in pl - assert not RecordType(id=102) in pl + assert len(pl) == 2 + assert pl.index(RecordType(id=101)) + assert RecordType(id=102) not in pl pl.append(RecordType(id=103, name='B')) assert RecordType(name="A") in pl assert RecordType(name="B") in pl assert RecordType(id=101) in pl assert RecordType(id=103) in pl - assert not RecordType(id=105, name="B") in pl + assert len(pl) == 3 + assert pl.index(RecordType(id=103, name='B')) == 2 + assert pl.index(RecordType(id=103)) == 2 + assert pl.index(RecordType(name='B')) == 2 + assert RecordType(id=105, name="B") not in pl + + # test removal + # remove by id only, even though element in parent list has name and id + pl.remove(RecordType(id=103)) + assert len(pl) == 2 + assert RecordType(name='B') not in pl + assert RecordType(id=103) not in pl + # Same for removal by name + pl.append(RecordType(id=103, name='B')) + assert len(pl) == 3 + pl.remove(RecordType(name='B')) + assert len(pl) == 2 + assert RecordType(name='B') not in pl + assert RecordType(id=103) not in pl + # And an error if the element is wrongly specified + pl.append(RecordType(id=103, name='B')) + assert len(pl) == 3 + with raises(ValueError) as ve: + pl.remove(RecordType(id=105, name='B')) + assert "not in list" in str(ve.value) + assert len(pl) == 3 + with raises(ValueError) as ve: + pl.remove(RecordType(id=103, name='C')) + assert "not in list" in str(ve.value) + assert len(pl) == 3 + + # TODO also check other built-in list functions: insert, pop, clear, count + # TODO also check pl1 == pl2 + # TODO what is with RecordType(name='A', id=100) in pl? I.e., fitting name, + # but id of corresponding element in pl is None. Same of course for + # RecordType(name='C', id=101) in pl, i.e. fitting id, but name of element + # in pl is None. + # TODO what is with the ambiguous RecordType(name='A', id=101) in pl? def test_property_list(): + # TODO: Resolve parent-list TODOs, the transfer to here. + # TODO: What other considerations have to be done with properties? p1 = Property(name="A") pl = linkahead.common.models.PropertyList() pl.append(p1)