Testing - mock setup for redis (#2944)

This commit is contained in:
Sondre Kjempekjenn 2022-05-05 20:05:31 +02:00 committed by GitHub
parent 91220a5bdc
commit afd288a717
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 149 additions and 7 deletions

View file

@ -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"

View file

@ -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"
},

View file

@ -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",

View file

@ -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", () => ({

View file

@ -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<void> {