@@ -58,6 +58,40 @@ const numberHolderType = new GraphQLObjectType({
58
58
} ,
59
59
name : 'NumberHolder' ,
60
60
} ) ;
61
+ const subFieldType = new GraphQLObjectType ( {
62
+ name : 'subFieldMutation' ,
63
+ fields : {
64
+ immediatelyChangeTheNumber : {
65
+ type : numberHolderType ,
66
+ args : { newNumber : { type : GraphQLInt } } ,
67
+ resolve ( obj , { newNumber } ) {
68
+ return obj . immediatelyChangeTheNumber ( newNumber ) ;
69
+ } ,
70
+ } ,
71
+ promiseToChangeTheNumber : {
72
+ type : numberHolderType ,
73
+ args : { newNumber : { type : GraphQLInt } } ,
74
+ resolve ( obj , { newNumber } ) {
75
+ return obj . promiseToChangeTheNumber ( newNumber ) ;
76
+ } ,
77
+ } ,
78
+ failToChangeTheNumber : {
79
+ type : numberHolderType ,
80
+ args : { newNumber : { type : GraphQLInt } } ,
81
+ resolve ( obj , { newNumber } ) {
82
+ return obj . failToChangeTheNumber ( newNumber ) ;
83
+ } ,
84
+ } ,
85
+ promiseAndFailToChangeTheNumber : {
86
+ type : numberHolderType ,
87
+ args : { newNumber : { type : GraphQLInt } } ,
88
+ resolve ( obj , { newNumber } ) {
89
+ return obj . promiseAndFailToChangeTheNumber ( newNumber ) ;
90
+ } ,
91
+ } ,
92
+ } ,
93
+ } ) ;
94
+
61
95
const schema = new GraphQLSchema ( {
62
96
query : new GraphQLObjectType ( {
63
97
fields : {
@@ -67,6 +101,12 @@ const schema = new GraphQLSchema({
67
101
} ) ,
68
102
mutation : new GraphQLObjectType ( {
69
103
fields : {
104
+ subField : {
105
+ type : subFieldType ,
106
+ resolve ( obj ) {
107
+ return obj ;
108
+ } ,
109
+ } ,
70
110
immediatelyChangeTheNumber : {
71
111
type : numberHolderType ,
72
112
args : { newNumber : { type : GraphQLInt } } ,
@@ -118,6 +158,23 @@ describe('Execute: Handles mutation execution ordering', () => {
118
158
fifth: immediatelyChangeTheNumber(newNumber: 5) {
119
159
theNumber
120
160
}
161
+ subField {
162
+ first: immediatelyChangeTheNumber(newNumber: 6) {
163
+ theNumber
164
+ },
165
+ second: promiseToChangeTheNumber(newNumber: 7) {
166
+ theNumber
167
+ },
168
+ third: immediatelyChangeTheNumber(newNumber: 8) {
169
+ theNumber
170
+ }
171
+ fourth: promiseToChangeTheNumber(newNumber: 9) {
172
+ theNumber
173
+ },
174
+ fifth: immediatelyChangeTheNumber(newNumber: 10) {
175
+ theNumber
176
+ }
177
+ }
121
178
}` ;
122
179
123
180
const mutationResult = await execute ( schema , parse ( doc ) , new Root ( 6 ) ) ;
@@ -129,6 +186,13 @@ describe('Execute: Handles mutation execution ordering', () => {
129
186
third : { theNumber : 3 } ,
130
187
fourth : { theNumber : 4 } ,
131
188
fifth : { theNumber : 5 } ,
189
+ subField : {
190
+ first : { theNumber : 6 } ,
191
+ second : { theNumber : 7 } ,
192
+ third : { theNumber : 8 } ,
193
+ fourth : { theNumber : 9 } ,
194
+ fifth : { theNumber : 10 } ,
195
+ } ,
132
196
} ,
133
197
} ) ;
134
198
} ) ;
@@ -153,6 +217,26 @@ describe('Execute: Handles mutation execution ordering', () => {
153
217
sixth: promiseAndFailToChangeTheNumber(newNumber: 6) {
154
218
theNumber
155
219
}
220
+ subField {
221
+ first: immediatelyChangeTheNumber(newNumber: 7) {
222
+ theNumber
223
+ },
224
+ second: promiseToChangeTheNumber(newNumber: 8) {
225
+ theNumber
226
+ },
227
+ third: failToChangeTheNumber(newNumber: 9) {
228
+ theNumber
229
+ }
230
+ fourth: promiseToChangeTheNumber(newNumber: 10) {
231
+ theNumber
232
+ },
233
+ fifth: immediatelyChangeTheNumber(newNumber: 11) {
234
+ theNumber
235
+ }
236
+ sixth: promiseAndFailToChangeTheNumber(newNumber: 12) {
237
+ theNumber
238
+ }
239
+ }
156
240
}` ;
157
241
158
242
const result = await execute ( schema , parse ( doc ) , new Root ( 6 ) ) ;
@@ -165,6 +249,14 @@ describe('Execute: Handles mutation execution ordering', () => {
165
249
fourth : { theNumber : 4 } ,
166
250
fifth : { theNumber : 5 } ,
167
251
sixth : null ,
252
+ subField : {
253
+ first : { theNumber : 7 } ,
254
+ second : { theNumber : 8 } ,
255
+ third : null ,
256
+ fourth : { theNumber : 10 } ,
257
+ fifth : { theNumber : 11 } ,
258
+ sixth : null ,
259
+ } ,
168
260
} ,
169
261
errors : [
170
262
{
@@ -177,6 +269,16 @@ describe('Execute: Handles mutation execution ordering', () => {
177
269
locations : [ { line : 17 , column : 7 } ] ,
178
270
path : [ 'sixth' ] ,
179
271
} ,
272
+ {
273
+ message : 'Cannot change the number' ,
274
+ locations : [ { line : 27 , column : 9 } ] ,
275
+ path : [ 'subField' , 'third' ] ,
276
+ } ,
277
+ {
278
+ message : 'Cannot change the number' ,
279
+ locations : [ { line : 36 , column : 9 } ] ,
280
+ path : [ 'subField' , 'sixth' ] ,
281
+ } ,
180
282
] ,
181
283
} ) ;
182
284
} ) ;
0 commit comments