From f02ff6d011c6d060f9e23e5d79f2e747307c6ee3 Mon Sep 17 00:00:00 2001 From: Zephraph Date: Sat, 12 May 2018 02:04:52 -0400 Subject: [PATCH 1/7] Integrate graphql crunch --- package.json | 1 + src/index.js | 7 +++++++ yarn.lock | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/package.json b/package.json index 0bd1940930..1c83b0b841 100644 --- a/package.json +++ b/package.json @@ -113,6 +113,7 @@ "eslint-config-airbnb": "^3.1.0", "eslint-plugin-react": "^3.14.0", "expect.js": "^0.3.1", + "graphql-crunch": "^1.1.2", "husky": "^0.13.3", "jest": "^22.4.2", "lint-staged": "^3.4.0", diff --git a/src/index.js b/src/index.js index 663692f3a5..5a68d125b2 100644 --- a/src/index.js +++ b/src/index.js @@ -11,6 +11,7 @@ import moment from "moment" import morgan from "artsy-morgan" import raven from "raven" import xapp from "artsy-xapp" +import { crunch } from "graphql-crunch" import { fetchLoggerSetup, fetchLoggerRequestDone, @@ -124,6 +125,12 @@ async function startApp() { enableSentry, isProduction, }), + formatResponse: resp => { + if (req.query.crunch && resp.data && !resp.data.__schema) { + resp.data = crunch(resp.data) // eslint-disable-line no-param-reassign + } + return resp + }, validationRules: [depthLimit(queryLimit)], extensions: enableRequestLogging ? fetchLoggerRequestDone(requestID) diff --git a/yarn.lock b/yarn.lock index da8b8367b1..7065b97870 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2800,6 +2800,10 @@ graphiql@^0.11.11: codemirror-graphql "^0.6.11" markdown-it "^8.4.0" +graphql-crunch@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/graphql-crunch/-/graphql-crunch-1.1.2.tgz#8c8e686d1cb92b55f779fdf902c99ac644280c15" + graphql-depth-limit@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/graphql-depth-limit/-/graphql-depth-limit-1.1.0.tgz#59fe6b2acea0ab30ee7344f4c75df39cc18244e8" From 0fecece84225a6d491cad838b45ea0731fe552cb Mon Sep 17 00:00:00 2001 From: Zephraph Date: Wed, 16 May 2018 09:07:28 -0400 Subject: [PATCH 2/7] Move crunching to an interceptor, add tests --- package.json | 2 + src/index.js | 9 +-- src/lib/__tests__/crunchInterceptor.test.js | 60 +++++++++++++++ src/lib/crunchInterceptor.js | 13 ++++ yarn.lock | 82 ++++++++++++++++++++- 5 files changed, 156 insertions(+), 10 deletions(-) create mode 100644 src/lib/__tests__/crunchInterceptor.test.js create mode 100644 src/lib/crunchInterceptor.js diff --git a/package.json b/package.json index 1c83b0b841..1074205a49 100644 --- a/package.json +++ b/package.json @@ -61,6 +61,7 @@ "express": "^4.13.3", "express-force-ssl": "^0.3.0", "express-graphql": "^0.6.1", + "express-interceptor": "^1.2.0", "graphiql": "^0.11.11", "graphql": "^0.13.2", "graphql-depth-limit": "^1.1.0", @@ -119,6 +120,7 @@ "lint-staged": "^3.4.0", "prettier": "^1.7", "sinon": "^1.17.2", + "supertest": "^3.1.0", "typescript": "^2.7.2", "typescript-babel-jest": "^1.0.5" }, diff --git a/src/index.js b/src/index.js index 5a68d125b2..5625355982 100644 --- a/src/index.js +++ b/src/index.js @@ -11,7 +11,7 @@ import moment from "moment" import morgan from "artsy-morgan" import raven from "raven" import xapp from "artsy-xapp" -import { crunch } from "graphql-crunch" +import crunchInterceptor from "./lib/crunchInterceptor" import { fetchLoggerSetup, fetchLoggerRequestDone, @@ -80,6 +80,7 @@ async function startApp() { next() }, fetchPersistedQuery, + crunchInterceptor, graphqlHTTP((req, res) => { const accessToken = req.headers["x-access-token"] const userID = req.headers["x-user-id"] @@ -125,12 +126,6 @@ async function startApp() { enableSentry, isProduction, }), - formatResponse: resp => { - if (req.query.crunch && resp.data && !resp.data.__schema) { - resp.data = crunch(resp.data) // eslint-disable-line no-param-reassign - } - return resp - }, validationRules: [depthLimit(queryLimit)], extensions: enableRequestLogging ? fetchLoggerRequestDone(requestID) diff --git a/src/lib/__tests__/crunchInterceptor.test.js b/src/lib/__tests__/crunchInterceptor.test.js new file mode 100644 index 0000000000..02e62b9dd6 --- /dev/null +++ b/src/lib/__tests__/crunchInterceptor.test.js @@ -0,0 +1,60 @@ +import express from "express" +import graphqlHTTP from "express-graphql" +import request from "supertest" +import bodyParser from "body-parser" +import { makeExecutableSchema, addMockFunctionsToSchema } from "graphql-tools" +import { crunch } from "graphql-crunch" + +import crunchInterceptor from "../crunchInterceptor" + +describe("crunchInterceptor", () => { + let app + + beforeEach(() => { + const schema = makeExecutableSchema({ + typeDefs: ` + type Query { + greeting: String + } + `, + }) + addMockFunctionsToSchema({ schema }) + app = express() + app.use( + "/", + bodyParser.json(), + crunchInterceptor, + graphqlHTTP({ + schema, + graphiql: false, + }) + ) + }) + + it("should pass the result through unchanged when no param is present", () => { + return request(app) + .get("/?query={greeting}") + .set("Accept", "application/json") + .expect(res => { + expect(res.body.data).toMatchObject({ greeting: "Hello World" }) + }) + }) + + it("should crunch the result when param is present", () => { + return request(app) + .get("/?query={greeting}&crunch") + .set("Accept", "application/json") + .expect(res => { + expect(res.body.data).toMatchObject(crunch({ greeting: "Hello World" })) + }) + }) + + it("should not crunch an introspection query", () => { + return request(app) + .get("/?query={__schema{types{name}}}&crunch") + .set("Accept", "application/json") + .expect(res => { + expect(Array.isArray(res.body.data)).toBeFalsy() + }) + }) +}) diff --git a/src/lib/crunchInterceptor.js b/src/lib/crunchInterceptor.js new file mode 100644 index 0000000000..67f9f6134c --- /dev/null +++ b/src/lib/crunchInterceptor.js @@ -0,0 +1,13 @@ +import { crunch } from "graphql-crunch" +import interceptor from "express-interceptor" + +export default interceptor(req => ({ + isInterceptable: () => req.query.hasOwnProperty("crunch"), + intercept: (body, send) => { + body = JSON.parse(body) // eslint-disable-line no-param-reassign + if (body && body.data && !body.data.__schema) { + body.data = crunch(body.data) // eslint-disable-line no-param-reassign + } + send(JSON.stringify(body)) + }, +})) diff --git a/yarn.lock b/yarn.lock index 7065b97870..bf0acaed1e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1649,6 +1649,12 @@ color-name@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" +combined-stream@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" + dependencies: + delayed-stream "~1.0.0" + combined-stream@^1.0.5, combined-stream@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" @@ -1675,7 +1681,7 @@ compare-versions@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.1.0.tgz#43310256a5c555aaed4193c04d8f154cf9c6efd5" -component-emitter@^1.2.1, component-emitter@~1.2.0: +component-emitter@^1.2.0, component-emitter@^1.2.1, component-emitter@~1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" @@ -1752,6 +1758,10 @@ cookiejar@2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.0.6.tgz#0abf356ad00d1c5a219d88d44518046dd026acfe" +cookiejar@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.1.tgz#41ad57b1b555951ec171412a81942b1e8200d34a" + copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" @@ -2348,6 +2358,12 @@ express-graphql@^0.6.1: http-errors "^1.3.0" raw-body "^2.1.0" +express-interceptor@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/express-interceptor/-/express-interceptor-1.2.0.tgz#33460a8e11dce7e5a022caf555d377e45ddb822a" + dependencies: + debug "^2.2.0" + express@^4.13.3: version "4.16.2" resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c" @@ -2400,7 +2416,7 @@ extend@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" -extend@~3.0.0, extend@~3.0.1: +extend@^3.0.0, extend@~3.0.0, extend@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" @@ -2584,6 +2600,14 @@ form-data@1.0.0-rc3: combined-stream "^1.0.5" mime-types "^2.1.3" +form-data@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" + dependencies: + asynckit "^0.4.0" + combined-stream "1.0.6" + mime-types "^2.1.12" + form-data@~2.1.1: version "2.1.4" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" @@ -2606,6 +2630,10 @@ formatio@1.1.1: dependencies: samsam "~1.1" +formidable@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.1.tgz#70fb7ca0290ee6ff961090415f4b3df3d2082659" + formidable@~1.0.14: version "1.0.17" resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.0.17.tgz#ef5491490f9433b705faa77249c99029ae348559" @@ -4361,7 +4389,7 @@ mersenne-twister@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mersenne-twister/-/mersenne-twister-1.1.0.tgz#f916618ee43d7179efcf641bec4531eb9670978a" -methods@~1.1.1, methods@~1.1.2: +methods@^1.1.1, methods@~1.1.1, methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -4423,6 +4451,10 @@ mime@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" +mime@^1.4.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + mimic-fn@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" @@ -5028,6 +5060,10 @@ qs@^5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/qs/-/qs-5.2.1.tgz#801fee030e0b9450d6385adc48a4cc55b44aedfc" +qs@^6.5.1: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + qs@~6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" @@ -5147,6 +5183,18 @@ readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable string_decoder "~1.0.3" util-deprecate "~1.0.1" +readable-stream@^2.0.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + readdirp@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" @@ -5810,6 +5858,12 @@ string_decoder@~1.0.3: dependencies: safe-buffer "~5.1.0" +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + dependencies: + safe-buffer "~5.1.0" + stringstream@~0.0.4, stringstream@~0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" @@ -5848,6 +5902,21 @@ strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" +superagent@3.8.2: + version "3.8.2" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.8.2.tgz#e4a11b9d047f7d3efeb3bbe536d9ec0021d16403" + dependencies: + component-emitter "^1.2.0" + cookiejar "^2.1.0" + debug "^3.1.0" + extend "^3.0.0" + form-data "^2.3.1" + formidable "^1.1.1" + methods "^1.1.1" + mime "^1.4.1" + qs "^6.5.1" + readable-stream "^2.0.5" + superagent@^1.2.0: version "1.8.5" resolved "https://registry.yarnpkg.com/superagent/-/superagent-1.8.5.tgz#1c0ddc3af30e80eb84ebc05cb2122da8fe940b55" @@ -5864,6 +5933,13 @@ superagent@^1.2.0: readable-stream "1.0.27-1" reduce-component "1.0.1" +supertest@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/supertest/-/supertest-3.1.0.tgz#f9ebaf488e60f2176021ec580bdd23ad269e7bc6" + dependencies: + methods "~1.1.2" + superagent "3.8.2" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" From c31077b8be35fb8de6db7377ebe8b65b774ace5a Mon Sep 17 00:00:00 2001 From: Zephraph Date: Wed, 16 May 2018 12:45:21 -0400 Subject: [PATCH 3/7] Add graphql-crunch to dependencies I'd accidentally added graphql-crunch as a dev dependency. It'd be a direct dependency in this case. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1074205a49..fe7ec0b209 100644 --- a/package.json +++ b/package.json @@ -64,6 +64,7 @@ "express-interceptor": "^1.2.0", "graphiql": "^0.11.11", "graphql": "^0.13.2", + "graphql-crunch": "^1.1.2", "graphql-depth-limit": "^1.1.0", "graphql-relay": "^0.5.4", "graphql-tools": "^3.0.0", @@ -114,7 +115,6 @@ "eslint-config-airbnb": "^3.1.0", "eslint-plugin-react": "^3.14.0", "expect.js": "^0.3.1", - "graphql-crunch": "^1.1.2", "husky": "^0.13.3", "jest": "^22.4.2", "lint-staged": "^3.4.0", From db5eefefe76a5cc038af1fc115969c36bebb8b68 Mon Sep 17 00:00:00 2001 From: Zephraph Date: Wed, 16 May 2018 12:51:46 -0400 Subject: [PATCH 4/7] Remove unneeded introspection query logic --- src/lib/__tests__/crunchInterceptor.test.js | 9 --------- src/lib/crunchInterceptor.js | 2 +- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/src/lib/__tests__/crunchInterceptor.test.js b/src/lib/__tests__/crunchInterceptor.test.js index 02e62b9dd6..f1131b4919 100644 --- a/src/lib/__tests__/crunchInterceptor.test.js +++ b/src/lib/__tests__/crunchInterceptor.test.js @@ -48,13 +48,4 @@ describe("crunchInterceptor", () => { expect(res.body.data).toMatchObject(crunch({ greeting: "Hello World" })) }) }) - - it("should not crunch an introspection query", () => { - return request(app) - .get("/?query={__schema{types{name}}}&crunch") - .set("Accept", "application/json") - .expect(res => { - expect(Array.isArray(res.body.data)).toBeFalsy() - }) - }) }) diff --git a/src/lib/crunchInterceptor.js b/src/lib/crunchInterceptor.js index 67f9f6134c..a212c9844b 100644 --- a/src/lib/crunchInterceptor.js +++ b/src/lib/crunchInterceptor.js @@ -5,7 +5,7 @@ export default interceptor(req => ({ isInterceptable: () => req.query.hasOwnProperty("crunch"), intercept: (body, send) => { body = JSON.parse(body) // eslint-disable-line no-param-reassign - if (body && body.data && !body.data.__schema) { + if (body && body.data) { body.data = crunch(body.data) // eslint-disable-line no-param-reassign } send(JSON.stringify(body)) From 5bfd88daf79d66c523291867b7729f62c1a4445d Mon Sep 17 00:00:00 2001 From: Zephraph Date: Wed, 16 May 2018 22:32:43 -0400 Subject: [PATCH 5/7] Test error case, move helpers to tests dir --- src/lib/__tests__/crunchInterceptor.test.js | 58 +++++++++------------ src/lib/crunchInterceptor.js | 6 ++- src/test/gql-server.js | 40 ++++++++++++++ src/test/interceptor.js | 7 +++ 4 files changed, 77 insertions(+), 34 deletions(-) create mode 100644 src/test/gql-server.js create mode 100644 src/test/interceptor.js diff --git a/src/lib/__tests__/crunchInterceptor.test.js b/src/lib/__tests__/crunchInterceptor.test.js index f1131b4919..e5f36b637f 100644 --- a/src/lib/__tests__/crunchInterceptor.test.js +++ b/src/lib/__tests__/crunchInterceptor.test.js @@ -1,51 +1,45 @@ -import express from "express" -import graphqlHTTP from "express-graphql" import request from "supertest" -import bodyParser from "body-parser" -import { makeExecutableSchema, addMockFunctionsToSchema } from "graphql-tools" import { crunch } from "graphql-crunch" +import { app, invokeError } from "../../test/gql-server" +import { stubInterceptor } from "../../test/interceptor" -import crunchInterceptor from "../crunchInterceptor" +import crunchInterceptor, { interceptorCallback } from "../crunchInterceptor" -describe("crunchInterceptor", () => { - let app - - beforeEach(() => { - const schema = makeExecutableSchema({ - typeDefs: ` - type Query { - greeting: String - } - `, - }) - addMockFunctionsToSchema({ schema }) - app = express() - app.use( - "/", - bodyParser.json(), - crunchInterceptor, - graphqlHTTP({ - schema, - graphiql: false, - }) - ) +const fakeCrunch = intercept => + stubInterceptor(interceptorCallback, { + intercept, }) +describe("crunchInterceptor", () => { it("should pass the result through unchanged when no param is present", () => { - return request(app) + const intercept = jest.fn() + return request(app(fakeCrunch(intercept))) .get("/?query={greeting}") .set("Accept", "application/json") - .expect(res => { - expect(res.body.data).toMatchObject({ greeting: "Hello World" }) + .expect(200) + .then(() => { + expect(intercept).not.toHaveBeenCalled() }) }) it("should crunch the result when param is present", () => { - return request(app) + return request(app(crunchInterceptor)) .get("/?query={greeting}&crunch") .set("Accept", "application/json") - .expect(res => { + .expect(200) + .then(res => { expect(res.body.data).toMatchObject(crunch({ greeting: "Hello World" })) }) }) + + it("should not try to crunch on an error", () => { + const intercept = jest.fn() + return request(app(invokeError(404), fakeCrunch(intercept))) + .get("/?query={greeting}&crunch") + .set("Accept", "application/json") + .expect(404) + .then(() => { + expect(intercept).not.toHaveBeenCalled() + }) + }) }) diff --git a/src/lib/crunchInterceptor.js b/src/lib/crunchInterceptor.js index a212c9844b..faead63d42 100644 --- a/src/lib/crunchInterceptor.js +++ b/src/lib/crunchInterceptor.js @@ -1,7 +1,7 @@ import { crunch } from "graphql-crunch" import interceptor from "express-interceptor" -export default interceptor(req => ({ +export const interceptorCallback = req => ({ isInterceptable: () => req.query.hasOwnProperty("crunch"), intercept: (body, send) => { body = JSON.parse(body) // eslint-disable-line no-param-reassign @@ -10,4 +10,6 @@ export default interceptor(req => ({ } send(JSON.stringify(body)) }, -})) +}) + +export default interceptor(interceptorCallback) diff --git a/src/test/gql-server.js b/src/test/gql-server.js new file mode 100644 index 0000000000..83e252ffbf --- /dev/null +++ b/src/test/gql-server.js @@ -0,0 +1,40 @@ +import graphqlHTTP from "express-graphql" +import express from "express" +import bodyParser from "body-parser" +import { makeExecutableSchema, addMockFunctionsToSchema } from "graphql-tools" + +export const invokeError = status => (req, res, next) => { + const err = new Error() + err.status = status + next(err) +} + +const exampleSchema = ` + type Query { + greeting: String + }` + +export const gqlServer = ({ + schema = exampleSchema, + mocks = {}, + middleware = [], +}) => { + const app = express() + const execSchema = makeExecutableSchema({ + typeDefs: schema, + mocks, + }) + addMockFunctionsToSchema({ schema: execSchema }) + app.use( + "/", + bodyParser.json(), + ...middleware, + graphqlHTTP({ + schema: execSchema, + graphiql: false, + }) + ) + return app +} + +export const app = (...middleware) => gqlServer({ middleware }) diff --git a/src/test/interceptor.js b/src/test/interceptor.js new file mode 100644 index 0000000000..4a13de013f --- /dev/null +++ b/src/test/interceptor.js @@ -0,0 +1,7 @@ +import interceptor from "express-interceptor" + +export const stubInterceptor = (interceptorCallback, fakeInterceptorOptions) => + interceptor((req, res) => ({ + ...interceptorCallback(req, res), + ...fakeInterceptorOptions, + })) From 30312d67f248d2948686e71be001aa18f2590d29 Mon Sep 17 00:00:00 2001 From: Zephraph Date: Wed, 16 May 2018 22:50:59 -0400 Subject: [PATCH 6/7] Correct terminology... --- src/lib/__tests__/crunchInterceptor.test.js | 4 ++-- src/test/interceptor.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lib/__tests__/crunchInterceptor.test.js b/src/lib/__tests__/crunchInterceptor.test.js index e5f36b637f..9a88487705 100644 --- a/src/lib/__tests__/crunchInterceptor.test.js +++ b/src/lib/__tests__/crunchInterceptor.test.js @@ -1,12 +1,12 @@ import request from "supertest" import { crunch } from "graphql-crunch" import { app, invokeError } from "../../test/gql-server" -import { stubInterceptor } from "../../test/interceptor" +import { mockInterceptor } from "../../test/interceptor" import crunchInterceptor, { interceptorCallback } from "../crunchInterceptor" const fakeCrunch = intercept => - stubInterceptor(interceptorCallback, { + mockInterceptor(interceptorCallback, { intercept, }) diff --git a/src/test/interceptor.js b/src/test/interceptor.js index 4a13de013f..8a34e2a822 100644 --- a/src/test/interceptor.js +++ b/src/test/interceptor.js @@ -1,6 +1,6 @@ import interceptor from "express-interceptor" -export const stubInterceptor = (interceptorCallback, fakeInterceptorOptions) => +export const mockInterceptor = (interceptorCallback, fakeInterceptorOptions) => interceptor((req, res) => ({ ...interceptorCallback(req, res), ...fakeInterceptorOptions, From 9fbac29486954da738c88933ab605ebc64dec690 Mon Sep 17 00:00:00 2001 From: Zephraph Date: Thu, 17 May 2018 09:09:05 -0400 Subject: [PATCH 7/7] Correct mocks placement in gql-server --- src/test/gql-server.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/test/gql-server.js b/src/test/gql-server.js index 83e252ffbf..b2b680872c 100644 --- a/src/test/gql-server.js +++ b/src/test/gql-server.js @@ -22,9 +22,8 @@ export const gqlServer = ({ const app = express() const execSchema = makeExecutableSchema({ typeDefs: schema, - mocks, }) - addMockFunctionsToSchema({ schema: execSchema }) + addMockFunctionsToSchema({ schema: execSchema, mocks }) app.use( "/", bodyParser.json(),