def test_remove_relations(): class User(Entity): id: int class Address(Entity): id: int storage = Storage() user = User(data={'id': 1}, storage=storage) address1 = Address(data={'id': 1}, storage=storage) address2 = Address(data={'id': 2}, storage=storage) address3 = Address(data={'id': 3}, storage=storage) storage.make_relation( from_=user, to_=address1, relation_type=RelationType.RELATED, ) storage.make_relation( from_=user, to_=address2, relation_type=RelationType.RELATED, ) storage.make_relation( from_=user, to_=address3, relation_type=RelationType.PARENT, ) assert storage.get_related_entities( user, Address, RelationType.RELATED, ) == [ address1, address2, ] storage.remove_relations(user, Address, RelationType.RELATED) assert storage.get_related_entities( user, Address, RelationType.RELATED, ) == [] assert storage.get_related_entities( user, Address, RelationType.PARENT, ) == [address3]
def test_make_relation(): class User(Entity): id: int class Address(Entity): id: int storage = Storage() user = User(data={'id': 1}, storage=storage) address1 = Address(data={'id': 1}, storage=storage) address2 = Address(data={'id': 2}, storage=storage) storage.make_relation( from_=user, to_=address1, relation_type=RelationType.RELATED, ) storage.make_relation( from_=user, to_=address2, relation_type=RelationType.CHILD, ) assert storage.get_one_related_entity( user, Address, RelationType.RELATED, ) == address1 assert storage.get_related_entities( user, Address, RelationType.RELATED, ) == [address1]
def test_assign_new_value_to_relationship(): class SomeEntity(Entity): name: str class EntityHolder(Entity): name: str entity: SomeEntity = Relationship(entity_type=SomeEntity) class ManyEntityHolder(Entity): name: str entities: t.List[SomeEntity] = Relationship( entity_type=SomeEntity, many=True, ) storage = Storage() holder = EntityHolder(data={'name': 'holder'}, storage=storage) entity1 = SomeEntity(data={'name': 'entity1'}, storage=storage) entity2 = SomeEntity(data={'name': 'entity2'}, storage=storage) holder.entity = entity1 assert holder.entity is entity1 assert storage.get_related_entities( holder, SomeEntity, RelationType.RELATED, ) == [entity1] holder.entity = entity2 assert holder.entity is entity2 assert storage.get_related_entities( holder, SomeEntity, RelationType.RELATED, ) == [entity2] holder.entity = None assert holder.entity is None assert storage.get_related_entities( holder, SomeEntity, RelationType.RELATED, ) == [] many_holder = ManyEntityHolder( data={'name': 'many holder'}, storage=storage, ) many_holder.entities = [entity1] assert many_holder.entities == [entity1] assert storage.get_related_entities( many_holder, SomeEntity, RelationType.RELATED, ) == [entity1] many_holder.entities.append(entity2) assert many_holder.entities == [entity1, entity2] assert storage.get_related_entities( many_holder, SomeEntity, RelationType.RELATED, ) == [entity1, entity2] many_holder.entities.remove(entity2) assert many_holder.entities == [entity1] assert storage.get_related_entities( many_holder, SomeEntity, RelationType.RELATED, ) == [entity1] many_holder.entities = [] assert many_holder.entities == [] assert storage.get_related_entities( many_holder, SomeEntity, RelationType.RELATED, ) == []