Moving around some files so that it is a bit more clear and using ts-jest for jest

This commit is contained in:
Collin Duncan 2022-11-21 19:07:43 +01:00
parent 4f3c0e9938
commit 90a1f00f3d
No known key found for this signature in database
8 changed files with 151 additions and 25 deletions

View file

@ -1,9 +1,6 @@
/* export default {
* For a detailed explanation regarding each configuration property, visit: preset: 'ts-jest',
* https://jestjs.io/docs/configuration testEnvironment: 'node',
*/
module.exports = {
clearMocks: true, clearMocks: true,
collectCoverage: true, collectCoverage: true,
coverageReporters: [ coverageReporters: [

145
package-lock.json generated
View file

@ -20,7 +20,7 @@
"@rollup/plugin-commonjs": "^23.0.2", "@rollup/plugin-commonjs": "^23.0.2",
"@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-node-resolve": "^15.0.1",
"@rollup/plugin-typescript": "^9.0.2", "@rollup/plugin-typescript": "^9.0.2",
"@types/jest": "^29.0.2", "@types/jest": "^29.2.3",
"@types/mysql": "^2.15.21", "@types/mysql": "^2.15.21",
"@types/puppeteer": "^5.4.7", "@types/puppeteer": "^5.4.7",
"@types/uuid": "^8.3.4", "@types/uuid": "^8.3.4",
@ -32,6 +32,7 @@
"prettier": "^2.7.1", "prettier": "^2.7.1",
"rollup": "^3.2.5", "rollup": "^3.2.5",
"rollup-plugin-natives": "^0.7.6", "rollup-plugin-natives": "^0.7.6",
"ts-jest": "^29.0.3",
"typescript": "^4.8.4" "typescript": "^4.8.4"
}, },
"engines": { "engines": {
@ -3248,9 +3249,9 @@
} }
}, },
"node_modules/@types/jest": { "node_modules/@types/jest": {
"version": "29.2.0", "version": "29.2.3",
"resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.2.0.tgz", "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.2.3.tgz",
"integrity": "sha512-KO7bPV21d65PKwv3LLsD8Jn3E05pjNjRZvkm+YTacWhVmykAb07wW6IkZUmQAltwQafNcDUEUrMO2h3jeBSisg==", "integrity": "sha512-6XwoEbmatfyoCjWRX7z0fKMmgYKe9+/HrviJ5k0X/tjJWHGAezZOfYaxqQKuzG/TvQyr+ktjm4jgbk0s4/oF2w==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"expect": "^29.0.0", "expect": "^29.0.0",
@ -3995,6 +3996,18 @@
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
} }
}, },
"node_modules/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,
"dependencies": {
"fast-json-stable-stringify": "2.x"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/bser": { "node_modules/bser": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
@ -9110,6 +9123,12 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/lodash.memoize": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
"integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
"dev": true
},
"node_modules/lodash.merge": { "node_modules/lodash.merge": {
"version": "4.6.2", "version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
@ -9150,6 +9169,12 @@
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
} }
}, },
"node_modules/make-error": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
"dev": true
},
"node_modules/makeerror": { "node_modules/makeerror": {
"version": "1.0.12", "version": "1.0.12",
"resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
@ -10282,6 +10307,64 @@
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
}, },
"node_modules/ts-jest": {
"version": "29.0.3",
"resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.0.3.tgz",
"integrity": "sha512-Ibygvmuyq1qp/z3yTh9QTwVVAbFdDy/+4BtIQR2sp6baF2SJU/8CKK/hhnGIDY2L90Az2jIqTwZPnN2p+BweiQ==",
"dev": true,
"dependencies": {
"bs-logger": "0.x",
"fast-json-stable-stringify": "2.x",
"jest-util": "^29.0.0",
"json5": "^2.2.1",
"lodash.memoize": "4.x",
"make-error": "1.x",
"semver": "7.x",
"yargs-parser": "^21.0.1"
},
"bin": {
"ts-jest": "cli.js"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"peerDependencies": {
"@babel/core": ">=7.0.0-beta.0 <8",
"@jest/types": "^29.0.0",
"babel-jest": "^29.0.0",
"jest": "^29.0.0",
"typescript": ">=4.3"
},
"peerDependenciesMeta": {
"@babel/core": {
"optional": true
},
"@jest/types": {
"optional": true
},
"babel-jest": {
"optional": true
},
"esbuild": {
"optional": true
}
}
},
"node_modules/ts-jest/node_modules/semver": {
"version": "7.3.8",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
"integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
"dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
},
"bin": {
"semver": "bin/semver.js"
},
"engines": {
"node": ">=10"
}
},
"node_modules/tslib": { "node_modules/tslib": {
"version": "1.14.1", "version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
@ -13123,9 +13206,9 @@
} }
}, },
"@types/jest": { "@types/jest": {
"version": "29.2.0", "version": "29.2.3",
"resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.2.0.tgz", "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.2.3.tgz",
"integrity": "sha512-KO7bPV21d65PKwv3LLsD8Jn3E05pjNjRZvkm+YTacWhVmykAb07wW6IkZUmQAltwQafNcDUEUrMO2h3jeBSisg==", "integrity": "sha512-6XwoEbmatfyoCjWRX7z0fKMmgYKe9+/HrviJ5k0X/tjJWHGAezZOfYaxqQKuzG/TvQyr+ktjm4jgbk0s4/oF2w==",
"dev": true, "dev": true,
"requires": { "requires": {
"expect": "^29.0.0", "expect": "^29.0.0",
@ -13648,6 +13731,15 @@
"update-browserslist-db": "^1.0.9" "update-browserslist-db": "^1.0.9"
} }
}, },
"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": { "bser": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
@ -17562,6 +17654,12 @@
"p-locate": "^4.1.0" "p-locate": "^4.1.0"
} }
}, },
"lodash.memoize": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
"integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
"dev": true
},
"lodash.merge": { "lodash.merge": {
"version": "4.6.2", "version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
@ -17593,6 +17691,12 @@
"semver": "^6.0.0" "semver": "^6.0.0"
} }
}, },
"make-error": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
"dev": true
},
"makeerror": { "makeerror": {
"version": "1.0.12", "version": "1.0.12",
"resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
@ -18427,6 +18531,33 @@
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
}, },
"ts-jest": {
"version": "29.0.3",
"resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.0.3.tgz",
"integrity": "sha512-Ibygvmuyq1qp/z3yTh9QTwVVAbFdDy/+4BtIQR2sp6baF2SJU/8CKK/hhnGIDY2L90Az2jIqTwZPnN2p+BweiQ==",
"dev": true,
"requires": {
"bs-logger": "0.x",
"fast-json-stable-stringify": "2.x",
"jest-util": "^29.0.0",
"json5": "^2.2.1",
"lodash.memoize": "4.x",
"make-error": "1.x",
"semver": "7.x",
"yargs-parser": "^21.0.1"
},
"dependencies": {
"semver": {
"version": "7.3.8",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
"integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
"dev": true,
"requires": {
"lru-cache": "^6.0.0"
}
}
}
},
"tslib": { "tslib": {
"version": "1.14.1", "version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",

View file

@ -33,7 +33,7 @@
"@rollup/plugin-commonjs": "^23.0.2", "@rollup/plugin-commonjs": "^23.0.2",
"@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-node-resolve": "^15.0.1",
"@rollup/plugin-typescript": "^9.0.2", "@rollup/plugin-typescript": "^9.0.2",
"@types/jest": "^29.0.2", "@types/jest": "^29.2.3",
"@types/mysql": "^2.15.21", "@types/mysql": "^2.15.21",
"@types/puppeteer": "^5.4.7", "@types/puppeteer": "^5.4.7",
"@types/uuid": "^8.3.4", "@types/uuid": "^8.3.4",
@ -45,6 +45,7 @@
"prettier": "^2.7.1", "prettier": "^2.7.1",
"rollup": "^3.2.5", "rollup": "^3.2.5",
"rollup-plugin-natives": "^0.7.6", "rollup-plugin-natives": "^0.7.6",
"ts-jest": "^29.0.3",
"typescript": "^4.8.4" "typescript": "^4.8.4"
} }
} }

