diff --git a/CHANGELOG.md b/CHANGELOG.md index 35420adf7af..45c035d94e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ### vNEXT - Allow `GraphQLRequestListener` callbacks in plugins to depend on `this`. [PR #2470](https://github.com/apollographql/apollo-server/pull/2470) +- `apollo-server-core`: Pass request object to `context` callback function when invoking the `executeOperation` method. [PR #2478](https://github.com/apollographql/apollo-server/pull/2478) ### v2.4.8 diff --git a/packages/apollo-server-core/src/ApolloServer.ts b/packages/apollo-server-core/src/ApolloServer.ts index 3b3dc379b71..fbb8ce958e1 100644 --- a/packages/apollo-server-core/src/ApolloServer.ts +++ b/packages/apollo-server-core/src/ApolloServer.ts @@ -572,7 +572,7 @@ export class ApolloServerBase { let options; try { - options = await this.graphQLServerOptions(); + options = await this.graphQLServerOptions({ req: request }); } catch (e) { e.message = `Invalid options provided to ApolloServer: ${e.message}`; throw new Error(e); diff --git a/packages/apollo-server-core/src/__tests__/ApolloServer.test.ts b/packages/apollo-server-core/src/__tests__/ApolloServer.test.ts new file mode 100644 index 00000000000..f7d21d37b16 --- /dev/null +++ b/packages/apollo-server-core/src/__tests__/ApolloServer.test.ts @@ -0,0 +1,40 @@ +import MockReq = require('mock-req'); + +import { ApolloServerBase } from '../ApolloServer'; +import { GraphQLSchema, GraphQLObjectType, GraphQLString } from 'graphql'; + +const queryType = new GraphQLObjectType({ + name: 'QueryType', + fields: { + testString: { + type: GraphQLString, + resolve() { + return 'it works'; + }, + }, + }, +}); + +describe('ApolloServer', () => { + describe('executeOperation', () => { + it('Passes the request object to the context callback', () => { + const schema = new GraphQLSchema({ + query: queryType, + }); + const contextMock = jest.fn(); + const apolloServer = new ApolloServerBase({ + schema, + context: contextMock, + }); + const mockRequest = new MockReq(); + const operation = { + query: '{ }', + http: mockRequest, + }; + + apolloServer.executeOperation(operation); + + expect(contextMock).toHaveBeenCalledWith({ req: operation }); + }); + }); +});