From 441564824c94f9dafd06ef7926031f66beebcf64 Mon Sep 17 00:00:00 2001 From: Trevor Scheer Date: Tue, 11 Jun 2019 08:06:31 -0700 Subject: [PATCH] [Federation] Allow specified directives during validation (#2823) The keyFieldsMissingExternal validator should permit standard directives just like we do in composition everywhere else. --- packages/apollo-federation/CHANGELOG.md | 2 ++ .../keyFieldsMissingExternal.test.ts | 31 +++++++++++++++++++ .../keyFieldsMissingExternal.ts | 3 +- 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/packages/apollo-federation/CHANGELOG.md b/packages/apollo-federation/CHANGELOG.md index be5f084abb3..5dcce0a720f 100644 --- a/packages/apollo-federation/CHANGELOG.md +++ b/packages/apollo-federation/CHANGELOG.md @@ -2,6 +2,8 @@ ### vNEXT +* Allow specified directives during validation (@deprecated) [#2823](https://github.com/apollographql/apollo-server/pull/2823) + # v0.6.1 * Normalize SDL in a normalization step before validation [#2771](https://github.com/apollographql/apollo-server/pull/2771) diff --git a/packages/apollo-federation/src/composition/validate/preComposition/__tests__/keyFieldsMissingExternal.test.ts b/packages/apollo-federation/src/composition/validate/preComposition/__tests__/keyFieldsMissingExternal.test.ts index 222d5e9caaf..3811694310e 100644 --- a/packages/apollo-federation/src/composition/validate/preComposition/__tests__/keyFieldsMissingExternal.test.ts +++ b/packages/apollo-federation/src/composition/validate/preComposition/__tests__/keyFieldsMissingExternal.test.ts @@ -51,6 +51,37 @@ describe('keyFieldsMissingExternal', () => { expect(warnings).toHaveLength(0); }); + it('has no warnings with @deprecated directive usage', () => { + const serviceA = { + typeDefs: gql` + extend type Car @key(fields: "model { name kit { upc } } year") { + model: Model! @external + year: String! @external + color: String! @deprecated(reason: "Use colors instead") + colors: Color! + } + + extend type Model { + name: String! @external + kit: Kit @external + } + + extend type Kit { + upc: String! @external + } + + enum Color { + Red + Blue + } + `, + name: 'serviceA', + }; + + const warnings = validateKeyFieldsMissingExternal(serviceA); + expect(warnings).toHaveLength(0); + }); + it("warns when a @key argument doesn't reference an @external field", () => { const serviceA = { typeDefs: gql` diff --git a/packages/apollo-federation/src/composition/validate/preComposition/keyFieldsMissingExternal.ts b/packages/apollo-federation/src/composition/validate/preComposition/keyFieldsMissingExternal.ts index 18fd77698a3..58b868d3e82 100644 --- a/packages/apollo-federation/src/composition/validate/preComposition/keyFieldsMissingExternal.ts +++ b/packages/apollo-federation/src/composition/validate/preComposition/keyFieldsMissingExternal.ts @@ -5,6 +5,7 @@ import { parse, GraphQLSchema, GraphQLError, + specifiedDirectives, } from 'graphql'; import { buildSchemaFromSDL } from 'apollo-graphql'; import { isNotNullOrUndefined } from 'apollo-env'; @@ -58,7 +59,7 @@ export const keyFieldsMissingExternal = ({ // this allows us to build a partial schema let schema = new GraphQLSchema({ query: undefined, - directives: federationDirectives, + directives: [...specifiedDirectives, ...federationDirectives], }); try { schema = buildSchemaFromSDL(typeDefs, schema);