Skip to content

Commit 4107a59

Browse files
Add tests for ordering by multiple fields (#6316)
* fix(GraphQL): Unable to run queries with order as array An internal server error is thrown if the `order` query parameter is an array. Currently, `order` only works with a single value. * Add tests * Reset cache * Remove one of the tests from Postgres Co-authored-by: Douglas Muraoka <[email protected]>
1 parent 576631f commit 4107a59

File tree

1 file changed

+95
-0
lines changed

1 file changed

+95
-0
lines changed

spec/ParseGraphQLServer.spec.js

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,7 @@ describe('ParseGraphQLServer', () => {
372372

373373
object1 = new Parse.Object('GraphQLClass');
374374
object1.set('someField', 'someValue1');
375+
object1.set('someOtherField', 'A');
375376
const object1ACL = new Parse.ACL();
376377
object1ACL.setPublicReadAccess(false);
377378
object1ACL.setPublicWriteAccess(false);
@@ -386,6 +387,7 @@ describe('ParseGraphQLServer', () => {
386387

387388
object2 = new Parse.Object('GraphQLClass');
388389
object2.set('someField', 'someValue2');
390+
object2.set('someOtherField', 'A');
389391
const object2ACL = new Parse.ACL();
390392
object2ACL.setPublicReadAccess(false);
391393
object2ACL.setPublicWriteAccess(false);
@@ -400,6 +402,7 @@ describe('ParseGraphQLServer', () => {
400402

401403
object3 = new Parse.Object('GraphQLClass');
402404
object3.set('someField', 'someValue3');
405+
object3.set('someOtherField', 'B');
403406
object3.set('pointerToUser', user5);
404407
await object3.save(undefined, { useMasterKey: true });
405408

@@ -5937,6 +5940,98 @@ describe('ParseGraphQLServer', () => {
59375940
}
59385941
});
59395942
});
5943+
5944+
it('should order by multiple fields', async () => {
5945+
await prepareData();
5946+
5947+
await resetGraphQLCache();
5948+
5949+
let result;
5950+
try {
5951+
result = await apolloClient.query({
5952+
query: gql`
5953+
query OrderByMultipleFields($order: [GraphQLClassOrder!]) {
5954+
graphQLClasses(order: $order) {
5955+
edges {
5956+
node {
5957+
objectId
5958+
}
5959+
}
5960+
}
5961+
}
5962+
`,
5963+
variables: {
5964+
order: ['someOtherField_DESC', 'someField_ASC'],
5965+
},
5966+
context: {
5967+
headers: {
5968+
'X-Parse-Master-Key': 'test',
5969+
},
5970+
},
5971+
});
5972+
} catch (e) {
5973+
handleError(e);
5974+
}
5975+
5976+
expect(
5977+
result.data.graphQLClasses.edges.map(edge => edge.node.objectId)
5978+
).toEqual([object3.id, object1.id, object2.id]);
5979+
});
5980+
5981+
it_only_db('mongo')(
5982+
'should order by multiple fields on a relation field',
5983+
async () => {
5984+
await prepareData();
5985+
5986+
const parentObject = new Parse.Object('ParentClass');
5987+
const relation = parentObject.relation('graphQLClasses');
5988+
relation.add(object1);
5989+
relation.add(object2);
5990+
relation.add(object3);
5991+
await parentObject.save();
5992+
5993+
await resetGraphQLCache();
5994+
5995+
let result;
5996+
try {
5997+
result = await apolloClient.query({
5998+
query: gql`
5999+
query OrderByMultipleFieldsOnRelation(
6000+
$id: ID!
6001+
$order: [GraphQLClassOrder!]
6002+
) {
6003+
parentClass(id: $id) {
6004+
graphQLClasses(order: $order) {
6005+
edges {
6006+
node {
6007+
objectId
6008+
}
6009+
}
6010+
}
6011+
}
6012+
}
6013+
`,
6014+
variables: {
6015+
id: parentObject.id,
6016+
order: ['someOtherField_DESC', 'someField_ASC'],
6017+
},
6018+
context: {
6019+
headers: {
6020+
'X-Parse-Master-Key': 'test',
6021+
},
6022+
},
6023+
});
6024+
} catch (e) {
6025+
handleError(e);
6026+
}
6027+
6028+
expect(
6029+
result.data.parentClass.graphQLClasses.edges.map(
6030+
edge => edge.node.objectId
6031+
)
6032+
).toEqual([object3.id, object1.id, object2.id]);
6033+
}
6034+
);
59406035
});
59416036
});
59426037

0 commit comments

Comments
 (0)