View file

@ -1,10 +1,9 @@
import { Dayjs } from 'dayjs' import { Dayjs } from 'dayjs'
import { v4 } from 'uuid' import { v4 } from 'uuid'
import { Logger, LogLevel } from '../../common/logger' import { Logger, LogLevel } from './logger'
import { Reservation } from '../../common/reservation' import { Reservation } from './reservation'
import { validateJSONRequest } from '../../common/request' import { validateJSONRequest } from './request'
import { Worker } from '../types'
export interface ScheduledReservation { export interface ScheduledReservation {
reservation: Reservation reservation: Reservation
@ -17,7 +16,7 @@ export interface SchedulerResult {
export type SchedulerInput = Record<string, unknown> export type SchedulerInput = Record<string, unknown>
export const work: Worker<SchedulerInput, SchedulerResult> = async ( export const work = async (
payload: SchedulerInput payload: SchedulerInput
): Promise<SchedulerResult> => { ): Promise<SchedulerResult> => {
Logger.instantiate('scheduler', v4(), LogLevel.DEBUG) Logger.instantiate('scheduler', v4(), LogLevel.DEBUG)

View file

@ -3,7 +3,7 @@ import { Readable } from 'stream'
import { v4 } from 'uuid' import { v4 } from 'uuid'
import { disconnect } from '../common/database' import { disconnect } from '../common/database'
import { Logger, LogLevel } from '../common/logger' import { Logger, LogLevel } from '../common/logger'
import { work as schedule } from '../workers/scheduler' import { work as schedule } from '../common/scheduler'
Logger.instantiate('requester', 'start-up', LogLevel.INFO) Logger.instantiate('requester', 'start-up', LogLevel.INFO)

View file

@ -1 +0,0 @@
export type Worker<I = unknown, O = unknown> = (payload: I) => O | Promise<O>

View file

@ -5,7 +5,7 @@ import {
work, work,
SchedulerInput, SchedulerInput,
SchedulerResult, SchedulerResult,
} from '../../src/workers/scheduler' } from '../../src/common/scheduler'
jest.mock('../../src/common/logger') jest.mock('../../src/common/logger')
jest.useFakeTimers().setSystemTime(new Date('2022-01-01')) jest.useFakeTimers().setSystemTime(new Date('2022-01-01'))
@ -22,9 +22,8 @@ describe('scheduler', () => {
opponent: { id: '123', name: 'collin' }, opponent: { id: '123', name: 'collin' },
} }
await expect(work(payload)).resolves.toMatchSnapshot<SchedulerResult>({ expect(await work(payload)).toMatchSnapshot({
scheduledReservation: { scheduledReservation: {
// @ts-expect-error snapshot property matching
reservation: { reservation: {
user: { user: {
username: 'collin', username: 'collin',
@ -47,7 +46,7 @@ describe('scheduler', () => {
opponent: { id: '123', name: 'collin' }, opponent: { id: '123', name: 'collin' },
} }
await expect(work(payload)).resolves.toMatchSnapshot<SchedulerResult>({ await expect(await work(payload)).toMatchSnapshot({
scheduledReservation: { scheduledReservation: {
reservation: new Reservation( reservation: new Reservation(
{ username: 'collin', password: expect.any(String) }, { username: 'collin', password: expect.any(String) },