From d1af264ad32ebfd1138ade8aeafefd108a1386e9 Mon Sep 17 00:00:00 2001 From: Etienne Fachaux Date: Fri, 8 May 2020 17:23:28 +0200 Subject: [PATCH] test: Adding security tests to the plugin --- package-lock.json | 386 +++++++++++++++++++++++++++++++++-------- package.json | 9 +- tests/__app/app.ts | 6 + tests/__app/graphql.ts | 32 ++++ tests/__helpers.ts | 17 ++ tests/runtime.test.ts | 17 ++ tests/tsconfig.json | 10 ++ 7 files changed, 401 insertions(+), 76 deletions(-) create mode 100644 tests/__app/app.ts create mode 100644 tests/__app/graphql.ts create mode 100644 tests/__helpers.ts create mode 100644 tests/runtime.test.ts create mode 100644 tests/tsconfig.json diff --git a/package-lock.json b/package-lock.json index 09f34be..96b6178 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "nexus-plugin-security", - "version": "0.1.1", + "version": "0.1.3-next.3", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -617,6 +617,28 @@ "chalk": "^3.0.0" } }, + "@nexus/logger": { + "version": "0.1.0-next.1", + "resolved": "https://registry.npmjs.org/@nexus/logger/-/logger-0.1.0-next.1.tgz", + "integrity": "sha512-J80f3tRdaSvYjicRrp/Q7e6MbV4zxB8mxprd/mijEFCMdQ7t6Y8wWiW4jwEnH8ozy99tWcXTYVKGhnLXNdXV6Q==", + "requires": { + "chalk": "^4.0.0", + "lodash": "^4.17.15", + "pino": "5", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", + "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, "@nexus/schema": { "version": "0.14.0-next.1", "resolved": "https://registry.npmjs.org/@nexus/schema/-/schema-0.14.0-next.1.tgz", @@ -751,11 +773,12 @@ } }, "@types/express-serve-static-core": { - "version": "4.17.5", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.5.tgz", - "integrity": "sha512-578YH5Lt88AKoADy0b2jQGwJtrBxezXtVe/MBqWXKZpqx91SnC0pVkVCcxcytz3lWW+cHBYDi3Ysh0WXc+rAYw==", + "version": "4.17.7", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.7.tgz", + "integrity": "sha512-EMgTj/DF9qpgLXyc+Btimg+XoH7A2liE8uKul8qSmMTHCeNYzydDKFdsJskDvw42UsesCnhO63dO0Grbj8J4Dw==", "requires": { "@types/node": "*", + "@types/qs": "*", "@types/range-parser": "*" } }, @@ -793,6 +816,16 @@ "@types/istanbul-lib-report": "*" } }, + "@types/jest": { + "version": "25.2.1", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-25.2.1.tgz", + "integrity": "sha512-msra1bCaAeEdkSyA0CZ6gW1ukMIvZ5YoJkdXw/qhQdsuuDlFTcEUrUw8CLCPt2rVRUfXlClVvK2gvPs9IokZaA==", + "dev": true, + "requires": { + "jest-diff": "^25.2.1", + "pretty-format": "^25.2.1" + } + }, "@types/jsonwebtoken": { "version": "8.3.9", "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.3.9.tgz", @@ -860,14 +893,17 @@ "dev": true }, "@types/prompts": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/prompts/-/prompts-2.0.6.tgz", - "integrity": "sha512-CLphLAE33GBC1dX4+rKr/kcS778zBHjLkagC//Kh4gI9McfyGscUMowltN5LLCRuj28PGLZCdVaZNpIMQYH7og==" + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@types/prompts/-/prompts-2.0.8.tgz", + "integrity": "sha512-lXXAa8c8ASoA61Tj9H5E5V2mRUTvNZ/dpJ5KxghI+O5geWMHt73NLZ9kEBBDK7zUUfMsMY3ZH4Sqeqh3SjSyfg==", + "requires": { + "@types/node": "*" + } }, "@types/qs": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.1.tgz", - "integrity": "sha512-lhbQXx9HKZAPgBkISrBcmAcMpZsmpe/Cd/hY7LGZS5OfkySUBItnPZHgQPssWYUET8elF+yCFBbP1Q0RZPTdaw==" + "version": "6.9.2", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.2.tgz", + "integrity": "sha512-a9bDi4Z3zCZf4Lv1X/vwnvbbDYSNz59h3i3KdyuYYN+YrLjSeJD0dnphdULDfySvUv6Exy/O0K6wX/kQpnPQ+A==" }, "@types/range-parser": { "version": "1.2.3", @@ -1293,6 +1329,23 @@ "ms": "2.0.0" } }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -1345,6 +1398,15 @@ } } }, + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, "bser": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", @@ -1423,6 +1485,12 @@ "supports-color": "^7.1.0" } }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true + }, "chokidar": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz", @@ -2035,42 +2103,6 @@ } } }, - "express-graphql": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/express-graphql/-/express-graphql-0.9.0.tgz", - "integrity": "sha512-wccd9Lb6oeJ8yHpUs/8LcnGjFUUQYmOG9A5BNLybRdCzGw0PeUrtBxsIR8bfiur6uSW4OvPkVDoYH06z6/N9+w==", - "requires": { - "accepts": "^1.3.7", - "content-type": "^1.0.4", - "http-errors": "^1.7.3", - "raw-body": "^2.4.1" - }, - "dependencies": { - "http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "raw-body": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", - "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.3", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - } - } - }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -2307,6 +2339,11 @@ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" }, + "fp-ts": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-2.5.4.tgz", + "integrity": "sha512-cZlLeEneRYypc2dOzB9h8+bd9mQhJVyt2g0Dny2gKR7uWNgA4EmLSJyguLYsTU44nJSSG9EjurUalEc0wQqeKw==" + }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -2332,9 +2369,9 @@ } }, "fs-jetpack": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fs-jetpack/-/fs-jetpack-2.2.3.tgz", - "integrity": "sha512-MldfoKMz2NwpvP3UFfVXLp4NCncy9yxGamgBK6hofFaisnWoGvgkAyTtKwcq++leztgZuM4ywrZEaUtiyVfWgA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/fs-jetpack/-/fs-jetpack-2.3.0.tgz", + "integrity": "sha512-oeyTdAM9oE9XOjdyM+cbU3ZX2b2Auj8HsRPyJg12piSXgRRSQdFoQXW5FjK/wOqhmO84VmIGsPFhdwQpYZbqFg==", "requires": { "minimatch": "^3.0.2", "rimraf": "^2.6.3" @@ -2544,22 +2581,15 @@ "dev": true }, "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", "requires": { "depd": "~1.1.2", - "inherits": "2.0.3", + "inherits": "2.0.4", "setprototypeof": "1.1.1", "statuses": ">= 1.5.0 < 2", "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } } }, "http-signature": { @@ -3373,6 +3403,144 @@ "pretty-format": "^25.5.0" } }, + "jest-watch-typeahead": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.6.0.tgz", + "integrity": "sha512-mY0u5D1U/mEzeO/tpcDWnWaakuQiBp8gZY1K0HxduMeKSYm4WvbBVfU15a/hWMMs4J9FrXaYjAWs5XGlOpx5IQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.0.0", + "jest-regex-util": "^26.0.0", + "jest-watcher": "^26.0.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "@jest/console": { + "version": "26.0.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.0.1.tgz", + "integrity": "sha512-9t1KUe/93coV1rBSxMmBAOIK3/HVpwxArCA1CxskKyRiv6o8J70V8C/V3OJminVCTa2M0hQI9AWRd5wxu2dAHw==", + "dev": true, + "requires": { + "@jest/types": "^26.0.1", + "chalk": "^4.0.0", + "jest-message-util": "^26.0.1", + "jest-util": "^26.0.1", + "slash": "^3.0.0" + } + }, + "@jest/test-result": { + "version": "26.0.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.0.1.tgz", + "integrity": "sha512-oKwHvOI73ICSYRPe8WwyYPTtiuOAkLSbY8/MfWF3qDEd/sa8EDyZzin3BaXTqufir/O/Gzea4E8Zl14XU4Mlyg==", + "dev": true, + "requires": { + "@jest/console": "^26.0.1", + "@jest/types": "^26.0.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/types": { + "version": "26.0.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.0.1.tgz", + "integrity": "sha512-IbtjvqI9+eS1qFnOIEL7ggWmT+iK/U+Vde9cGWtYb/b6XgKb3X44ZAe/z9YZzoAAZ/E92m0DqrilF934IGNnQA==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "chalk": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", + "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + }, + "jest-message-util": { + "version": "26.0.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.0.1.tgz", + "integrity": "sha512-CbK8uQREZ8umUfo8+zgIfEt+W7HAHjQCoRaNs4WxKGhAYBGwEyvxuK81FXa7VeB9pwDEXeeKOB2qcsNVCAvB7Q==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^26.0.1", + "@types/stack-utils": "^1.0.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.2" + } + }, + "jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", + "dev": true + }, + "jest-util": { + "version": "26.0.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.0.1.tgz", + "integrity": "sha512-byQ3n7ad1BO/WyFkYvlWQHTsomB6GIewBh8tlGtusiylAlaxQ1UpS0XYH0ngOyhZuHVLN79Qvl6/pMiDMSSG1g==", + "dev": true, + "requires": { + "@jest/types": "^26.0.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "make-dir": "^3.0.0" + } + }, + "jest-watcher": { + "version": "26.0.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.0.1.tgz", + "integrity": "sha512-pdZPydsS8475f89kGswaNsN3rhP6lnC3/QDCppP7bg1L9JQz7oU9Mb/5xPETk1RHDCWeqmVC47M4K5RR7ejxFw==", + "dev": true, + "requires": { + "@jest/test-result": "^26.0.1", + "@jest/types": "^26.0.1", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^26.0.1", + "string-length": "^4.0.1" + } + }, + "stack-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.2.tgz", + "integrity": "sha512-0H7QK2ECz3fyZMzQ8rH0j2ykpfbnd20BFtfg/SqVC2+sCTtcw0aDTGB7dk+de4U4uUeuz6nOtJcrkFFLG1B0Rg==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + } + }, + "string-length": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz", + "integrity": "sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + } + } + }, "jest-watcher": { "version": "25.5.0", "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-25.5.0.tgz", @@ -3632,6 +3800,12 @@ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, "lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", @@ -3784,6 +3958,15 @@ } } }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -3832,10 +4015,11 @@ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, "nexus": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/nexus/-/nexus-0.20.0.tgz", - "integrity": "sha512-SnhPUa0o5nZ9Wj9CvOG1jSUpjhzvRVi3p6Lk/hm5idibsG9gBQxOV9LrVtiAaJEEFUOZ4YdYfRTbfSFAfuvAdw==", + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/nexus/-/nexus-0.21.0.tgz", + "integrity": "sha512-hLXYY66LQRwW5a2fIQNiGoh+87HR+JmUUk5lP3MRmH2v23vj5gzNMZ9NkxhGM+g2OZvXeZWK/wbBLLmf7G9tXA==", "requires": { + "@nexus/logger": "^0.1.0-next.1", "@nexus/schema": "^0.14.0-next.1", "@types/express": "^4.17.2", "@types/node-fetch": "^2.5.5", @@ -3847,21 +4031,25 @@ "chokidar": "^3.3.0", "codename": "^0.0.6", "common-tags": "^1.8.0", + "content-type": "^1.0.4", "dotenv": "^8.2.0", "express": "^4.17.1", - "express-graphql": "^0.9.0", + "fp-ts": "^2.5.4", "fs-jetpack": "^2.2.3", "get-port": "^5.1.0", "graphql": "^14.5.8", + "http-errors": "^1.7.3", "lodash": "^4.17.15", "node-fetch": "^2.6.0", "pino": "^5.15.0", + "pirates": "^4.0.1", "prompts": "^2.3.0", "rxjs": "^6.5.4", + "serialize-error": "^6.0.0", "simple-git": "^1.126.0", "strip-ansi": "^6.0.0", "ts-morph": "^7.0.0", - "ts-node": "^8.5.0", + "ts-node": "^8.9.0", "tslib": "^1", "type-fest": "^0.13.0", "typescript": "^3.7.2" @@ -3903,8 +4091,7 @@ "node-modules-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" }, "node-notifier": { "version": "6.0.0", @@ -4200,7 +4387,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, "requires": { "node-modules-regexp": "^1.0.0" } @@ -4323,6 +4509,25 @@ "http-errors": "1.7.2", "iconv-lite": "0.4.24", "unpipe": "1.0.0" + }, + "dependencies": { + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, "react-is": { @@ -4774,6 +4979,21 @@ } } }, + "serialize-error": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-6.0.0.tgz", + "integrity": "sha512-3vmBkMZLQO+BR4RPHcyRGdE09XCF6cvxzk2N2qn8Er3F91cy8Qt7VvEbZBOpaL53qsBbe2cFOefU6tRY6WDelA==", + "requires": { + "type-fest": "^0.12.0" + }, + "dependencies": { + "type-fest": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.12.0.tgz", + "integrity": "sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==" + } + } + }, "serve-static": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", @@ -5331,6 +5551,24 @@ "punycode": "^2.1.0" } }, + "ts-jest": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-25.5.0.tgz", + "integrity": "sha512-govrjbOk1UEzcJ5cX5k8X8IUtFuP3lp3mrF3ZuKtCdAOQzdeCM7qualhb/U8s8SWFwEDutOqfF5PLkJ+oaYD4w==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "buffer-from": "1.x", + "fast-json-stable-stringify": "2.x", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "micromatch": "4.x", + "mkdirp": "0.x", + "semver": "6.x", + "yargs-parser": "18.x" + } + }, "ts-morph": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-7.0.3.tgz", @@ -5342,9 +5580,9 @@ } }, "ts-node": { - "version": "8.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.9.1.tgz", - "integrity": "sha512-yrq6ODsxEFTLz0R3BX2myf0WBCSQh9A+py8PBo1dCzWIOcvisbyH6akNKqDHMgXePF2kir5mm5JXJTH3OUJYOQ==", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.1.tgz", + "integrity": "sha512-bdNz1L4ekHiJul6SHtZWs1ujEKERJnHs4HxN7rjTyyVOFf3HaJ6sLqe6aPG62XTzAB/63pKRh5jTSWL0D7bsvw==", "requires": { "arg": "^4.1.0", "diff": "^4.0.1", @@ -5354,9 +5592,9 @@ } }, "tslib": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", - "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.2.tgz", + "integrity": "sha512-tTSkux6IGPnUGUd1XAZHcpu85MOkIl5zX49pO+jfsie3eP0B6pyhOlLXm3cAC6T7s+euSDDUUV+Acop5WmtkVg==" }, "tunnel-agent": { "version": "0.6.0", diff --git a/package.json b/package.json index 3244d2d..ee7391a 100644 --- a/package.json +++ b/package.json @@ -19,9 +19,11 @@ ], "scripts": { "dev": "tsc --watch", + "dev:test": "jest --watch", "build:doc": "doctoc README.md --notitle", "build:ts": "tsc", "build": "npm run build:ts && npm run build:doc", + "pretest": "nexus build", "test": "jest", "publish:stable": "dripip stable", "publish:preview": "dripip preview", @@ -51,12 +53,15 @@ ] }, "devDependencies": { + "@types/jest": "^25.2.1", "@types/jsonwebtoken": "^8.3.9", "jest": "^25.5.4", - "prettier": "2.0.5" + "jest-watch-typeahead": "^0.6.0", + "prettier": "2.0.5", + "ts-jest": "^25.5.0" }, "dependencies": { "jsonwebtoken": "^8.5.1", - "nexus": "^0.20.0" + "nexus": "^0.21.0" } } diff --git a/tests/__app/app.ts b/tests/__app/app.ts new file mode 100644 index 0000000..03bba99 --- /dev/null +++ b/tests/__app/app.ts @@ -0,0 +1,6 @@ +import { use, server } from 'nexus' +import { security } from '../../src' + +use(security({ + appSecret: 'test', +})); diff --git a/tests/__app/graphql.ts b/tests/__app/graphql.ts new file mode 100644 index 0000000..1d00cba --- /dev/null +++ b/tests/__app/graphql.ts @@ -0,0 +1,32 @@ +import { mutationType, inputObjectType, objectType, queryType } from '@nexus/schema' + +inputObjectType({ + name: 'LoginInput', + description: 'Authentication gateway', + definition(t) { + t.field('email', { + type: 'String', + description: 'Email', + }) + t.field('password', { + type: 'String', + description: 'Password', + }) + } +}) + +mutationType({ + definition(t) { + t.field('login', { + type: 'String', + public: true, + args: { + input: 'LoginInput', + }, + resolve(root, args, ctx) { + const { email, password } = args.input + return ctx.createToken({ email }); + } + }) + } +}) \ No newline at end of file diff --git a/tests/__helpers.ts b/tests/__helpers.ts new file mode 100644 index 0000000..97c4ddf --- /dev/null +++ b/tests/__helpers.ts @@ -0,0 +1,17 @@ +// tests/__helpers.ts +import { createTestContext as originalCreateTestContext, TestContext } from 'nexus/testing' + +export function createTestContext(): TestContext { + let ctx = {} as TestContext + + beforeAll(async () => { + Object.assign(ctx, await originalCreateTestContext()) + await ctx.app.server.start() + }) + + afterAll(async () => { + await ctx.app.server.stop() + }) + + return ctx +} diff --git a/tests/runtime.test.ts b/tests/runtime.test.ts new file mode 100644 index 0000000..db0d31c --- /dev/null +++ b/tests/runtime.test.ts @@ -0,0 +1,17 @@ +// import { createTestContext, TestContext } from 'nexus/testing' +import { createTestContext } from './__helpers' + +let ctx = createTestContext(); + +// beforeAll(async () => { +// await ctx.app.server.start() +// }) + +// afterAll(async () => { +// await ctx.app.server.stop() +// }) + + +it('Testing jest config', async () => { + expect(true).toEqual(true); +}) diff --git a/tests/tsconfig.json b/tests/tsconfig.json new file mode 100644 index 0000000..9441164 --- /dev/null +++ b/tests/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "target": "es2016", + "module": "commonjs", + "esModuleInterop": true, + "strict": true, + "rootDir": "../", + "resolveJsonModule": true + } +} \ No newline at end of file