2
2
from django .test import TestCase
3
3
from py .test import raises
4
4
5
+ from graphene import ObjectType , Schema , String , Field
6
+ from graphene_django import DjangoObjectType
5
7
from graphene_django .tests .models import Film , FilmDetails , Pet
6
8
7
9
from ...settings import graphene_settings
@@ -18,6 +20,24 @@ class Meta:
18
20
fields = "__all__"
19
21
20
22
23
+ class PetType (DjangoObjectType ):
24
+ class Meta :
25
+ model = Pet
26
+ fields = "__all__"
27
+
28
+
29
+ class FilmType (DjangoObjectType ):
30
+ class Meta :
31
+ model = Film
32
+ fields = "__all__"
33
+
34
+
35
+ class FilmDetailsType (DjangoObjectType ):
36
+ class Meta :
37
+ model = FilmDetails
38
+ fields = "__all__"
39
+
40
+
21
41
def test_needs_form_class ():
22
42
with raises (Exception ) as exc :
23
43
@@ -59,6 +79,10 @@ class Meta:
59
79
graphene_settings .CAMELCASE_ERRORS = False
60
80
61
81
82
+ class MockQuery (ObjectType ):
83
+ a = String ()
84
+
85
+
62
86
class ModelFormMutationTests (TestCase ):
63
87
def test_default_meta_fields (self ):
64
88
class PetMutation (DjangoModelFormMutation ):
@@ -113,34 +137,70 @@ class Meta:
113
137
self .assertEqual (PetMutation ._meta .return_field_name , "animal" )
114
138
self .assertIn ("animal" , PetMutation ._meta .fields )
115
139
116
- def test_model_form_mutation_mutate (self ):
140
+ def test_model_form_mutation_mutate_existing (self ):
117
141
class PetMutation (DjangoModelFormMutation ):
142
+ pet = Field (PetType )
143
+
118
144
class Meta :
119
145
form_class = PetForm
120
146
147
+ class Mutation (ObjectType ):
148
+ pet_mutation = PetMutation .Field ()
149
+
150
+ schema = Schema (query = MockQuery , mutation = Mutation )
151
+
121
152
pet = Pet .objects .create (name = "Axel" , age = 10 )
122
153
123
- result = PetMutation .mutate_and_get_payload (
124
- None , None , id = pet .pk , name = "Mia" , age = 10
154
+ result = schema .execute (
155
+ """ mutation PetMutation($pk: ID!) {
156
+ petMutation(input: { id: $pk, name: "Mia", age: 10 }) {
157
+ pet {
158
+ name
159
+ age
160
+ }
161
+ }
162
+ }
163
+ """ ,
164
+ variables = {"pk" : pet .pk },
125
165
)
126
166
167
+ self .assertIs (result .errors , None )
168
+ self .assertEqual (result .data ["petMutation" ]["pet" ], {"name" : "Mia" , "age" : 10 })
169
+
127
170
self .assertEqual (Pet .objects .count (), 1 )
128
171
pet .refresh_from_db ()
129
172
self .assertEqual (pet .name , "Mia" )
130
- self .assertEqual (result .errors , [])
131
173
132
- def test_model_form_mutation_updates_existing_ (self ):
174
+ def test_model_form_mutation_creates_new (self ):
133
175
class PetMutation (DjangoModelFormMutation ):
176
+ pet = Field (PetType )
177
+
134
178
class Meta :
135
179
form_class = PetForm
136
180
137
- result = PetMutation .mutate_and_get_payload (None , None , name = "Mia" , age = 10 )
181
+ class Mutation (ObjectType ):
182
+ pet_mutation = PetMutation .Field ()
183
+
184
+ schema = Schema (query = MockQuery , mutation = Mutation )
185
+
186
+ result = schema .execute (
187
+ """ mutation PetMutation {
188
+ petMutation(input: { name: "Mia", age: 10 }) {
189
+ pet {
190
+ name
191
+ age
192
+ }
193
+ }
194
+ }
195
+ """
196
+ )
197
+ self .assertIs (result .errors , None )
198
+ self .assertEqual (result .data ["petMutation" ]["pet" ], {"name" : "Mia" , "age" : 10 })
138
199
139
200
self .assertEqual (Pet .objects .count (), 1 )
140
201
pet = Pet .objects .get ()
141
202
self .assertEqual (pet .name , "Mia" )
142
203
self .assertEqual (pet .age , 10 )
143
- self .assertEqual (result .errors , [])
144
204
145
205
def test_model_form_mutation_mutate_invalid_form (self ):
146
206
class PetMutation (DjangoModelFormMutation ):
0 commit comments