From dc3b87ef90cc399d64063f1128b115f533432489 Mon Sep 17 00:00:00 2001 From: mmahoney Date: Fri, 8 Jun 2018 16:26:53 -0400 Subject: [PATCH 1/2] 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. --- src/type/validate.js | 18 ------------------ 1 file changed, 18 deletions(-) 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, From 86308485475674c8de3c2942f30fe0d03fdc9903 Mon Sep 17 00:00:00 2001 From: mmahoney Date: Fri, 8 Jun 2018 16:32:19 -0400 Subject: [PATCH 2/2] Update test to accept unimplemented interface --- src/type/__tests__/validation-test.js | 10 ++-------- 1 file changed, 2 insertions(+), 8 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([]); }); });