From 523d16bbaa107925ad40acdb057b8129736a4f04 Mon Sep 17 00:00:00 2001 From: Antoine Cormouls Date: Fri, 16 Aug 2019 00:43:09 +0200 Subject: [PATCH 1/3] Add Spec --- spec/ParseGraphQLServer.spec.js | 36 +++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/spec/ParseGraphQLServer.spec.js b/spec/ParseGraphQLServer.spec.js index be2caa8550..fff113b581 100644 --- a/spec/ParseGraphQLServer.spec.js +++ b/spec/ParseGraphQLServer.spec.js @@ -5723,6 +5723,42 @@ describe('ParseGraphQLServer', () => { expect(getResult.data.objects.someClasses.results.length).toEqual(2); }); + it('should support undefined array values', async () => { + const schema = await new Parse.Schema('SomeClass'); + schema.addArray('someArray'); + await schema.save(); + + const obj = new Parse.Object('SomeClass'); + await obj.save(); + + await parseGraphQLServer.parseGraphQLSchema.databaseController.schemaCache.clear(); + + const getResult = await apolloClient.query({ + query: gql` + query GetSomeObject($objectId: ID!) { + objects { + someClass(objectId: $objectId) { + objectId + someArray { + ... on Element { + value + } + } + } + } + } + `, + variables: { + objectId: obj.id, + }, + }); + + expect( + Array.isArray(getResult.data.objects.someClass.someArray) + ).toBeTruthy(); + expect(getResult.data.objects.someClass.someArray.length).toEqual(0); + }); + it('should support null values', async () => { const createResult = await apolloClient.mutate({ mutation: gql` From 3a69d8ac590e12ac4523a890561f828ca4103f0f Mon Sep 17 00:00:00 2001 From: Antoine Cormouls Date: Fri, 16 Aug 2019 00:51:59 +0200 Subject: [PATCH 2/3] Fix Undefined Array --- src/GraphQL/loaders/parseClassTypes.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/GraphQL/loaders/parseClassTypes.js b/src/GraphQL/loaders/parseClassTypes.js index 0bbd184822..2fa85d48d6 100644 --- a/src/GraphQL/loaders/parseClassTypes.js +++ b/src/GraphQL/loaders/parseClassTypes.js @@ -639,6 +639,7 @@ const load = ( description: `Use Inline Fragment on Array to get results: https://graphql.org/learn/queries/#inline-fragments`, type, async resolve(source) { + if (!source[field]) return []; return source[field].map(async elem => { if ( elem.className && From 3160f7e81d2677375f154f2dd29955adfa8b8ca1 Mon Sep 17 00:00:00 2001 From: Antoine Cormouls Date: Fri, 16 Aug 2019 01:33:19 +0200 Subject: [PATCH 3/3] Nullability policy --- spec/ParseGraphQLServer.spec.js | 8 ++------ src/GraphQL/loaders/parseClassTypes.js | 2 +- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/spec/ParseGraphQLServer.spec.js b/spec/ParseGraphQLServer.spec.js index fff113b581..b77e8a1105 100644 --- a/spec/ParseGraphQLServer.spec.js +++ b/spec/ParseGraphQLServer.spec.js @@ -5723,7 +5723,7 @@ describe('ParseGraphQLServer', () => { expect(getResult.data.objects.someClasses.results.length).toEqual(2); }); - it('should support undefined array values', async () => { + it('should support undefined array', async () => { const schema = await new Parse.Schema('SomeClass'); schema.addArray('someArray'); await schema.save(); @@ -5752,11 +5752,7 @@ describe('ParseGraphQLServer', () => { objectId: obj.id, }, }); - - expect( - Array.isArray(getResult.data.objects.someClass.someArray) - ).toBeTruthy(); - expect(getResult.data.objects.someClass.someArray.length).toEqual(0); + expect(getResult.data.objects.someClass.someArray).toEqual(null); }); it('should support null values', async () => { diff --git a/src/GraphQL/loaders/parseClassTypes.js b/src/GraphQL/loaders/parseClassTypes.js index 2fa85d48d6..fb1de5bf30 100644 --- a/src/GraphQL/loaders/parseClassTypes.js +++ b/src/GraphQL/loaders/parseClassTypes.js @@ -639,7 +639,7 @@ const load = ( description: `Use Inline Fragment on Array to get results: https://graphql.org/learn/queries/#inline-fragments`, type, async resolve(source) { - if (!source[field]) return []; + if (!source[field]) return null; return source[field].map(async elem => { if ( elem.className &&