5
5
6
6
from graphene import ObjectType , Schema , String , Field
7
7
from graphene_django import DjangoObjectType
8
- from graphene_django .tests .models import Film , FilmDetails , Pet
8
+ from graphene_django .tests .models import Film , Pet
9
9
10
10
from ...settings import graphene_settings
11
11
from ..mutation import DjangoFormMutation , DjangoModelFormMutation
@@ -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 :
@@ -42,12 +48,6 @@ class Meta:
42
48
fields = "__all__"
43
49
44
50
45
- class FilmDetailsType (DjangoObjectType ):
46
- class Meta :
47
- model = FilmDetails
48
- fields = "__all__"
49
-
50
-
51
51
def test_needs_form_class ():
52
52
with raises (Exception ) as exc :
53
53
@@ -185,23 +185,14 @@ class Meta:
185
185
self .assertIn ("client_mutation_id" , PetMutation .Input ._meta .fields )
186
186
self .assertNotIn ("id" , PetMutation .Input ._meta .fields )
187
187
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
-
197
188
def test_custom_return_field_name (self ):
198
189
class PetMutation (DjangoModelFormMutation ):
199
190
class Meta :
200
191
form_class = PetForm
201
- model = Film
192
+ model = Pet
202
193
return_field_name = "animal"
203
194
204
- self .assertEqual (PetMutation ._meta .model , Film )
195
+ self .assertEqual (PetMutation ._meta .model , Pet )
205
196
self .assertEqual (PetMutation ._meta .return_field_name , "animal" )
206
197
self .assertIn ("animal" , PetMutation ._meta .fields )
207
198
@@ -258,6 +249,10 @@ class Mutation(ObjectType):
258
249
name
259
250
age
260
251
}
252
+ errors {
253
+ field
254
+ messages
255
+ }
261
256
}
262
257
}
263
258
"""
@@ -270,6 +265,42 @@ class Mutation(ObjectType):
270
265
self .assertEqual (pet .name , "Mia" )
271
266
self .assertEqual (pet .age , 10 )
272
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
+
273
304
def test_model_form_mutation_mutate_invalid_form (self ):
274
305
class PetMutation (DjangoModelFormMutation ):
275
306
class Meta :
0 commit comments