From 8177dbf66f798832d3e38118a33457985face125 Mon Sep 17 00:00:00 2001 From: Benjie Gillam Date: Sun, 25 Apr 2021 14:04:51 +0100 Subject: [PATCH] Appease codecoverage --- .../SingleFieldSubscriptionsRule-test.js | 18 +++++++++- src/validation/__tests__/harness.js | 10 ++++++ .../rules/SingleFieldSubscriptionsRule.js | 36 +++++++++---------- 3 files changed, 44 insertions(+), 20 deletions(-) diff --git a/src/validation/__tests__/SingleFieldSubscriptionsRule-test.js b/src/validation/__tests__/SingleFieldSubscriptionsRule-test.js index bb04f87237..e8d9d1c8c3 100644 --- a/src/validation/__tests__/SingleFieldSubscriptionsRule-test.js +++ b/src/validation/__tests__/SingleFieldSubscriptionsRule-test.js @@ -2,7 +2,11 @@ import { describe, it } from 'mocha'; import { SingleFieldSubscriptionsRule } from '../rules/SingleFieldSubscriptionsRule'; -import { expectValidationErrors } from './harness'; +import { + expectValidationErrors, + expectValidationErrorsWithSchema, + emptySchema, +} from './harness'; function expectErrors(queryStr: string) { return expectValidationErrors(SingleFieldSubscriptionsRule, queryStr); @@ -254,4 +258,16 @@ describe('Validate: Subscriptions with single field', () => { }, ]); }); + + it('skips if not subscription type', () => { + expectValidationErrorsWithSchema( + emptySchema, + SingleFieldSubscriptionsRule, + ` + subscription { + __typename + } + `, + ).to.deep.equal([]); + }); }); diff --git a/src/validation/__tests__/harness.js b/src/validation/__tests__/harness.js index 6987f4e9d3..598bf3e422 100644 --- a/src/validation/__tests__/harness.js +++ b/src/validation/__tests__/harness.js @@ -157,6 +157,16 @@ export const testSchema: GraphQLSchema = buildSchema(` directive @onVariableDefinition on VARIABLE_DEFINITION `); +export const emptySchema: GraphQLSchema = buildSchema(` + type QueryRoot { + empty: Boolean + } + + schema { + query: QueryRoot + } +`); + export function expectValidationErrorsWithSchema( schema: GraphQLSchema, rule: ValidationRule, diff --git a/src/validation/rules/SingleFieldSubscriptionsRule.js b/src/validation/rules/SingleFieldSubscriptionsRule.js index 94956932eb..62d4b8a69f 100644 --- a/src/validation/rules/SingleFieldSubscriptionsRule.js +++ b/src/validation/rules/SingleFieldSubscriptionsRule.js @@ -10,11 +10,11 @@ import { Kind } from '../../language/kinds'; import type { ValidationContext } from '../ValidationContext'; import type { ExecutionContext } from '../../execution/execute'; -import { collectFields } from '../../execution/execute'; - -function fakeResolver() { - /* noop */ -} +import { + collectFields, + defaultFieldResolver, + defaultTypeResolver, +} from '../../execution/execute'; /** * Subscriptions must only include a non-introspection field. @@ -50,8 +50,8 @@ export function SingleFieldSubscriptionsRule( contextValue: undefined, operation: node, variableValues, - fieldResolver: fakeResolver, - typeResolver: fakeResolver, + fieldResolver: defaultFieldResolver, + typeResolver: defaultTypeResolver, errors: [], }; const fields = collectFields( @@ -78,18 +78,16 @@ export function SingleFieldSubscriptionsRule( } for (const responseKey of Object.keys(fields)) { const field = fields[responseKey][0]; - if (field) { - const fieldName = field.name.value; - if (fieldName[0] === '_' && fieldName[1] === '_') { - context.reportError( - new GraphQLError( - operationName != null - ? `Subscription "${operationName}" must not select an introspection top level field.` - : 'Anonymous Subscription must not select an introspection top level field.', - fields[responseKey], - ), - ); - } + const fieldName = field.name.value; + if (fieldName[0] === '_' && fieldName[1] === '_') { + context.reportError( + new GraphQLError( + operationName != null + ? `Subscription "${operationName}" must not select an introspection top level field.` + : 'Anonymous Subscription must not select an introspection top level field.', + fields[responseKey], + ), + ); } } }