From b4cd5a476351cfe46d98bc6fe90994230ed0a73a Mon Sep 17 00:00:00 2001 From: Andras Toth Date: Fri, 16 Oct 2015 09:02:11 +0200 Subject: [PATCH] feat(schema): mutation fields can be disabled --- src/schema/schema.js | 17 +++++++++++------ src/schema/schema.spec.js | 9 +++++++++ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/schema/schema.js b/src/schema/schema.js index dd05eb8..d01f34d 100644 --- a/src/schema/schema.js +++ b/src/schema/schema.js @@ -125,7 +125,7 @@ function getMutationField(graffitiModel, type) { }; } -function getFields(graffitiModels) { +function getFields(graffitiModels, {mutation} = {mutation: true}) { const types = getTypes(graffitiModels); const {queries, mutations} = reduce(types, ({queries, mutations}, type, key) => { @@ -177,15 +177,20 @@ function getFields(graffitiModels) { fields: mutations }); - return { - query: RootQuery, - mutation: RootMutation + const fields = { + query: RootQuery }; + + if (mutation) { + fields.mutation = RootMutation; + } + + return fields; } -function getSchema(mongooseModels) { +function getSchema(mongooseModels, options) { const graffitiModels = getModels(mongooseModels); - const fields = getFields(graffitiModels); + const fields = getFields(graffitiModels, options); return new GraphQLSchema(fields); } diff --git a/src/schema/schema.spec.js b/src/schema/schema.spec.js index 429d5a3..2406e7a 100644 --- a/src/schema/schema.spec.js +++ b/src/schema/schema.spec.js @@ -147,5 +147,14 @@ describe('field', () => { expect(schema._schemaConfig.query.name).to.be.equal('RootQuery'); expect(schema._schemaConfig.mutation.name).to.be.equal('RootMutation'); }); + + it('should return a GraphQL schema without mutations', function getSchemaTest() { + this.sandbox.stub(model, 'getModels').returns({}); + this.sandbox.stub(type, 'getTypes').returns(types); + const schema = getSchema([], {mutation: false}); + expect(schema).instanceOf(GraphQLSchema); + expect(schema._schemaConfig.query.name).to.be.equal('RootQuery'); + expect(schema._schemaConfig.mutation).to.be.equal(undefined); + }); }); });