diff --git a/src/utilities/__tests__/buildASTSchema.js b/src/utilities/__tests__/buildASTSchema.js index 6de1556e7e..79c35cbcb1 100644 --- a/src/utilities/__tests__/buildASTSchema.js +++ b/src/utilities/__tests__/buildASTSchema.js @@ -253,6 +253,40 @@ type Mutation { var output = cycleOutput(body, 'HelloScalars', 'Mutation'); expect(output).to.equal(body); }); + + it('Unreferenced type implementing referenced interface', () => { + var body = ` +type Concrete implements Iface { + key: String +} + +interface Iface { + key: String +} + +type Query { + iface: Iface +} +`; + var output = cycleOutput(body, 'Query'); + expect(output).to.equal(body); + }); + + it('Unreferenced type implementing referenced union', () => { + var body = ` +type Concrete { + key: String +} + +type Query { + union: Union +} + +union Union = Concrete +`; + var output = cycleOutput(body, 'Query'); + expect(output).to.equal(body); + }); }); describe('Schema Parser Failures', () => { diff --git a/src/utilities/buildASTSchema.js b/src/utilities/buildASTSchema.js index 433151d941..dfe64e713d 100644 --- a/src/utilities/buildASTSchema.js +++ b/src/utilities/buildASTSchema.js @@ -140,13 +140,14 @@ export function buildASTSchema( }; } - var produceTypeDef = getTypeDefProducer(ast); if (isNullish(astMap[queryTypeName])) { throw new Error(`Type ${queryTypeName} not found in document`); } + ast.definitions.forEach(produceTypeDef); + var queryType = produceTypeDef(astMap[queryTypeName]); var schema; if (isNullish(mutationTypeName)) {