diff --git a/spec/ParseGraphQLServer.spec.js b/spec/ParseGraphQLServer.spec.js index 7ba34a8220..f1fc1c859e 100644 --- a/spec/ParseGraphQLServer.spec.js +++ b/spec/ParseGraphQLServer.spec.js @@ -1850,6 +1850,44 @@ describe('ParseGraphQLServer', () => { expect(updatedSuperCar).toBeTruthy(); }); + it('should handle required fields from the Parse class', async () => { + const schemaController = await parseServer.config.databaseController.loadSchema(); + await schemaController.addClassIfNotExists('SuperCar', { + engine: { type: 'String', required: true }, + doors: { type: 'Number', required: true }, + price: { type: 'String' }, + mileage: { type: 'Number' }, + }); + + await resetGraphQLCache(); + + const { + data: { __type }, + } = await apolloClient.query({ + query: gql` + query requiredFields { + __type(name: "CreateSuperCarFieldsInput") { + inputFields { + name + type { + kind + } + } + } + } + `, + }); + expect( + __type.inputFields.find(o => o.name === 'price').type.kind + ).toEqual('SCALAR'); + expect( + __type.inputFields.find(o => o.name === 'engine').type.kind + ).toEqual('NON_NULL'); + expect( + __type.inputFields.find(o => o.name === 'doors').type.kind + ).toEqual('NON_NULL'); + }); + it('should only allow the supplied output fields for a class', async () => { const schemaController = await parseServer.config.databaseController.loadSchema(); diff --git a/src/GraphQL/loaders/parseClassTypes.js b/src/GraphQL/loaders/parseClassTypes.js index b010742814..336f9e9f48 100644 --- a/src/GraphQL/loaders/parseClassTypes.js +++ b/src/GraphQL/loaders/parseClassTypes.js @@ -159,8 +159,9 @@ const load = ( [field]: { description: `This is the object ${field}.`, type: - className === '_User' && - (field === 'username' || field === 'password') + (className === '_User' && + (field === 'username' || field === 'password')) || + parseClass.fields[field].required ? new GraphQLNonNull(type) : type, },