graphene-django/graphene_django/rest_framework/tests/test_mutation.py
Abdulhaq Emhemmed c5dd913f53 Add tests
2017-07-24 19:33:41 +02:00

116 lines
3.3 KiB
Python

from django.db import models
from graphene import Field, Schema, String, Mutation, ObjectType, AbstractType
from graphene.types.inputobjecttype import InputObjectType
from py.test import raises
from rest_framework import serializers
from ...types import DjangoObjectType
from ..mutation import SerializerMutation
class MyFakeModel(models.Model):
cool_name = models.CharField(max_length=50)
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyFakeModel
fields = '__all__'
class MySerializer(serializers.Serializer):
text = serializers.CharField()
model = MyModelSerializer()
def test_needs_serializer_class():
with raises(Exception) as exc:
class MyMutation(SerializerMutation):
pass
assert exc.value.args[0] == 'Missing serializer_class'
def test_has_fields():
class MyMutation(SerializerMutation):
class Meta:
serializer_class = MySerializer
assert 'text' in MyMutation._meta.fields
assert 'model' in MyMutation._meta.fields
assert 'errors' in MyMutation._meta.fields
def test_has_input_fields():
class MyMutation(SerializerMutation):
class Meta:
serializer_class = MySerializer
assert 'text' in MyMutation.Input._meta.fields
assert 'model' in MyMutation.Input._meta.fields
def test_nested_model():
class MyFakeModelGrapheneType(DjangoObjectType):
class Meta:
model = MyFakeModel
class MyMutation(SerializerMutation):
class Meta:
serializer_class = MySerializer
model_field = MyMutation._meta.fields['model']
assert isinstance(model_field, Field)
assert model_field.type == MyFakeModelGrapheneType
model_input = MyMutation.Input._meta.fields['model']
model_input_type = model_input._type.of_type
assert issubclass(model_input_type, InputObjectType)
assert 'cool_name' in model_input_type._meta.fields
def test_custom_serializer(capfd):
class MyBasicSerializer(serializers.Serializer):
whatever = serializers.CharField(required=False)
def create(self, data):
return {'user': self.context['request']['user']}
class MyBasicGrapheneType(ObjectType):
text = String()
class MyAwesomeMutation(SerializerMutation):
class Meta:
serializer_class = MyBasicSerializer
user = String()
@classmethod
def get_serializer(cls, instance, args, request, info):
input = args.get('input')
return cls._meta.serializer_class(data=dict(input),
context={'request': request})
class MyAbstractMutation(AbstractType, ObjectType):
myAwesomeMutation = MyAwesomeMutation.Field()
schema = Schema(query=MyBasicGrapheneType, mutation=MyAbstractMutation)
mutation = '''
mutation MutationTest($input: MyBasicSerializerInput!) {
myAwesomeMutation(input: $input) {
user
}
}
'''
result = schema.execute(mutation, variable_values={'input': {}},
context_value={'user': 1})
assert result.data['myAwesomeMutation']['user'] == '1'