2017-07-18 18:15:25 +03:00
|
|
|
from django import forms
|
2017-07-18 18:48:09 +03:00
|
|
|
from django.test import TestCase
|
2017-07-18 18:15:25 +03:00
|
|
|
from py.test import raises
|
|
|
|
|
2017-10-02 21:03:20 +03:00
|
|
|
from graphene_django.tests.models import Pet, Film
|
2017-07-18 18:15:25 +03:00
|
|
|
from ..mutation import FormMutation, ModelFormMutation
|
|
|
|
|
|
|
|
|
|
|
|
class MyForm(forms.Form):
|
|
|
|
text = forms.CharField()
|
|
|
|
|
|
|
|
|
|
|
|
class PetForm(forms.ModelForm):
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = Pet
|
|
|
|
fields = ('name',)
|
|
|
|
|
|
|
|
|
|
|
|
def test_needs_form_class():
|
|
|
|
with raises(Exception) as exc:
|
|
|
|
class MyMutation(FormMutation):
|
|
|
|
pass
|
|
|
|
|
2017-10-02 21:03:20 +03:00
|
|
|
assert exc.value.args[0] == 'form_class is required for FormMutation'
|
2017-07-18 18:15:25 +03:00
|
|
|
|
|
|
|
|
2017-10-02 21:03:20 +03:00
|
|
|
def test_has_output_fields():
|
2017-07-18 18:15:25 +03:00
|
|
|
class MyMutation(FormMutation):
|
|
|
|
class Meta:
|
|
|
|
form_class = MyForm
|
|
|
|
|
|
|
|
assert 'errors' in MyMutation._meta.fields
|
|
|
|
|
|
|
|
|
|
|
|
def test_has_input_fields():
|
|
|
|
class MyMutation(FormMutation):
|
|
|
|
class Meta:
|
|
|
|
form_class = MyForm
|
|
|
|
|
|
|
|
assert 'text' in MyMutation.Input._meta.fields
|
|
|
|
|
|
|
|
|
2017-07-18 18:48:09 +03:00
|
|
|
class ModelFormMutationTests(TestCase):
|
|
|
|
|
2017-10-02 21:03:20 +03:00
|
|
|
def test_default_meta_fields(self):
|
2017-07-18 18:48:09 +03:00
|
|
|
class PetMutation(ModelFormMutation):
|
|
|
|
class Meta:
|
|
|
|
form_class = PetForm
|
|
|
|
|
2017-10-02 21:03:20 +03:00
|
|
|
self.assertEqual(PetMutation._meta.model, Pet)
|
|
|
|
self.assertEqual(PetMutation._meta.return_field_name, 'pet')
|
|
|
|
self.assertIn('pet', PetMutation._meta.fields)
|
|
|
|
|
|
|
|
def test_custom_return_field_name(self):
|
|
|
|
class PetMutation(ModelFormMutation):
|
|
|
|
class Meta:
|
|
|
|
form_class = PetForm
|
|
|
|
model = Film
|
|
|
|
return_field_name = 'animal'
|
|
|
|
|
|
|
|
self.assertEqual(PetMutation._meta.model, Film)
|
|
|
|
self.assertEqual(PetMutation._meta.return_field_name, 'animal')
|
|
|
|
self.assertIn('animal', PetMutation._meta.fields)
|
2017-07-18 18:48:09 +03:00
|
|
|
|
|
|
|
def test_model_form_mutation_mutate(self):
|
|
|
|
class PetMutation(ModelFormMutation):
|
|
|
|
class Meta:
|
|
|
|
form_class = PetForm
|
|
|
|
|
2017-10-02 21:03:20 +03:00
|
|
|
PetMutation.mutate_and_get_payload(None, None, name='Fluffy')
|
2017-07-18 18:15:25 +03:00
|
|
|
|
2017-07-18 18:48:09 +03:00
|
|
|
self.assertEqual(Pet.objects.count(), 1)
|
|
|
|
pet = Pet.objects.get()
|
|
|
|
self.assertEqual(pet.name, 'Fluffy')
|