From 9925e5022162b681c7647a147c47ca8e6124a930 Mon Sep 17 00:00:00 2001 From: Matt Mahoney Date: Fri, 8 Jun 2018 16:44:09 -0400 Subject: [PATCH] Allow interfaces to have no implementors (#1376) * Allow interfaces to have no implementors Reverts #1277, and implements spec removal from #459. While it's an open question whether this validation is good, we need to provide an upgrade path for schemas that currently do not satisfy this validation rule. * Update test to accept unimplemented interface --- src/type/__tests__/validation-test.js | 10 ++-------- src/type/validate.js | 18 ------------------ 2 files changed, 2 insertions(+), 26 deletions(-) diff --git a/src/type/__tests__/validation-test.js b/src/type/__tests__/validation-test.js index c04905b3c9..c1d328582a 100644 --- a/src/type/__tests__/validation-test.js +++ b/src/type/__tests__/validation-test.js @@ -1205,7 +1205,7 @@ describe('Type System: Interface fields must have output types', () => { ]); }); - it('rejects an interface not implemented by at least one object', () => { + it('accepts an interface not implemented by at least one object', () => { const schema = buildSchema(` type Query { test: SomeInterface @@ -1215,13 +1215,7 @@ describe('Type System: Interface fields must have output types', () => { foo: String } `); - expect(validateSchema(schema)).to.deep.equal([ - { - message: - 'Interface SomeInterface must be implemented by at least one Object type.', - locations: [{ line: 6, column: 7 }], - }, - ]); + expect(validateSchema(schema)).to.deep.equal([]); }); }); diff --git a/src/type/validate.js b/src/type/validate.js index a5cc5591f8..b02134775f 100644 --- a/src/type/validate.js +++ b/src/type/validate.js @@ -257,9 +257,6 @@ function validateTypes(context: SchemaValidationContext): void { } else if (isInterfaceType(type)) { // Ensure fields are valid. validateFields(context, type); - - // Ensure Interfaces include at least 1 Object type. - validateInterfaces(context, type); } else if (isUnionType(type)) { // Ensure Unions include valid member types. validateUnionMembers(context, type); @@ -367,21 +364,6 @@ function validateObjectInterfaces( }); } -function validateInterfaces( - context: SchemaValidationContext, - iface: GraphQLInterfaceType, -): void { - const possibleTypes = context.schema.getPossibleTypes(iface); - - if (possibleTypes.length === 0) { - context.reportError( - `Interface ${iface.name} must be implemented ` + - `by at least one Object type.`, - iface.astNode, - ); - } -} - function validateObjectImplementsInterface( context: SchemaValidationContext, object: GraphQLObjectType,