From cea1988ce929bbe6e1761d398708b71a27578827 Mon Sep 17 00:00:00 2001 From: Antoine Cormouls Date: Fri, 16 Aug 2019 20:12:29 +0200 Subject: [PATCH] GraphQL: Fix undefined Array (#5926) * Add Spec * Fix Undefined Array * Nullability policy --- spec/ParseGraphQLServer.spec.js | 32 ++++++++++++++++++++++++++ src/GraphQL/loaders/parseClassTypes.js | 1 + 2 files changed, 33 insertions(+) diff --git a/spec/ParseGraphQLServer.spec.js b/spec/ParseGraphQLServer.spec.js index be2caa85..b77e8a11 100644 --- a/spec/ParseGraphQLServer.spec.js +++ b/spec/ParseGraphQLServer.spec.js @@ -5723,6 +5723,38 @@ describe('ParseGraphQLServer', () => { expect(getResult.data.objects.someClasses.results.length).toEqual(2); }); + it('should support undefined array', 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(getResult.data.objects.someClass.someArray).toEqual(null); + }); + it('should support null values', async () => { const createResult = await apolloClient.mutate({ mutation: gql` diff --git a/src/GraphQL/loaders/parseClassTypes.js b/src/GraphQL/loaders/parseClassTypes.js index 0bbd1848..fb1de5bf 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 null; return source[field].map(async elem => { if ( elem.className &&