diff --git a/CHANGELOG.md b/CHANGELOG.md index 8505e8746c7..07ea21de11a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ### vNEXT +- `apollo-server-core`: Pass request object to `context` callback function when invoking the `executeOperation` method. + ### v2.4.3 - `apollo-server-lambda`: Fix typings which triggered "Module has no default export" errors. [PR #2230](https://github.com/apollographql/apollo-server/pull/2230) diff --git a/packages/apollo-server-core/src/ApolloServer.ts b/packages/apollo-server-core/src/ApolloServer.ts index 69172d23fea..ef0b99b7eaf 100644 --- a/packages/apollo-server-core/src/ApolloServer.ts +++ b/packages/apollo-server-core/src/ApolloServer.ts @@ -565,7 +565,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 }); + }); + }); +});