@@ -1147,6 +1147,108 @@ describe('ParseGraphQLServer', () => {
1147
1147
'someClass' ,
1148
1148
] ) ;
1149
1149
} ) ;
1150
+
1151
+ it ( 'should have clientMutationId in custom update object mutation input' , async ( ) => {
1152
+ const obj = new Parse . Object ( 'SomeClass' ) ;
1153
+ await obj . save ( ) ;
1154
+
1155
+ await parseGraphQLServer . parseGraphQLSchema . databaseController . schemaCache . clear ( ) ;
1156
+
1157
+ const createObjectInputFields = ( await apolloClient . query ( {
1158
+ query : gql `
1159
+ query {
1160
+ __type(name: "UpdateSomeClassInput") {
1161
+ inputFields {
1162
+ name
1163
+ }
1164
+ }
1165
+ }
1166
+ ` ,
1167
+ } ) ) . data [ '__type' ] . inputFields
1168
+ . map ( field => field . name )
1169
+ . sort ( ) ;
1170
+
1171
+ expect ( createObjectInputFields ) . toEqual ( [
1172
+ 'clientMutationId' ,
1173
+ 'fields' ,
1174
+ 'id' ,
1175
+ ] ) ;
1176
+ } ) ;
1177
+
1178
+ it ( 'should have clientMutationId in custom update object mutation payload' , async ( ) => {
1179
+ const obj = new Parse . Object ( 'SomeClass' ) ;
1180
+ await obj . save ( ) ;
1181
+
1182
+ await parseGraphQLServer . parseGraphQLSchema . databaseController . schemaCache . clear ( ) ;
1183
+
1184
+ const createObjectPayloadFields = ( await apolloClient . query ( {
1185
+ query : gql `
1186
+ query {
1187
+ __type(name: "UpdateSomeClassPayload") {
1188
+ fields {
1189
+ name
1190
+ }
1191
+ }
1192
+ }
1193
+ ` ,
1194
+ } ) ) . data [ '__type' ] . fields
1195
+ . map ( field => field . name )
1196
+ . sort ( ) ;
1197
+
1198
+ expect ( createObjectPayloadFields ) . toEqual ( [
1199
+ 'clientMutationId' ,
1200
+ 'someClass' ,
1201
+ ] ) ;
1202
+ } ) ;
1203
+
1204
+ it ( 'should have clientMutationId in custom delete object mutation input' , async ( ) => {
1205
+ const obj = new Parse . Object ( 'SomeClass' ) ;
1206
+ await obj . save ( ) ;
1207
+
1208
+ await parseGraphQLServer . parseGraphQLSchema . databaseController . schemaCache . clear ( ) ;
1209
+
1210
+ const createObjectInputFields = ( await apolloClient . query ( {
1211
+ query : gql `
1212
+ query {
1213
+ __type(name: "DeleteSomeClassInput") {
1214
+ inputFields {
1215
+ name
1216
+ }
1217
+ }
1218
+ }
1219
+ ` ,
1220
+ } ) ) . data [ '__type' ] . inputFields
1221
+ . map ( field => field . name )
1222
+ . sort ( ) ;
1223
+
1224
+ expect ( createObjectInputFields ) . toEqual ( [ 'clientMutationId' , 'id' ] ) ;
1225
+ } ) ;
1226
+
1227
+ it ( 'should have clientMutationId in custom delete object mutation payload' , async ( ) => {
1228
+ const obj = new Parse . Object ( 'SomeClass' ) ;
1229
+ await obj . save ( ) ;
1230
+
1231
+ await parseGraphQLServer . parseGraphQLSchema . databaseController . schemaCache . clear ( ) ;
1232
+
1233
+ const createObjectPayloadFields = ( await apolloClient . query ( {
1234
+ query : gql `
1235
+ query {
1236
+ __type(name: "DeleteSomeClassPayload") {
1237
+ fields {
1238
+ name
1239
+ }
1240
+ }
1241
+ }
1242
+ ` ,
1243
+ } ) ) . data [ '__type' ] . fields
1244
+ . map ( field => field . name )
1245
+ . sort ( ) ;
1246
+
1247
+ expect ( createObjectPayloadFields ) . toEqual ( [
1248
+ 'clientMutationId' ,
1249
+ 'someClass' ,
1250
+ ] ) ;
1251
+ } ) ;
1150
1252
} ) ;
1151
1253
1152
1254
describe ( 'Parse Class Types' , ( ) => {
@@ -1444,8 +1546,8 @@ describe('ParseGraphQLServer', () => {
1444
1546
apolloClient . query ( {
1445
1547
query : gql `
1446
1548
mutation DeleteCustomer($id: ID!) {
1447
- deleteCustomer(id: $id) {
1448
- id
1549
+ deleteCustomer(input: { id: $id } ) {
1550
+ clientMutationId
1449
1551
}
1450
1552
}
1451
1553
` ,
@@ -1532,8 +1634,8 @@ describe('ParseGraphQLServer', () => {
1532
1634
apolloClient . query ( {
1533
1635
query : gql `
1534
1636
mutation DeleteSuperCar($id: ID!) {
1535
- deleteSuperCar(id: $id) {
1536
- id
1637
+ deleteSuperCar(input: { id: $id } ) {
1638
+ clientMutationId
1537
1639
}
1538
1640
}
1539
1641
` ,
@@ -1578,7 +1680,9 @@ describe('ParseGraphQLServer', () => {
1578
1680
apolloClient . query ( {
1579
1681
query : gql `
1580
1682
mutation DeleteCustomer($id: ID!, $foo: String!) {
1581
- deleteCustomer(id: $id)
1683
+ deleteCustomer(input: { id: $id }) {
1684
+ clientMutationId
1685
+ }
1582
1686
}
1583
1687
` ,
1584
1688
variables : {
@@ -2355,20 +2459,36 @@ describe('ParseGraphQLServer', () => {
2355
2459
$id5: ID!
2356
2460
$id6: ID!
2357
2461
) {
2358
- secondaryObject1: deleteSecondaryObject(id: $id1) {
2359
- id
2360
- objectId
2361
- someField
2462
+ secondaryObject1: deleteSecondaryObject(
2463
+ input: { id: $id1 }
2464
+ ) {
2465
+ secondaryObject {
2466
+ id
2467
+ objectId
2468
+ someField
2469
+ }
2362
2470
}
2363
- secondaryObject3: deleteSecondaryObject(id: $id3) {
2364
- objectId
2365
- someField
2471
+ secondaryObject3: deleteSecondaryObject(
2472
+ input: { id: $id3 }
2473
+ ) {
2474
+ secondaryObject {
2475
+ objectId
2476
+ someField
2477
+ }
2366
2478
}
2367
- secondaryObject5: deleteSecondaryObject(id: $id5) {
2368
- id
2479
+ secondaryObject5: deleteSecondaryObject(
2480
+ input: { id: $id5 }
2481
+ ) {
2482
+ secondaryObject {
2483
+ id
2484
+ }
2369
2485
}
2370
- secondaryObject6: deleteSecondaryObject(id: $id6) {
2371
- objectId
2486
+ secondaryObject6: deleteSecondaryObject(
2487
+ input: { id: $id6 }
2488
+ ) {
2489
+ secondaryObject {
2490
+ objectId
2491
+ }
2372
2492
}
2373
2493
}
2374
2494
` ,
@@ -2466,14 +2586,19 @@ describe('ParseGraphQLServer', () => {
2466
2586
` ,
2467
2587
variables : {
2468
2588
id1 :
2469
- deleteSecondaryObjectsResult . data . secondaryObject1 . objectId ,
2589
+ deleteSecondaryObjectsResult . data . secondaryObject1
2590
+ . secondaryObject . objectId ,
2470
2591
id2 : getSecondaryObjectsResult . data . secondaryObject2 . id ,
2471
2592
id3 :
2472
- deleteSecondaryObjectsResult . data . secondaryObject3 . objectId ,
2593
+ deleteSecondaryObjectsResult . data . secondaryObject3
2594
+ . secondaryObject . objectId ,
2473
2595
id4 : getSecondaryObjectsResult . data . secondaryObject4 . objectId ,
2474
- id5 : deleteSecondaryObjectsResult . data . secondaryObject5 . id ,
2596
+ id5 :
2597
+ deleteSecondaryObjectsResult . data . secondaryObject5
2598
+ . secondaryObject . id ,
2475
2599
id6 :
2476
- deleteSecondaryObjectsResult . data . secondaryObject6 . objectId ,
2600
+ deleteSecondaryObjectsResult . data . secondaryObject6
2601
+ . secondaryObject . objectId ,
2477
2602
} ,
2478
2603
context : {
2479
2604
headers : {
@@ -5951,6 +6076,7 @@ describe('ParseGraphQLServer', () => {
5951
6076
5952
6077
describe ( 'Delete' , ( ) => {
5953
6078
it ( 'should return a specific type using class specific mutation' , async ( ) => {
6079
+ const clientMutationId = uuidv4 ( ) ;
5954
6080
const obj = new Parse . Object ( 'Customer' ) ;
5955
6081
obj . set ( 'someField1' , 'someField1Value1' ) ;
5956
6082
obj . set ( 'someField2' , 'someField2Value1' ) ;
@@ -5960,25 +6086,36 @@ describe('ParseGraphQLServer', () => {
5960
6086
5961
6087
const result = await apolloClient . mutate ( {
5962
6088
mutation : gql `
5963
- mutation DeleteCustomer($id: ID!) {
5964
- deleteCustomer(id: $id) {
5965
- id
5966
- objectId
5967
- someField1
5968
- someField2
6089
+ mutation DeleteCustomer($input: DeleteCustomerInput!) {
6090
+ deleteCustomer(input: $input) {
6091
+ clientMutationId
6092
+ customer {
6093
+ id
6094
+ objectId
6095
+ someField1
6096
+ someField2
6097
+ }
5969
6098
}
5970
6099
}
5971
6100
` ,
5972
6101
variables : {
5973
- id : obj . id ,
6102
+ input : {
6103
+ clientMutationId,
6104
+ id : obj . id ,
6105
+ } ,
5974
6106
} ,
5975
6107
} ) ;
5976
6108
5977
- expect ( result . data . deleteCustomer . objectId ) . toEqual ( obj . id ) ;
5978
- expect ( result . data . deleteCustomer . someField1 ) . toEqual (
6109
+ expect ( result . data . deleteCustomer . clientMutationId ) . toEqual (
6110
+ clientMutationId
6111
+ ) ;
6112
+ expect ( result . data . deleteCustomer . customer . objectId ) . toEqual (
6113
+ obj . id
6114
+ ) ;
6115
+ expect ( result . data . deleteCustomer . customer . someField1 ) . toEqual (
5979
6116
'someField1Value1'
5980
6117
) ;
5981
- expect ( result . data . deleteCustomer . someField2 ) . toEqual (
6118
+ expect ( result . data . deleteCustomer . customer . someField2 ) . toEqual (
5982
6119
'someField2Value1'
5983
6120
) ;
5984
6121
@@ -5998,8 +6135,11 @@ describe('ParseGraphQLServer', () => {
5998
6135
mutation DeleteSomeObject(
5999
6136
$id: ID!
6000
6137
) {
6001
- delete: delete${ className } (id: $id) {
6002
- objectId
6138
+ delete: delete${ className } (input: { id: $id }) {
6139
+ ${ className . charAt ( 0 ) . toLowerCase ( ) +
6140
+ className . slice ( 1 ) } {
6141
+ objectId
6142
+ }
6003
6143
}
6004
6144
}
6005
6145
` ,
@@ -6035,31 +6175,43 @@ describe('ParseGraphQLServer', () => {
6035
6175
} )
6036
6176
) ;
6037
6177
expect (
6038
- ( await deleteObject ( object4 . className , object4 . id ) ) . data . delete
6178
+ ( await deleteObject ( object4 . className , object4 . id ) ) . data . delete [
6179
+ object4 . className . charAt ( 0 ) . toLowerCase ( ) +
6180
+ object4 . className . slice ( 1 )
6181
+ ]
6039
6182
) . toEqual ( { objectId : object4 . id , __typename : 'PublicClass' } ) ;
6040
6183
await expectAsync (
6041
6184
object4 . fetch ( { useMasterKey : true } )
6042
6185
) . toBeRejectedWith ( jasmine . stringMatching ( 'Object not found' ) ) ;
6043
6186
expect (
6044
6187
( await deleteObject ( object1 . className , object1 . id , {
6045
6188
'X-Parse-Master-Key' : 'test' ,
6046
- } ) ) . data . delete
6189
+ } ) ) . data . delete [
6190
+ object1 . className . charAt ( 0 ) . toLowerCase ( ) +
6191
+ object1 . className . slice ( 1 )
6192
+ ]
6047
6193
) . toEqual ( { objectId : object1 . id , __typename : 'GraphQLClass' } ) ;
6048
6194
await expectAsync (
6049
6195
object1 . fetch ( { useMasterKey : true } )
6050
6196
) . toBeRejectedWith ( jasmine . stringMatching ( 'Object not found' ) ) ;
6051
6197
expect (
6052
6198
( await deleteObject ( object2 . className , object2 . id , {
6053
6199
'X-Parse-Session-Token' : user2 . getSessionToken ( ) ,
6054
- } ) ) . data . delete
6200
+ } ) ) . data . delete [
6201
+ object2 . className . charAt ( 0 ) . toLowerCase ( ) +
6202
+ object2 . className . slice ( 1 )
6203
+ ]
6055
6204
) . toEqual ( { objectId : object2 . id , __typename : 'GraphQLClass' } ) ;
6056
6205
await expectAsync (
6057
6206
object2 . fetch ( { useMasterKey : true } )
6058
6207
) . toBeRejectedWith ( jasmine . stringMatching ( 'Object not found' ) ) ;
6059
6208
expect (
6060
6209
( await deleteObject ( object3 . className , object3 . id , {
6061
6210
'X-Parse-Session-Token' : user5 . getSessionToken ( ) ,
6062
- } ) ) . data . delete
6211
+ } ) ) . data . delete [
6212
+ object3 . className . charAt ( 0 ) . toLowerCase ( ) +
6213
+ object3 . className . slice ( 1 )
6214
+ ]
6063
6215
) . toEqual ( { objectId : object3 . id , __typename : 'GraphQLClass' } ) ;
6064
6216
await expectAsync (
6065
6217
object3 . fetch ( { useMasterKey : true } )
@@ -6077,8 +6229,11 @@ describe('ParseGraphQLServer', () => {
6077
6229
mutation DeleteSomeObject(
6078
6230
$id: ID!
6079
6231
) {
6080
- delete${ className } (id: $id) {
6081
- objectId
6232
+ delete${ className } (input: { id: $id }) {
6233
+ ${ className . charAt ( 0 ) . toLowerCase ( ) +
6234
+ className . slice ( 1 ) } {
6235
+ objectId
6236
+ }
6082
6237
}
6083
6238
}
6084
6239
` ,
@@ -6116,6 +6271,9 @@ describe('ParseGraphQLServer', () => {
6116
6271
expect (
6117
6272
( await deleteObject ( object4 . className , object4 . id ) ) . data [
6118
6273
`delete${ object4 . className } `
6274
+ ] [
6275
+ object4 . className . charAt ( 0 ) . toLowerCase ( ) +
6276
+ object4 . className . slice ( 1 )
6119
6277
] . objectId
6120
6278
) . toEqual ( object4 . id ) ;
6121
6279
await expectAsync (
@@ -6124,23 +6282,32 @@ describe('ParseGraphQLServer', () => {
6124
6282
expect (
6125
6283
( await deleteObject ( object1 . className , object1 . id , {
6126
6284
'X-Parse-Master-Key' : 'test' ,
6127
- } ) ) . data [ `delete${ object1 . className } ` ] . objectId
6285
+ } ) ) . data [ `delete${ object1 . className } ` ] [
6286
+ object1 . className . charAt ( 0 ) . toLowerCase ( ) +
6287
+ object1 . className . slice ( 1 )
6288
+ ] . objectId
6128
6289
) . toEqual ( object1 . id ) ;
6129
6290
await expectAsync (
6130
6291
object1 . fetch ( { useMasterKey : true } )
6131
6292
) . toBeRejectedWith ( jasmine . stringMatching ( 'Object not found' ) ) ;
6132
6293
expect (
6133
6294
( await deleteObject ( object2 . className , object2 . id , {
6134
6295
'X-Parse-Session-Token' : user2 . getSessionToken ( ) ,
6135
- } ) ) . data [ `delete${ object2 . className } ` ] . objectId
6296
+ } ) ) . data [ `delete${ object2 . className } ` ] [
6297
+ object2 . className . charAt ( 0 ) . toLowerCase ( ) +
6298
+ object2 . className . slice ( 1 )
6299
+ ] . objectId
6136
6300
) . toEqual ( object2 . id ) ;
6137
6301
await expectAsync (
6138
6302
object2 . fetch ( { useMasterKey : true } )
6139
6303
) . toBeRejectedWith ( jasmine . stringMatching ( 'Object not found' ) ) ;
6140
6304
expect (
6141
6305
( await deleteObject ( object3 . className , object3 . id , {
6142
6306
'X-Parse-Session-Token' : user5 . getSessionToken ( ) ,
6143
- } ) ) . data [ `delete${ object3 . className } ` ] . objectId
6307
+ } ) ) . data [ `delete${ object3 . className } ` ] [
6308
+ object3 . className . charAt ( 0 ) . toLowerCase ( ) +
6309
+ object3 . className . slice ( 1 )
6310
+ ] . objectId
6144
6311
) . toEqual ( object3 . id ) ;
6145
6312
await expectAsync (
6146
6313
object3 . fetch ( { useMasterKey : true } )
0 commit comments