From afd288a717b12229ba20efda97842569b236eb63 Mon Sep 17 00:00:00 2001 From: Sondre Kjempekjenn Date: Thu, 5 May 2022 20:05:31 +0200 Subject: [PATCH] Testing - mock setup for redis (#2944) --- .eslintrc.json | 4 +- backend/package-lock.json | 139 +++++++++++++++++++++++++++++++++++- backend/package.json | 1 + backend/setup-tests.ts | 6 ++ backend/src/tasks/george.ts | 6 +- 5 files changed, 149 insertions(+), 7 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 4f51b03bc..9c23fd769 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -35,7 +35,6 @@ ], "semi": ["error", "always"], "no-empty": ["error", { "allowEmptyCatch": true }], - "no-unused-vars": ["error", { "argsIgnorePattern": "^(_|e|event)" }], "no-var": 2, "require-path-exists/notEmpty": 2, "require-path-exists/tooManyArguments": 2, @@ -68,9 +67,10 @@ "@typescript-eslint/explicit-function-return-type": ["error"], "@typescript-eslint/ban-ts-comment": "off", "@typescript-eslint/no-empty-function": "error", + "no-unused-vars": "off", "@typescript-eslint/no-unused-vars": [ "error", - { "argsIgnorePattern": "^(_|e|event)" } + { "argsIgnorePattern": "^(_|e|event)", "varsIgnorePattern": "^_" } ], "@typescript-eslint/no-var-requires": "error", "@typescript-eslint/no-this-alias": "off" diff --git a/backend/package-lock.json b/backend/package-lock.json index 38066b7ea..058e404d6 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -52,6 +52,7 @@ "@types/swagger-ui-express": "4.1.3", "@types/ua-parser-js": "0.7.36", "@types/uuid": "8.3.4", + "ioredis-mock": "7.4.0", "jest": "27.5.1", "jest-environment-node": "27.5.1", "supertest": "6.2.3", @@ -1652,8 +1653,9 @@ }, "node_modules/@types/jest": { "version": "27.5.0", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.0.tgz", + "integrity": "sha512-9RBFx7r4k+msyj/arpfaa0WOOEcaAZNmN+j80KFbFCoSqCJGHTz7YMAMGQW9Xmqm5w6l5c25vbSjMwlikJi5+g==", "dev": true, - "license": "MIT", "dependencies": { "jest-matcher-utils": "^27.0.0", "pretty-format": "^27.0.0" @@ -3647,6 +3649,44 @@ "version": "4.2.1", "license": "MIT" }, + "node_modules/fengari": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/fengari/-/fengari-0.1.4.tgz", + "integrity": "sha512-6ujqUuiIYmcgkGz8MGAdERU57EIluGGPSUgGPTsco657EHa+srq0S3/YUl/r9kx1+D+d4rGfYObd+m8K22gB1g==", + "dev": true, + "dependencies": { + "readline-sync": "^1.4.9", + "sprintf-js": "^1.1.1", + "tmp": "^0.0.33" + } + }, + "node_modules/fengari-interop": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/fengari-interop/-/fengari-interop-0.1.3.tgz", + "integrity": "sha512-EtZ+oTu3kEwVJnoymFPBVLIbQcCoy9uWCVnMA6h3M/RqHkUBsLYp29+RRHf9rKr6GwjubWREU1O7RretFIXjHw==", + "dev": true, + "peerDependencies": { + "fengari": "^0.1.0" + } + }, + "node_modules/fengari/node_modules/sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true + }, + "node_modules/fengari/node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/fill-range": { "version": "7.0.1", "license": "MIT", @@ -4408,6 +4448,24 @@ "url": "https://opencollective.com/ioredis" } }, + "node_modules/ioredis-mock": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/ioredis-mock/-/ioredis-mock-7.4.0.tgz", + "integrity": "sha512-jcNG+9YjjBA1p6Hb1nYaC1yhW+n9S5VOgbGZXt59ZmtI2WrPWH+lSD4gE017uaGitPqW7tquFdAfcBPvFEQbew==", + "dev": true, + "dependencies": { + "fengari": "^0.1.4", + "fengari-interop": "^0.1.3", + "redis-commands": "^1.7.0", + "standard-as-callback": "^2.1.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "ioredis": "4.x || 5.x" + } + }, "node_modules/ioredis/node_modules/debug": { "version": "4.3.4", "license": "MIT", @@ -6621,6 +6679,15 @@ "node": ">= 0.8.0" } }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/p-cancelable": { "version": "1.1.0", "license": "MIT", @@ -7095,6 +7162,15 @@ "node": ">=8.10.0" } }, + "node_modules/readline-sync": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", + "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/redis-commands": { "version": "1.7.0", "license": "MIT" @@ -10028,6 +10104,8 @@ }, "@types/jest": { "version": "27.5.0", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.0.tgz", + "integrity": "sha512-9RBFx7r4k+msyj/arpfaa0WOOEcaAZNmN+j80KFbFCoSqCJGHTz7YMAMGQW9Xmqm5w6l5c25vbSjMwlikJi5+g==", "dev": true, "requires": { "jest-matcher-utils": "^27.0.0", @@ -11361,6 +11439,41 @@ "fecha": { "version": "4.2.1" }, + "fengari": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/fengari/-/fengari-0.1.4.tgz", + "integrity": "sha512-6ujqUuiIYmcgkGz8MGAdERU57EIluGGPSUgGPTsco657EHa+srq0S3/YUl/r9kx1+D+d4rGfYObd+m8K22gB1g==", + "dev": true, + "requires": { + "readline-sync": "^1.4.9", + "sprintf-js": "^1.1.1", + "tmp": "^0.0.33" + }, + "dependencies": { + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + } + } + }, + "fengari-interop": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/fengari-interop/-/fengari-interop-0.1.3.tgz", + "integrity": "sha512-EtZ+oTu3kEwVJnoymFPBVLIbQcCoy9uWCVnMA6h3M/RqHkUBsLYp29+RRHf9rKr6GwjubWREU1O7RretFIXjHw==", + "dev": true, + "requires": {} + }, "fill-range": { "version": "7.0.1", "requires": { @@ -11841,6 +11954,18 @@ } } }, + "ioredis-mock": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/ioredis-mock/-/ioredis-mock-7.4.0.tgz", + "integrity": "sha512-jcNG+9YjjBA1p6Hb1nYaC1yhW+n9S5VOgbGZXt59ZmtI2WrPWH+lSD4gE017uaGitPqW7tquFdAfcBPvFEQbew==", + "dev": true, + "requires": { + "fengari": "^0.1.4", + "fengari-interop": "^0.1.3", + "redis-commands": "^1.7.0", + "standard-as-callback": "^2.1.0" + } + }, "ip": { "version": "1.1.5" }, @@ -13293,6 +13418,12 @@ "word-wrap": "~1.2.3" } }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, "p-cancelable": { "version": "1.1.0" }, @@ -13588,6 +13719,12 @@ "picomatch": "^2.2.1" } }, + "readline-sync": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", + "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==", + "dev": true + }, "redis-commands": { "version": "1.7.0" }, diff --git a/backend/package.json b/backend/package.json index 72eebe114..c37d671aa 100644 --- a/backend/package.json +++ b/backend/package.json @@ -59,6 +59,7 @@ "@types/swagger-ui-express": "4.1.3", "@types/ua-parser-js": "0.7.36", "@types/uuid": "8.3.4", + "ioredis-mock": "7.4.0", "jest": "27.5.1", "jest-environment-node": "27.5.1", "supertest": "6.2.3", diff --git a/backend/setup-tests.ts b/backend/setup-tests.ts index 78c5056d7..ed3708b33 100644 --- a/backend/setup-tests.ts +++ b/backend/setup-tests.ts @@ -28,6 +28,12 @@ jest.mock("swagger-stats", () => ({ }, })); +if (!process.env.REDIS_URI) { + // use mock if not set + process.env.REDIS_URI = "redis://mock"; + jest.mock("ioredis", () => require("ioredis-mock")); +} + // TODO: better approach for this when needed // https://firebase.google.com/docs/rules/unit-tests#run_local_unit_tests_with_the_version_9_javascript_sdk jest.mock("firebase-admin", () => ({ diff --git a/backend/src/tasks/george.ts b/backend/src/tasks/george.ts index fb528b446..4e7bbc7d0 100644 --- a/backend/src/tasks/george.ts +++ b/backend/src/tasks/george.ts @@ -16,7 +16,7 @@ function buildGeorgeTask(command: string, taskArguments: any[]): GeorgeTask { } let jobQueue: Queue; -let jobQueueScheduler: QueueScheduler; +let _queueScheduler: QueueScheduler; export function initJobQueue(redisConnection: IORedis.Redis | undefined): void { if (jobQueue || !redisConnection) { @@ -36,11 +36,9 @@ export function initJobQueue(redisConnection: IORedis.Redis | undefined): void { }, }); - jobQueueScheduler = new QueueScheduler(QUEUE_NAME, { - autorun: false, + _queueScheduler = new QueueScheduler(QUEUE_NAME, { connection: redisConnection, }); - jobQueueScheduler.run(); } async function addToQueue(command: string, task: GeorgeTask): Promise {