Esempio n. 1
0
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]
Esempio n. 2
0
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]
Esempio n. 3
0
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,
    ) == []