def test_parse_link_field(): class NewEntity(Entity): _value = fields.StrField() link_field = fields.LinkField(to=NewEntity) new_entity = NewEntity() assert link_field.parse(new_entity) == new_entity
def test_wrong_link_value(value): class Example(Entity): _value = fields.StrField() link_field = fields.LinkField(to=Example) with raises(FieldValueError) as e: link_field.parse(value) assert str(e.value) == f'{type(value)} is not a valid value for LinkField'
def test_parse_link_field_from_dict_with_wrong_data(): class NewEntity(Entity): _field0 = fields.StrField() _field1 = fields.IntField() link_field = fields.LinkField(to=NewEntity) data = {'field32': 'hi', 'field2': '10'} parsed = link_field.parse(data) assert parsed.field0 is None assert parsed.field1 is None
def test_parse_link_field_from_dict(): class NewEntity(Entity): _field0 = fields.StrField() _field1 = fields.IntField() link_field = fields.LinkField(to=NewEntity) data = {'field0': 'hi', 'field1': '10'} parsed = link_field.parse(data) assert parsed.field0 == 'hi' assert parsed.field1 == 10
class CreatePost(Entity): _title = fields.StrField() _body = fields.StrField() _category_id = fields.StrField() _author = fields.LinkField(to=User) _description = fields.StrField() async def create(self) -> Post: self._validate_data() await self._resolve_category_id() try: return await Post.create( title=self._title, body=self._body, category_id=self._category_id, author=self._author, description=self._description ) except exceptions.ForeignKeyViolationError: raise ValueError('does not exists category with id: ' f'{self._category_id}') def _validate_data(self): # TODO: add this validation to nyoibo if not self._title: raise ValueError('title is obligatory') if not self._body: raise ValueError('body is obligatory') if not self._category_id: raise ValueError('category_id is obligatory') if not self._author: raise ValueError('author is obligatory') if not self._description: raise ValueError('description is obligatory') async def _resolve_category_id(self): if self._category_id.isdigit() is False: category = await Category.create(name=self._category_id) self._category_id = category.id
class Model2(Entity): _value = fields.StrField() _link = fields.LinkField(to=Model1)
class Model1(Entity): _link = fields.LinkField(to=Model0) _name = fields.StrField()
class Entity1(Entity): _entity0 = fields.LinkField(to=Entity0)
class Example(Entity): _value = fields.LinkField(to=to)
def test_parse_none_link_field(): class NewEntity(Entity): pass link_field = fields.LinkField(to=NewEntity) assert link_field.parse(None) is None