From 90a1f00f3dce821abb23cb74329ad5929e215f26 Mon Sep 17 00:00:00 2001 From: Collin Duncan <3679940+cgduncan7@users.noreply.github.com> Date: Mon, 21 Nov 2022 19:07:43 +0100 Subject: [PATCH] Moving around some files so that it is a bit more clear and using ts-jest for jest --- jest.config.js | 9 +- package-lock.json | 145 +++++++++++++++++- package.json | 3 +- .../index.ts => common/scheduler.ts} | 9 +- src/server/index.ts | 2 +- src/workers/types.ts | 1 - .../__snapshots__/scheduler.test.ts.snap | 0 tests/{workers => common}/scheduler.test.ts | 7 +- 8 files changed, 151 insertions(+), 25 deletions(-) rename src/{workers/scheduler/index.ts => common/scheduler.ts} (81%) delete mode 100644 src/workers/types.ts rename tests/{workers => common}/__snapshots__/scheduler.test.ts.snap (100%) rename tests/{workers => common}/scheduler.test.ts (90%) diff --git a/jest.config.js b/jest.config.js index a69bdb4..04e8277 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,9 +1,6 @@ -/* - * For a detailed explanation regarding each configuration property, visit: - * https://jestjs.io/docs/configuration - */ - -module.exports = { +export default { + preset: 'ts-jest', + testEnvironment: 'node', clearMocks: true, collectCoverage: true, coverageReporters: [ diff --git a/package-lock.json b/package-lock.json index 99a4bca..ae763cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "@rollup/plugin-commonjs": "^23.0.2", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-typescript": "^9.0.2", - "@types/jest": "^29.0.2", + "@types/jest": "^29.2.3", "@types/mysql": "^2.15.21", "@types/puppeteer": "^5.4.7", "@types/uuid": "^8.3.4", @@ -32,6 +32,7 @@ "prettier": "^2.7.1", "rollup": "^3.2.5", "rollup-plugin-natives": "^0.7.6", + "ts-jest": "^29.0.3", "typescript": "^4.8.4" }, "engines": { @@ -3248,9 +3249,9 @@ } }, "node_modules/@types/jest": { - "version": "29.2.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.2.0.tgz", - "integrity": "sha512-KO7bPV21d65PKwv3LLsD8Jn3E05pjNjRZvkm+YTacWhVmykAb07wW6IkZUmQAltwQafNcDUEUrMO2h3jeBSisg==", + "version": "29.2.3", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.2.3.tgz", + "integrity": "sha512-6XwoEbmatfyoCjWRX7z0fKMmgYKe9+/HrviJ5k0X/tjJWHGAezZOfYaxqQKuzG/TvQyr+ktjm4jgbk0s4/oF2w==", "dev": true, "dependencies": { "expect": "^29.0.0", @@ -3995,6 +3996,18 @@ "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": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", @@ -9110,6 +9123,12 @@ "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": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -9150,6 +9169,12 @@ "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": { "version": "1.0.12", "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", "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": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", @@ -13123,9 +13206,9 @@ } }, "@types/jest": { - "version": "29.2.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.2.0.tgz", - "integrity": "sha512-KO7bPV21d65PKwv3LLsD8Jn3E05pjNjRZvkm+YTacWhVmykAb07wW6IkZUmQAltwQafNcDUEUrMO2h3jeBSisg==", + "version": "29.2.3", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.2.3.tgz", + "integrity": "sha512-6XwoEbmatfyoCjWRX7z0fKMmgYKe9+/HrviJ5k0X/tjJWHGAezZOfYaxqQKuzG/TvQyr+ktjm4jgbk0s4/oF2w==", "dev": true, "requires": { "expect": "^29.0.0", @@ -13648,6 +13731,15 @@ "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": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", @@ -17562,6 +17654,12 @@ "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": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -17593,6 +17691,12 @@ "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": { "version": "1.0.12", "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", "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": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", diff --git a/package.json b/package.json index 7eb1d51..abe7eb3 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "@rollup/plugin-commonjs": "^23.0.2", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-typescript": "^9.0.2", - "@types/jest": "^29.0.2", + "@types/jest": "^29.2.3", "@types/mysql": "^2.15.21", "@types/puppeteer": "^5.4.7", "@types/uuid": "^8.3.4", @@ -45,6 +45,7 @@ "prettier": "^2.7.1", "rollup": "^3.2.5", "rollup-plugin-natives": "^0.7.6", + "ts-jest": "^29.0.3", "typescript": "^4.8.4" } } diff --git a/src/workers/scheduler/index.ts b/src/common/scheduler.ts similarity index 81% rename from src/workers/scheduler/index.ts rename to src/common/scheduler.ts index 469c8b2..f792644 100644 --- a/src/workers/scheduler/index.ts +++ b/src/common/scheduler.ts @@ -1,10 +1,9 @@ import { Dayjs } from 'dayjs' import { v4 } from 'uuid' -import { Logger, LogLevel } from '../../common/logger' -import { Reservation } from '../../common/reservation' -import { validateJSONRequest } from '../../common/request' -import { Worker } from '../types' +import { Logger, LogLevel } from './logger' +import { Reservation } from './reservation' +import { validateJSONRequest } from './request' export interface ScheduledReservation { reservation: Reservation @@ -17,7 +16,7 @@ export interface SchedulerResult { export type SchedulerInput = Record -export const work: Worker = async ( +export const work = async ( payload: SchedulerInput ): Promise => { Logger.instantiate('scheduler', v4(), LogLevel.DEBUG) diff --git a/src/server/index.ts b/src/server/index.ts index b59933b..26ced8c 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -3,7 +3,7 @@ import { Readable } from 'stream' import { v4 } from 'uuid' import { disconnect } from '../common/database' 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) diff --git a/src/workers/types.ts b/src/workers/types.ts deleted file mode 100644 index dba5066..0000000 --- a/src/workers/types.ts +++ /dev/null @@ -1 +0,0 @@ -export type Worker = (payload: I) => O | Promise diff --git a/tests/workers/__snapshots__/scheduler.test.ts.snap b/tests/common/__snapshots__/scheduler.test.ts.snap similarity index 100% rename from tests/workers/__snapshots__/scheduler.test.ts.snap rename to tests/common/__snapshots__/scheduler.test.ts.snap diff --git a/tests/workers/scheduler.test.ts b/tests/common/scheduler.test.ts similarity index 90% rename from tests/workers/scheduler.test.ts rename to tests/common/scheduler.test.ts index 2244a9b..a3ad447 100644 --- a/tests/workers/scheduler.test.ts +++ b/tests/common/scheduler.test.ts @@ -5,7 +5,7 @@ import { work, SchedulerInput, SchedulerResult, -} from '../../src/workers/scheduler' +} from '../../src/common/scheduler' jest.mock('../../src/common/logger') jest.useFakeTimers().setSystemTime(new Date('2022-01-01')) @@ -22,9 +22,8 @@ describe('scheduler', () => { opponent: { id: '123', name: 'collin' }, } - await expect(work(payload)).resolves.toMatchSnapshot({ + expect(await work(payload)).toMatchSnapshot({ scheduledReservation: { - // @ts-expect-error snapshot property matching reservation: { user: { username: 'collin', @@ -47,7 +46,7 @@ describe('scheduler', () => { opponent: { id: '123', name: 'collin' }, } - await expect(work(payload)).resolves.toMatchSnapshot({ + await expect(await work(payload)).toMatchSnapshot({ scheduledReservation: { reservation: new Reservation( { username: 'collin', password: expect.any(String) },