55
66from graphene import ObjectType , Schema , String , Field
77from graphene_django import DjangoObjectType
8- from graphene_django .tests .models import Film , FilmDetails , Pet
8+ from graphene_django .tests .models import Film , Pet
99
1010from ...settings import graphene_settings
1111from ..mutation import DjangoFormMutation , DjangoModelFormMutation
@@ -29,6 +29,12 @@ class Meta:
2929 model = Pet
3030 fields = "__all__"
3131
32+ def clean_age (self ):
33+ age = self .cleaned_data ["age" ]
34+ if age >= 99 :
35+ raise ValidationError ("Too old" )
36+ return age
37+
3238
3339class PetType (DjangoObjectType ):
3440 class Meta :
@@ -42,12 +48,6 @@ class Meta:
4248 fields = "__all__"
4349
4450
45- class FilmDetailsType (DjangoObjectType ):
46- class Meta :
47- model = FilmDetails
48- fields = "__all__"
49-
50-
5151def test_needs_form_class ():
5252 with raises (Exception ) as exc :
5353
@@ -185,23 +185,14 @@ class Meta:
185185 self .assertIn ("client_mutation_id" , PetMutation .Input ._meta .fields )
186186 self .assertNotIn ("id" , PetMutation .Input ._meta .fields )
187187
188- def test_return_field_name_is_camelcased (self ):
189- class PetMutation (DjangoModelFormMutation ):
190- class Meta :
191- form_class = PetForm
192- model = FilmDetails
193-
194- self .assertEqual (PetMutation ._meta .model , FilmDetails )
195- self .assertEqual (PetMutation ._meta .return_field_name , "filmDetails" )
196-
197188 def test_custom_return_field_name (self ):
198189 class PetMutation (DjangoModelFormMutation ):
199190 class Meta :
200191 form_class = PetForm
201- model = Film
192+ model = Pet
202193 return_field_name = "animal"
203194
204- self .assertEqual (PetMutation ._meta .model , Film )
195+ self .assertEqual (PetMutation ._meta .model , Pet )
205196 self .assertEqual (PetMutation ._meta .return_field_name , "animal" )
206197 self .assertIn ("animal" , PetMutation ._meta .fields )
207198
@@ -258,6 +249,10 @@ class Mutation(ObjectType):
258249 name
259250 age
260251 }
252+ errors {
253+ field
254+ messages
255+ }
261256 }
262257 }
263258 """
@@ -270,6 +265,42 @@ class Mutation(ObjectType):
270265 self .assertEqual (pet .name , "Mia" )
271266 self .assertEqual (pet .age , 10 )
272267
268+ def test_model_form_mutation_invalid_input (self ):
269+ class PetMutation (DjangoModelFormMutation ):
270+ pet = Field (PetType )
271+
272+ class Meta :
273+ form_class = PetForm
274+
275+ class Mutation (ObjectType ):
276+ pet_mutation = PetMutation .Field ()
277+
278+ schema = Schema (query = MockQuery , mutation = Mutation )
279+
280+ result = schema .execute (
281+ """ mutation PetMutation {
282+ petMutation(input: { name: "Mia", age: 99 }) {
283+ pet {
284+ name
285+ age
286+ }
287+ errors {
288+ field
289+ messages
290+ }
291+ }
292+ }
293+ """
294+ )
295+ self .assertIs (result .errors , None )
296+ self .assertEqual (result .data ["petMutation" ]["pet" ], None )
297+ self .assertEqual (
298+ result .data ["petMutation" ]["errors" ],
299+ [{"field" : "age" , "messages" : ["Too old" ],}],
300+ )
301+
302+ self .assertEqual (Pet .objects .count (), 0 )
303+
273304 def test_model_form_mutation_mutate_invalid_form (self ):
274305 class PetMutation (DjangoModelFormMutation ):
275306 class Meta :
0 commit comments