class TestReference: '''Tests for Reference, a class for referencing linked objects.''' @pytest.mark.parametrize( 'schema_arg', [SomeSchema(), SomeSchema, __name__ + '.SomeSchema']) def test_pack(self, schema_arg): field = fields.Reference(schema=schema_arg, field='number') result = field.pack(SomeClass('one', 1)) expected = 1 assert result == expected @pytest.mark.parametrize('field', [ fields.Reference(schema=SomeSchema(many=True, only='number'), field='number'), fields.Reference( schema=SomeSchema, many=True, only='number', field='number'), fields.Reference(schema=__name__ + '.SomeSchema', many=True, only='number', field='number') ]) def test_pack_with_kwargs(self, field): result = field.pack([SomeClass('one', 1), SomeClass('two', 2)]) expected = [1, 2] assert result == expected @pytest.mark.parametrize('field', [ fields.Reference(schema=SomeSchema(many=True, exclude='number'), field='number'), fields.Reference( schema=SomeSchema, many=True, exclude='number', field='number'), fields.Reference(schema=__name__ + '.SomeSchema', many=True, exclude='number', field='number') ]) def test_fail_on_missing_field_arg(self, field): # field 'number' is no field of the field's associated schema instance since it # was excluded with pytest.raises(KeyError): result = field.pack([SomeClass('one', 1), SomeClass('two', 2)])
class KingSchemaReferenceSelf(KnightSchema): boss = fields.Reference(schema=__name__ + '.KingSchemaEmbedSelf', field='name')
class KingWithReferencedSubjectsStrSchema(KnightSchema): subjects = fields.Reference(schema=__name__ + '.KnightSchema', field='name', many=True)
class KingWithReferencedSubjectsClassSchema(KnightSchema): subjects = fields.Reference(schema=KnightSchema, field='name', many=True)
def test_pack(self, schema_arg): field = fields.Reference(schema=schema_arg, field='number') result = field.pack(SomeClass('one', 1)) expected = 1 assert result == expected