@@ -29,6 +29,12 @@ class Meta:
29
29
model = Pet
30
30
fields = "__all__"
31
31
32
+ def clean_age (self ):
33
+ age = self .cleaned_data ["age" ]
34
+ if age >= 99 :
35
+ raise ValidationError ("Too old" )
36
+ return age
37
+
32
38
33
39
class PetType (DjangoObjectType ):
34
40
class Meta :
@@ -243,6 +249,10 @@ class Mutation(ObjectType):
243
249
name
244
250
age
245
251
}
252
+ errors {
253
+ field
254
+ messages
255
+ }
246
256
}
247
257
}
248
258
"""
@@ -255,6 +265,42 @@ class Mutation(ObjectType):
255
265
self .assertEqual (pet .name , "Mia" )
256
266
self .assertEqual (pet .age , 10 )
257
267
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
+
258
304
def test_model_form_mutation_mutate_invalid_form (self ):
259
305
class PetMutation (DjangoModelFormMutation ):
260
306
class Meta :
0 commit comments