From b60563841532d3e6c1d77def7482793860c2b6b7 Mon Sep 17 00:00:00 2001 From: Antonio Davi Macedo Coelho de Castro Date: Tue, 23 Jul 2019 06:29:38 -0700 Subject: [PATCH] Fix: GraphQL _or operator not working (#5840) --- spec/ParseGraphQLServer.spec.js | 38 +++++++++++++++++++++++++++ src/Controllers/DatabaseController.js | 2 +- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/spec/ParseGraphQLServer.spec.js b/spec/ParseGraphQLServer.spec.js index f708f78b..fa3c9d38 100644 --- a/spec/ParseGraphQLServer.spec.js +++ b/spec/ParseGraphQLServer.spec.js @@ -1523,6 +1523,44 @@ describe('ParseGraphQLServer', () => { ).toEqual(['someValue1', 'someValue3']); }); + it('should support _or operation', async () => { + await prepareData(); + + await parseGraphQLServer.parseGraphQLSchema.databaseController.schemaCache.clear(); + + const result = await apolloClient.query({ + query: gql` + query { + objects { + findGraphQLClass( + where: { + _or: [ + { someField: { _eq: "someValue1" } } + { someField: { _eq: "someValue2" } } + ] + } + ) { + results { + someField + } + } + } + } + `, + context: { + headers: { + 'X-Parse-Master-Key': 'test', + }, + }, + }); + + expect( + result.data.objects.findGraphQLClass.results + .map(object => object.someField) + .sort() + ).toEqual(['someValue1', 'someValue2']); + }); + it('should support order, skip and limit arguments', async () => { const promises = []; for (let i = 0; i < 100; i++) { diff --git a/src/Controllers/DatabaseController.js b/src/Controllers/DatabaseController.js index cfe2c357..222c2fac 100644 --- a/src/Controllers/DatabaseController.js +++ b/src/Controllers/DatabaseController.js @@ -119,7 +119,7 @@ const validateQuery = ( */ Object.keys(query).forEach(key => { const noCollisions = !query.$or.some(subq => - subq.hasOwnProperty(key) + Object.hasOwnProperty.call(subq, key) ); let hasNears = false; if (query[key] != null && typeof query[key] == 'object') {