diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c81e18e0fb..f1f523b2224 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,6 +35,7 @@ The version headers in this history reflect the versions of Apollo Server itself - We no longer re-export the entirety of `graphql-tools` (including `makeExecutableSchema`) from all Apollo Server packages. If you'd like to continue using them, install [`graphql-tools`](https://www.graphql-tools.com/) or one of its sub-packages yourself. - The `Upload` scalar is no longer exported. (See above as to why.) - Support for serving an HTML UI has been generalized. While servers in dev mode still default to serving GraphQL Playground (note: this may change before v3.0.0), plugins can define a new `renderFrontend` hook which returns an HTML page that is served to browsers. The `playground` option to `new ApolloServer` has been removed; customizing Playground or making it run in production mode can be done by installing the new `ApolloServerPluginFrontendGraphQLPlayground` plugin yourself. To disable Playground, either install the new `ApolloServerPluginFrontendDisabled` plugin or install any other plugin that implements `renderFrontend`. Packages no longer export `defaultPlaygroundOptions`, `PlaygroundConfig`, and `PlaygroundRenderPageOptions`. By default, no GraphQL Playground settings are overridden, including the endpoint, which now just defaults to `window.location.href` (with most query parameters removed); this means you typically don't have to manually configure the endpoint. +- Stopped publishing the deprecated `apollo-server-testing` package. This package is just a wrapper around `server.executeOperation` which you can use directly. ## vNEXT diff --git a/docs/source/testing/testing.md b/docs/source/testing/testing.md index af1e31cde7e..a52d789a1d8 100644 --- a/docs/source/testing/testing.md +++ b/docs/source/testing/testing.md @@ -60,30 +60,9 @@ In addition to `query`, the first argument to `executeOperation` can take `opera Note that errors in parsing, validating, and executing your operation are returned in the `errors` field of the result (just like in a GraphQL response) rather than thrown. -## `createTestClient` and `apollo-server-testing` - -There is also a package called `apollo-server-testing` which exports a function `createTestClient` which wraps `executeOperation`. This API does not support the second context-function-argument argument, and doesn't provide any real advantages over calling `executeOperation` directly. It is deprecated and will no longer be published with Apollo Server 3. - -We recommend that you replace this code: - -```js -const { createTestClient } = require('apollo-server-testing'); - -const { query, mutate } = createTestClient(server); - -await query({ query: QUERY }); -await mutate({ mutation: MUTATION }); -``` - -with - -```js -await server.executeOperation({ query: QUERY }); -await server.executeOperation({ query: MUTATION }); -``` ## End-to-end testing Instead of bypassing the HTTP layer, you may just want to fully run your server and test it with a real HTTP client. -Apollo Server doesn't have any built-in support for this. You can combine any HTTP or GraphQL client such as [`supertest`](https://www.npmjs.com/package/supertest) or [Apollo Client's HTTP Link](https://www.apollographql.com/docs/react/api/link/apollo-link-http/) to run operations against your server. There are also community packages available such as [`apollo-server-integration-testing`](https://www.npmjs.com/package/apollo-server-integration-testing) which provides an API similar to the deprecated `apollo-server-testing` package which uses mocked Express request and response objects. +Apollo Server doesn't have any built-in support for this. You can combine any HTTP or GraphQL client such as [`supertest`](https://www.npmjs.com/package/supertest) or [Apollo Client's HTTP Link](https://www.apollographql.com/docs/react/api/link/apollo-link-http/) to run operations against your server. There are also community packages available such as [`apollo-server-integration-testing`](https://www.npmjs.com/package/apollo-server-integration-testing) which uses mocked Express request and response objects. diff --git a/package-lock.json b/package-lock.json index 99cf047b329..3de97609f71 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,7 +32,6 @@ "apollo-server-plugin-base": "file:packages/apollo-server-plugin-base", "apollo-server-plugin-operation-registry": "file:packages/apollo-server-plugin-operation-registry", "apollo-server-plugin-response-cache": "file:packages/apollo-server-plugin-response-cache", - "apollo-server-testing": "file:packages/apollo-server-testing", "apollo-server-types": "file:packages/apollo-server-types" }, "devDependencies": { @@ -5193,10 +5192,6 @@ "resolved": "packages/apollo-server-plugin-response-cache", "link": true }, - "node_modules/apollo-server-testing": { - "resolved": "packages/apollo-server-testing", - "link": true - }, "node_modules/apollo-server-types": { "resolved": "packages/apollo-server-types", "link": true @@ -18511,22 +18506,6 @@ "graphql": "^15.3.0" } }, - "packages/apollo-server-testing": { - "version": "3.0.0-alpha.4", - "license": "MIT", - "dependencies": { - "apollo-server-core": "file:../apollo-server-core" - }, - "devDependencies": { - "apollo-server-types": "file:../apollo-server-types" - }, - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "graphql": "^15.3.0" - } - }, "packages/apollo-server-types": { "version": "0.300.0-alpha.4", "license": "MIT", @@ -22774,13 +22753,6 @@ "apollo-server-types": "file:../apollo-server-types" } }, - "apollo-server-testing": { - "version": "file:packages/apollo-server-testing", - "requires": { - "apollo-server-core": "file:../apollo-server-core", - "apollo-server-types": "file:../apollo-server-types" - } - }, "apollo-server-types": { "version": "file:packages/apollo-server-types", "requires": { diff --git a/package.json b/package.json index 2fcb9c307a5..140e6adf137 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "compile:clean": "tsc --build tsconfig.build.json --clean", "watch": "tsc --build tsconfig.build.json --watch", "release:version-bump": "lerna version", - "release:version-bump:server": "npm run release:version-bump -- --force-publish=apollo-server,apollo-server-core,apollo-server-azure-functions,apollo-server-cloud-functions,apollo-server-cloudflare,apollo-server-express,apollo-server-fastify,apollo-server-hapi,apollo-server-koa,apollo-server-lambda,apollo-server-micro,apollo-server-integration-testsuite,apollo-server-testing", + "release:version-bump:server": "npm run release:version-bump -- --force-publish=apollo-server,apollo-server-core,apollo-server-azure-functions,apollo-server-cloud-functions,apollo-server-cloudflare,apollo-server-express,apollo-server-fastify,apollo-server-hapi,apollo-server-koa,apollo-server-lambda,apollo-server-micro,apollo-server-integration-testsuite", "release:start-ci-publish": "node -p '`Publish (dist-tag:${process.env.APOLLO_DIST_TAG || \"latest\"})`' | git tag -F - \"publish/$(date -u '+%Y%m%d%H%M%S')\" && git push origin \"$(git describe --match='publish/*' --tags --exact-match HEAD)\"", "postinstall": "lerna run prepare && npm run compile", "pretest": "npm run compile && tsc --build tsconfig.test.json", @@ -50,7 +50,6 @@ "apollo-server-plugin-base": "file:packages/apollo-server-plugin-base", "apollo-server-plugin-operation-registry": "file:packages/apollo-server-plugin-operation-registry", "apollo-server-plugin-response-cache": "file:packages/apollo-server-plugin-response-cache", - "apollo-server-testing": "file:packages/apollo-server-testing", "apollo-server-types": "file:packages/apollo-server-types" }, "devDependencies": { diff --git a/packages/apollo-server-testing/CHANGELOG.md b/packages/apollo-server-testing/CHANGELOG.md deleted file mode 100644 index d1c2295b906..00000000000 --- a/packages/apollo-server-testing/CHANGELOG.md +++ /dev/null @@ -1,6 +0,0 @@ -# Changelog - -### vNEXT - -* `apollo-server-testing`: Add `variables` and `operationName` prop to `Query` and `Mutation` types. [PR #2307](https://github.com/apollographql/apollo-server/pull/2307) [Issue #2172](https://github.com/apollographql/apollo-server/issue/2172) -* `apollo-server-testing`: Added `createTestClient` function. diff --git a/packages/apollo-server-testing/README.md b/packages/apollo-server-testing/README.md deleted file mode 100644 index fde8c2207be..00000000000 --- a/packages/apollo-server-testing/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# apollo-server-testing - -This deprecated package contains a function `createTestClient` which is a very thin wrapper around the Apollo Server `server.executeOperation` method. - -Code that uses this package looks like the following, where `server` is an `ApolloServer`: - -```js -const { createTestClient } = require('apollo-server-testing'); - -const { query, mutate } = createTestClient(server); - -await query({ query: QUERY }); -await mutate({ mutation: MUTATION }); -``` - -We recommend you stop using this package and replace the above code with the equivalent: - -```js -await server.executeOperation({ query: QUERY }); -await server.executeOperation({ query: MUTATION }); -``` - -This package will not be distributed as part of Apollo Server 3. diff --git a/packages/apollo-server-testing/jest.config.js b/packages/apollo-server-testing/jest.config.js deleted file mode 100644 index a383fbc925f..00000000000 --- a/packages/apollo-server-testing/jest.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const config = require('../../jest.config.base'); - -module.exports = Object.assign(Object.create(null), config); diff --git a/packages/apollo-server-testing/package.json b/packages/apollo-server-testing/package.json deleted file mode 100644 index f5300e36f29..00000000000 --- a/packages/apollo-server-testing/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "apollo-server-testing", - "version": "3.0.0-alpha.4", - "description": "Test utils for apollo-server", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "repository": { - "type": "git", - "url": "https://github.com/apollographql/apollo-server", - "directory": "packages/apollo-server-testing" - }, - "keywords": [ - "GraphQL", - "Apollo", - "Server", - "Javascript" - ], - "author": "Apollo ", - "license": "MIT", - "bugs": { - "url": "https://github.com/apollographql/apollo-server/issues" - }, - "homepage": "https://github.com/apollographql/apollo-server#readme", - "engines": { - "node": ">=12.0" - }, - "dependencies": { - "apollo-server-core": "file:../apollo-server-core" - }, - "devDependencies": { - "apollo-server-types": "file:../apollo-server-types" - }, - "peerDependencies": { - "graphql": "^15.3.0" - } -} diff --git a/packages/apollo-server-testing/src/__tests__/createTestClient.test.ts b/packages/apollo-server-testing/src/__tests__/createTestClient.test.ts deleted file mode 100644 index f929e6c1a9e..00000000000 --- a/packages/apollo-server-testing/src/__tests__/createTestClient.test.ts +++ /dev/null @@ -1,96 +0,0 @@ -import { ApolloServerBase, gql } from 'apollo-server-core'; -import createTestClient from '../createTestClient'; - -describe('createTestClient', () => { - const typeDefs = gql` - type Query { - test(echo: String): String - # this resolver uses context - hello: String - } - - type Mutation { - increment: Int! - } - `; - - const resolvers = { - Query: { - test: (_, { echo }) => echo, - hello: (_, __, { person }) => { - return `hello ${person}`; - }, - }, - Mutation: { - increment: () => 1, - }, - }; - - const myTestServer = new ApolloServerBase({ - typeDefs, - context: () => ({ person: 'tom' }), - resolvers, - }); - - beforeAll(async () => { - await myTestServer.start(); - }); - - it('allows queries', async () => { - const query = `{ test(echo: "foo") }`; - const client = createTestClient(myTestServer); - const res = await client.query({ query }); - expect(res.data).toEqual({ test: 'foo' }); - }); - - it('allows mutations', async () => { - const mutation = `mutation increment { increment }`; - const client = createTestClient(myTestServer); - const res = await client.mutate({ mutation }); - expect(res.data).toEqual({ increment: 1 }); - }); - - it('allows variables to be passed', async () => { - const query = `query test($echo: String){ test(echo: $echo) }`; - const client = createTestClient(myTestServer); - const res = await client.query({ query, variables: { echo: 'wow' } }); - expect(res.data).toEqual({ test: 'wow' }); - }); - - it('works with generic types', async () => { - const query = `query test($echo: String){ test(echo: $echo) }`; - type Data = { test?: string | null; }; - type Variables = { echo: string; }; - const client = createTestClient(myTestServer); - const res1 = await client.query({ query, variables: { echo: 'onlydata' } }); - expect(res1.data).toEqual({ test: 'onlydata' }); - const res2 = await client.query({ query, variables: { echo: 'data and variables' } }); - expect(res2.data).toEqual({ test: 'data and variables' }); - }) - - it('resolves with context', async () => { - const query = `{ hello }`; - const client = createTestClient(myTestServer); - const res = await client.query({ query }); - expect(res.data).toEqual({ hello: 'hello tom' }); - }); - - it('allows query documents as input', async () => { - const query = gql` - { - test(echo: "foo") - } - `; - const client = createTestClient(myTestServer); - const clientRes = await client.query({ query }); - expect(clientRes.data).toEqual({ test: 'foo' }); - - const mutation = gql` - mutation increment { - increment - } - `; - const mutationRes = await client.mutate({ mutation }); - expect(mutationRes.data).toEqual({ increment: 1 }); - }); -}); diff --git a/packages/apollo-server-testing/src/__tests__/tsconfig.json b/packages/apollo-server-testing/src/__tests__/tsconfig.json deleted file mode 100644 index 2f3a365cbfc..00000000000 --- a/packages/apollo-server-testing/src/__tests__/tsconfig.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "../../../../tsconfig.test.base", - "include": ["**/*"], - "references": [] -} diff --git a/packages/apollo-server-testing/src/createTestClient.ts b/packages/apollo-server-testing/src/createTestClient.ts deleted file mode 100644 index 5aa86934cc9..00000000000 --- a/packages/apollo-server-testing/src/createTestClient.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { ApolloServerBase } from 'apollo-server-core'; -import { GraphQLResponse as GraphQLResponseType } from 'apollo-server-types'; -import { print, DocumentNode } from 'graphql'; - -type StringOrAst = string | DocumentNode; - -// A query must not come with a mutation (and vice versa). -type Query> = { - query: StringOrAst; - mutation?: undefined; - variables?: TVariables; - operationName?: string; -}; -type Mutation> = { - mutation: StringOrAst; - query?: undefined; - variables?: TVariables; - operationName?: string; -}; - -type GraphQLResponse = Omit & { - data?: TData; -}; - -export interface ApolloServerTestClient { - query>(query: Query): Promise>; - mutate>(mutation: Mutation): Promise>; -} - -export default (server: ApolloServerBase): ApolloServerTestClient => { - const executeOperation = server.executeOperation.bind(server); - const test = ({ query, mutation, ...args }: Query | Mutation) => { - const operation = query || mutation; - - if (!operation || (query && mutation)) { - throw new Error( - 'Either `query` or `mutation` must be passed, but not both.', - ); - } - - return executeOperation({ - // Convert ASTs, which are produced by `graphql-tag` but not currently - // used by `executeOperation`, to a String using `graphql/language/print`. - query: typeof operation === 'string' ? operation : print(operation), - ...args, - }); - }; - - return { query: test, mutate: test } as ApolloServerTestClient; -}; diff --git a/packages/apollo-server-testing/src/index.ts b/packages/apollo-server-testing/src/index.ts deleted file mode 100644 index acb7619a674..00000000000 --- a/packages/apollo-server-testing/src/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export { - default as createTestClient, - ApolloServerTestClient, -} from './createTestClient'; diff --git a/packages/apollo-server-testing/tsconfig.json b/packages/apollo-server-testing/tsconfig.json deleted file mode 100644 index e34feba8eb6..00000000000 --- a/packages/apollo-server-testing/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "rootDir": "./src", - "outDir": "./dist" - }, - "include": ["src/**/*"], - "exclude": ["**/__tests__"], - "references": [ - { "path": "../apollo-server-core" }, - { "path": "../apollo-server-types" }, - ] -} diff --git a/tsconfig.build.json b/tsconfig.build.json index 120f11fe29c..4c14182dd08 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -25,6 +25,5 @@ { "path": "./packages/apollo-server-plugin-base" }, { "path": "./packages/apollo-server-plugin-operation-registry" }, { "path": "./packages/apollo-server-plugin-response-cache" }, - { "path": "./packages/apollo-server-testing" }, ] }