From 212412436e0618e9305c18f40ceed06f96347292 Mon Sep 17 00:00:00 2001 From: zkldi Date: Sat, 29 May 2021 09:50:47 +0100 Subject: [PATCH 1/5] Implement Redis IPC hooks. Fixes #99 --- server/src/external/redis/redis-IPC.test.ts | 15 ++++ server/src/external/redis/redis-IPC.ts | 80 +++++++++++++++++++ .../lib/score-import/framework/goals/goals.ts | 50 +++++------- .../framework/milestones/milestones.ts | 30 ++++--- .../framework/user-game-stats/classes.test.ts | 6 +- .../framework/user-game-stats/classes.ts | 37 +++++---- .../framework/user-game-stats/update-ugs.ts | 2 +- .../file/solid-state-squad/parser.test.ts | 12 +-- server/src/test-utils/close-connections.ts | 2 + server/src/utils/class.ts | 10 ++- 10 files changed, 174 insertions(+), 70 deletions(-) create mode 100644 server/src/external/redis/redis-IPC.test.ts create mode 100644 server/src/external/redis/redis-IPC.ts diff --git a/server/src/external/redis/redis-IPC.test.ts b/server/src/external/redis/redis-IPC.test.ts new file mode 100644 index 000000000..678d32a34 --- /dev/null +++ b/server/src/external/redis/redis-IPC.test.ts @@ -0,0 +1,15 @@ +import t from "tap"; +import { CloseRedisPubSub, RedisPub, RedisSub } from "./redis-IPC"; + +t.test("Basic PUB/SUB testing", (t) => { + t.setTimeout(2000); + RedisSub("class-update", (d) => { + t.equal(d.userID, 1); + t.pass(); + t.end(); + }); + + RedisPub("class-update", { userID: 1 } as any); +}); + +t.teardown(CloseRedisPubSub); diff --git a/server/src/external/redis/redis-IPC.ts b/server/src/external/redis/redis-IPC.ts new file mode 100644 index 000000000..abb937c7c --- /dev/null +++ b/server/src/external/redis/redis-IPC.ts @@ -0,0 +1,80 @@ +import redis from "redis"; +import { RedisIPCChannels, RedisIPCData } from "kamaitachi-common"; +import CreateLogCtx from "../../lib/logger/logger"; + +const logger = CreateLogCtx(__filename); + +type RedisSubCallback = (data: RedisIPCData[T]) => void; + +type SubCallbacks = { + [K in RedisIPCChannels]: RedisSubCallback[]; +}; + +const SubCallbacks: Partial = {}; + +// Redis doesn't allow one client to subscribe and publish +// There's little to no overhead to having these three clients, +// so - that's why its like this. +const SubClient = redis.createClient(); +const PubClient = redis.createClient(); + +const PREFIX = "KTBSV"; + +export function RedisPub(channel: T, data: RedisIPCData[T]) { + PubClient.publish(`${PREFIX}-${channel}`, JSON.stringify(data)); +} + +export function RedisSub(channel: T, callback: RedisSubCallback) { + if (SubCallbacks[channel]) { + // @ts-expect-error It's complaining that the T in channel might be a different T to the T in callback + // this is obviously nonsense. + SubCallbacks[channel]!.push(callback); + logger.debug(`Pushed callback ${callback.name} to channel ${channel}.`); + } else { + // @ts-expect-error see above. + SubCallbacks[channel] = [callback]; + SubClient.subscribe(`${PREFIX}-${channel}`); + logger.debug(`Added first callback ${callback.name} to channel ${channel}.`); + } +} + +SubClient.on("message", (channel, strData) => { + if (!channel.startsWith("KTBSV-")) { + return; // not our business + } + + const ktChannel = channel.slice("KTBSV-".length) as RedisIPCChannels; + + if (!Object.prototype.hasOwnProperty.call(SubCallbacks, ktChannel)) { + return; // no callbacks to call + } + + const jsData = JSON.parse(strData); + + for (const cb of SubCallbacks[ktChannel]!) { + try { + cb(jsData); + } catch (err) { + logger.error(`Error calling callback ${cb.name} for channel ${ktChannel}`, { err }); + } + } +}); + +// Awful... +export function CloseRedisPubSub() { + return new Promise((resolve, reject) => { + PubClient.quit((err) => { + if (err) { + reject(err); + } + + SubClient.quit((err) => { + if (err) { + reject(err); + } + + resolve(); + }); + }); + }); +} diff --git a/server/src/lib/score-import/framework/goals/goals.ts b/server/src/lib/score-import/framework/goals/goals.ts index 0bdee9f45..d53917807 100644 --- a/server/src/lib/score-import/framework/goals/goals.ts +++ b/server/src/lib/score-import/framework/goals/goals.ts @@ -2,6 +2,7 @@ import { integer, Game, GoalDocument, UserGoalDocument } from "kamaitachi-common import { EvaluateGoalForUser } from "../../../../utils/goal"; import db from "../../../../external/mongo/db"; import { KtLogger } from "../../../logger/logger"; +import { RedisPub } from "../../../../external/redis/redis-IPC"; /** * Update a user's progress on all of their set goals. @@ -87,30 +88,11 @@ export async function ProcessGoal( return; } - // if the user has changed their progress on the goal - if (userGoal.progress !== res.progress) { - // if the user has improved their progress on the goal - // if userGoal.progress is null, then res.progress must be non-null, and therefore an improvement. - if ( - userGoal.progress === null || - (res.progress !== null && userGoal.progress < res.progress) - ) { - // @todo #99 emit something - } - } else if (userGoal.outOf === res.outOf) { - // if the users progress hasn't changed AND the outOf hasn't - // then nothing has changed. - - // the outOf check is to account for things such as folder sizes changing underfoot - // which would always require an update. + // nothing has changed + if (userGoal.progress === res.progress && userGoal.outOf === res.outOf) { return; } - // if this is a newly-achieved goal - if (res.achieved && !userGoal.achieved) { - // @todo #99 emit something - } - const newData = { progress: res.progress, progressHuman: res.progressHuman, @@ -119,6 +101,24 @@ export async function ProcessGoal( achieved: res.achieved, }; + const oldData = { + progress: userGoal.progress, + progressHuman: userGoal.progressHuman, + outOf: userGoal.outOf, + outOfHuman: userGoal.outOfHuman, + achieved: userGoal.achieved, + }; + + // if this is a newly-achieved goal + if (res.achieved && !userGoal.achieved) { + RedisPub("goal-achieved", { + userID, + goalID: goal.goalID, + old: oldData, + new: newData, + }); + } + const bulkWrite = { updateOne: { filter: { _id: userGoal._id! }, @@ -139,13 +139,7 @@ export async function ProcessGoal( bwrite: bulkWrite, import: { goalID: goal.goalID, - old: { - progress: userGoal.progress, - progressHuman: userGoal.progressHuman, - outOf: userGoal.outOf, - outOfHuman: userGoal.outOfHuman, - achieved: userGoal.achieved, - }, + old: oldData, new: newData, }, }; diff --git a/server/src/lib/score-import/framework/milestones/milestones.ts b/server/src/lib/score-import/framework/milestones/milestones.ts index 7cbba32ae..d574e3228 100644 --- a/server/src/lib/score-import/framework/milestones/milestones.ts +++ b/server/src/lib/score-import/framework/milestones/milestones.ts @@ -11,6 +11,7 @@ import { import db from "../../../../external/mongo/db"; import { BulkWriteUpdateOneOperation } from "mongodb"; import { CalculateMilestoneOutOf, GetGoalIDsFromMilestone } from "../../../../utils/milestone"; +import { RedisPub, RedisSub } from "../../../../external/redis/redis-IPC"; /** * Processes and updates a user's milestones from their Goal Import Info (i.e. what is returned @@ -113,22 +114,27 @@ export async function UpdateUsersMilestones( }, }); + const milestoneInfo = { + milestoneID: userMilestone.milestoneID, + old: { + progress: userMilestone.progress, + achieved: userMilestone.achieved, + }, + new: { + progress, + achieved, + }, + }; + if (progress !== userMilestone.progress) { - importMilestoneInfo.push({ - milestoneID: userMilestone.milestoneID, - old: { - progress: userMilestone.progress, - achieved: userMilestone.achieved, - }, - new: { - progress, - achieved, - }, - }); + importMilestoneInfo.push(milestoneInfo); } if (achieved && !userMilestone.achieved) { - // @todo #99 emit some sort of event + RedisPub("milestone-achieved", { + userID, + ...milestoneInfo, + }); } } diff --git a/server/src/lib/score-import/framework/user-game-stats/classes.test.ts b/server/src/lib/score-import/framework/user-game-stats/classes.test.ts index 2958dfdcc..5e17c915f 100644 --- a/server/src/lib/score-import/framework/user-game-stats/classes.test.ts +++ b/server/src/lib/score-import/framework/user-game-stats/classes.test.ts @@ -48,7 +48,7 @@ t.test("#CalculateClassDeltas", (t) => { t.beforeEach(ResetDBState); t.test("Should return improved classes from null", (t) => { - const res = CalculateClassDeltas("SP", { dan: 18 }, null, logger); + const res = CalculateClassDeltas("SP", { dan: 18 }, null, 1, logger); t.strictSame(res, [ { @@ -67,6 +67,7 @@ t.test("#CalculateClassDeltas", (t) => { "SP", { dan: 18 }, { classes: {} } as UserGameStats, + 1, logger ); @@ -87,6 +88,7 @@ t.test("#CalculateClassDeltas", (t) => { "SP", { dan: 18 }, ({ classes: { dan: 17 } } as unknown) as UserGameStats, + 1, logger ); @@ -107,6 +109,7 @@ t.test("#CalculateClassDeltas", (t) => { "SP", { dan: 18 }, ({ classes: { dan: 18 } } as unknown) as UserGameStats, + 1, logger ); @@ -120,6 +123,7 @@ t.test("#CalculateClassDeltas", (t) => { "SP", { dan: 16 }, ({ classes: { dan: 18 } } as unknown) as UserGameStats, + 1, logger ); diff --git a/server/src/lib/score-import/framework/user-game-stats/classes.ts b/server/src/lib/score-import/framework/user-game-stats/classes.ts index 14fc32036..626142bb1 100644 --- a/server/src/lib/score-import/framework/user-game-stats/classes.ts +++ b/server/src/lib/score-import/framework/user-game-stats/classes.ts @@ -4,6 +4,7 @@ import { KtLogger } from "../../../logger/logger"; import { CalculateGitadoraColour, CalculateJubeatColour } from "./builtin-class-handlers"; import { ReturnClassIfGreater } from "../../../../utils/class"; import { GameClasses } from "kamaitachi-common/js/game-classes"; +import { RedisPub } from "../../../../external/redis/redis-IPC"; type ScoreClasses = Partial>; @@ -117,9 +118,10 @@ export function CalculateClassDeltas( playtype: Playtypes[Game], classes: ScoreClasses, userGameStats: UserGameStats | null, + userID: integer, logger: KtLogger ): ClassDelta[] { - const deltas = []; + const deltas: ClassDelta[] = []; for (const s in classes) { const classSet = s as keyof GameClasses; @@ -135,22 +137,25 @@ export function CalculateClassDeltas( if (isGreater === false) { continue; - } else if (isGreater === null) { - // @todo #99 REDISIPC-New Class Achieved - deltas.push({ - set: classSet, - playtype, - old: null, - new: classVal, - }); } else { - // @todo #99 REDISIPC-Class Improved! - deltas.push({ - set: classSet, - playtype, - old: userGameStats!.classes[classSet]!, - new: classVal, - }); + let delta: ClassDelta; + if (isGreater === null) { + delta = { + set: classSet, + playtype, + old: null, + new: classVal, + }; + } else { + delta = { + set: classSet, + playtype, + old: userGameStats!.classes[classSet]!, + new: classVal, + }; + } + + RedisPub("class-update", { userID, ...delta }); } } catch (err) { logger.error(err); diff --git a/server/src/lib/score-import/framework/user-game-stats/update-ugs.ts b/server/src/lib/score-import/framework/user-game-stats/update-ugs.ts index 7c1645321..d635155d8 100644 --- a/server/src/lib/score-import/framework/user-game-stats/update-ugs.ts +++ b/server/src/lib/score-import/framework/user-game-stats/update-ugs.ts @@ -41,7 +41,7 @@ export async function UpdateUsersGamePlaytypeStats( logger.debug(`Calculating Class Deltas...`); - const deltas = CalculateClassDeltas(playtype, classes, userGameStats, logger); + const deltas = CalculateClassDeltas(playtype, classes, userGameStats, userID, logger); logger.debug(`Had ${deltas.length} deltas.`); diff --git a/server/src/lib/score-import/import-types/file/solid-state-squad/parser.test.ts b/server/src/lib/score-import/import-types/file/solid-state-squad/parser.test.ts index d038b973a..81637719b 100644 --- a/server/src/lib/score-import/import-types/file/solid-state-squad/parser.test.ts +++ b/server/src/lib/score-import/import-types/file/solid-state-squad/parser.test.ts @@ -187,7 +187,7 @@ t.test("#ParseSolidStateXML", (t) => { }); t.test("Should reject billion laughs", (t) => { - const time = process.hrtime.bigint(); + t.setTimeout(5000); t.throws( () => @@ -202,15 +202,11 @@ t.test("#ParseSolidStateXML", (t) => { { message: /Invalid S3 XML/u } as any ); - const end = GetMilisecondsSince(time); - - t.ok(end < 10_000, "Should take less than 10 seconds"); - t.end(); }); t.test("Should not expand specifically crafted billion laughs", (t) => { - const time = process.hrtime.bigint(); + t.setTimeout(5000); const res = ParseSolidStateXML( MockMulterFile( @@ -224,10 +220,6 @@ t.test("#ParseSolidStateXML", (t) => { // @ts-expect-error shush t.equal(res.iterable[0].songname, "&lol9;", "Should not expand billion laughs."); - const end = GetMilisecondsSince(time); - - t.ok(end < 10_000, "Should take less than 10 seconds"); - t.end(); }); diff --git a/server/src/test-utils/close-connections.ts b/server/src/test-utils/close-connections.ts index 9589d709a..7c70f6cb5 100644 --- a/server/src/test-utils/close-connections.ts +++ b/server/src/test-utils/close-connections.ts @@ -1,4 +1,5 @@ import { CloseMongoConnection } from "../external/mongo/db"; +import { CloseRedisPubSub } from "../external/redis/redis-IPC"; import { CloseRedisConnection } from "../external/redis/redis-store"; import { CloseServerConnection } from "./mock-api"; @@ -6,4 +7,5 @@ export async function CloseAllConnections() { await CloseMongoConnection(); await CloseServerConnection(); await CloseRedisConnection(); + await CloseRedisPubSub(); } diff --git a/server/src/utils/class.ts b/server/src/utils/class.ts index bae725de0..bf106caab 100644 --- a/server/src/utils/class.ts +++ b/server/src/utils/class.ts @@ -2,6 +2,7 @@ import { Game, integer, IDStrings, Playtypes, UserGameStats } from "kamaitachi-c import db from "../external/mongo/db"; import CreateLogCtx from "../lib/logger/logger"; import { GameClassSets } from "kamaitachi-common/js/game-classes"; +import { RedisPub } from "../external/redis/redis-IPC"; const logger = CreateLogCtx(__filename); @@ -67,11 +68,16 @@ export async function UpdateClassIfGreater( } if (isGreater === null) { - // @todo #99 REDIS-IPC new class achieved + RedisPub("class-update", { userID, new: classVal, old: null, set: classSet }); return null; } else { - // @todo #99 REDIS-IPC class improved + RedisPub("class-update", { + userID, + new: classVal, + old: userGameStats!.classes[classSet]!, + set: classSet, + }); return true; } From a48738869fe95948eaa09229e6e4662617fc4997 Mon Sep 17 00:00:00 2001 From: zkldi Date: Sat, 29 May 2021 09:59:15 +0100 Subject: [PATCH 2/5] bump ktcommon --- server/pnpm-lock.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/pnpm-lock.yaml b/server/pnpm-lock.yaml index 8a9a33e3c..aa68ace92 100644 --- a/server/pnpm-lock.yaml +++ b/server/pnpm-lock.yaml @@ -61,7 +61,7 @@ dependencies: express-session: 1.17.1 fast-json-stable-hash: 1.0.2 fast-xml-parser: 3.19.0 - kamaitachi-common: github.com/zkldi/Kamaitachi-common/5d9c31ce0b9b309182d40191ae3000a3e9083336 + kamaitachi-common: github.com/zkldi/Kamaitachi-common/6f1ca95f0432ae61eef586bb3535ac5a159ad764 mongodb: 3.6.6 monk: 7.3.4 multer: 1.4.2 @@ -4344,8 +4344,8 @@ packages: engines: {node: '>=6'} dev: true - github.com/zkldi/Kamaitachi-common/5d9c31ce0b9b309182d40191ae3000a3e9083336: - resolution: {tarball: https://codeload.github.com/zkldi/Kamaitachi-common/tar.gz/5d9c31ce0b9b309182d40191ae3000a3e9083336} + github.com/zkldi/Kamaitachi-common/6f1ca95f0432ae61eef586bb3535ac5a159ad764: + resolution: {tarball: https://codeload.github.com/zkldi/Kamaitachi-common/tar.gz/6f1ca95f0432ae61eef586bb3535ac5a159ad764} name: kamaitachi-common version: 0.1.0 dependencies: From 2304d70c76941c994e74e88c8c518620129b35e6 Mon Sep 17 00:00:00 2001 From: zkldi Date: Sat, 29 May 2021 10:09:50 +0100 Subject: [PATCH 3/5] change taprc timeout to 60seconds --- server/.taprc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/.taprc b/server/.taprc index 6935c7e71..e366b0744 100644 --- a/server/.taprc +++ b/server/.taprc @@ -1,7 +1,7 @@ files: "src/**/*.test.ts" test-env: NODE_ENV=test jobs: 1 # disable parallel to avoid db clashes -timeout: 500 # might need to be increased +timeout: 60 # might need to be increased ts: true before: "./src/test-utils/setup.ts" check-coverage: true From 52560caf764b5aee01d305084c65e1547e335614 Mon Sep 17 00:00:00 2001 From: zkldi Date: Sat, 29 May 2021 10:20:15 +0100 Subject: [PATCH 4/5] Change all calls to CloseMongoConnection to CloseAllConnections (This is because RedisPubSub clients now need to be closed sometimes) --- server/src/lib/logger/logger.test.ts | 4 ++-- .../calculated-data/calculated-data.test.ts | 5 +++-- .../calculated-data/game-specific-stats.test.ts | 5 +++-- .../framework/calculated-data/game-specific.test.ts | 4 ++-- .../framework/common/import-logger.test.ts | 4 ++-- .../lib/score-import/framework/goals/goals.test.ts | 13 ++++--------- .../framework/milestones/milestones.test.ts | 5 +++-- .../score-import/framework/pb/create-pb-doc.test.ts | 5 +++-- .../score-import/framework/pb/process-pbs.test.ts | 5 +++-- .../framework/score-importing/insert-score.test.ts | 5 +++-- .../framework/score-importing/score-id.test.ts | 4 ++-- .../framework/user-game-stats/classes.test.ts | 4 ++-- .../framework/user-game-stats/rating.test.ts | 5 +++-- .../framework/user-game-stats/update-ugs.test.ts | 5 +++-- .../common/batch-manual/converter.test.ts | 4 ++-- .../import-types/common/batch-manual/parser.test.ts | 4 ++-- .../common/eamusement-iidx-csv/converter.test.ts | 5 +++-- .../common/eamusement-iidx-csv/parser.test.ts | 4 ++-- .../import-types/file/mer-iidx/converter.test.ts | 5 +++-- .../import-types/file/mer-iidx/parser.test.ts | 4 ++-- .../file/solid-state-squad/converter.test.ts | 4 ++-- .../file/solid-state-squad/parser.test.ts | 5 ++--- .../import-types/ir/barbatos/converter.test.ts | 5 +++-- .../import-types/ir/barbatos/parser.test.ts | 4 ++-- .../ir/fervidex-static/class-handler.test.ts | 4 ++-- .../import-types/ir/fervidex-static/parser.test.ts | 4 ++-- .../import-types/ir/fervidex/converter.test.ts | 5 +++-- .../import-types/ir/usc/converter.test.ts | 5 +++-- .../score-import/import-types/ir/usc/parser.test.ts | 4 ++-- server/src/server/router/api/v1/auth/auth.test.ts | 5 +++-- server/src/server/router/ir/beatoraja/auth.test.ts | 4 ++-- .../ir/beatoraja/charts/convert-scores.test.ts | 5 +++-- server/src/server/router/ir/usc/usc.test.ts | 5 +++-- server/src/utils/db.test.ts | 5 +++-- server/src/utils/folder.test.ts | 5 +++-- server/src/utils/goal.test.ts | 5 +++-- server/src/utils/session.test.ts | 5 +++-- server/src/utils/user.test.ts | 4 ++-- 38 files changed, 98 insertions(+), 84 deletions(-) diff --git a/server/src/lib/logger/logger.test.ts b/server/src/lib/logger/logger.test.ts index 38545d5c6..b6dbf94b6 100644 --- a/server/src/lib/logger/logger.test.ts +++ b/server/src/lib/logger/logger.test.ts @@ -1,5 +1,5 @@ import t from "tap"; -import { CloseMongoConnection } from "../../external/mongo/db"; +import { CloseAllConnections } from "../../test-utils/close-connections"; import CreateLogCtx, { Transports } from "./logger"; t.test("Logger Tests", (t) => { @@ -22,4 +22,4 @@ t.test("Logger Tests", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/lib/score-import/framework/calculated-data/calculated-data.test.ts b/server/src/lib/score-import/framework/calculated-data/calculated-data.test.ts index 100cb474c..24b4e479c 100644 --- a/server/src/lib/score-import/framework/calculated-data/calculated-data.test.ts +++ b/server/src/lib/score-import/framework/calculated-data/calculated-data.test.ts @@ -1,6 +1,6 @@ import Pr from "prudence"; import t from "tap"; -import db, { CloseMongoConnection } from "../../../../external/mongo/db"; +import db from "../../../../external/mongo/db"; import CreateLogCtx from "../../../logger/logger"; import { prAssert } from "../../../../test-utils/asserts"; import { @@ -13,6 +13,7 @@ import { CreateCalculatedData, CalculateLampRating, CalculateRating } from "./ca import deepmerge from "deepmerge"; import ResetDBState from "../../../../test-utils/reset-db-state"; import { GetDefaultTierlist } from "../../../../utils/tierlist"; +import { CloseAllConnections } from "../../../../test-utils/close-connections"; const mockLogger = CreateLogCtx(__filename); @@ -292,4 +293,4 @@ t.test("#CalculateLampRating", async (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/lib/score-import/framework/calculated-data/game-specific-stats.test.ts b/server/src/lib/score-import/framework/calculated-data/game-specific-stats.test.ts index 8647ee051..74f9fe7f1 100644 --- a/server/src/lib/score-import/framework/calculated-data/game-specific-stats.test.ts +++ b/server/src/lib/score-import/framework/calculated-data/game-specific-stats.test.ts @@ -1,5 +1,5 @@ import t from "tap"; -import db, { CloseMongoConnection } from "../../../../external/mongo/db"; +import db from "../../../../external/mongo/db"; import { AnyChartDocument, Difficulties, Lamps, ScoreDocument } from "kamaitachi-common"; import { CalculateBPI, @@ -19,6 +19,7 @@ import { Testing511SPA, TestingIIDXSPDryScore, } from "../../../../test-utils/test-data"; +import { CloseAllConnections } from "../../../../test-utils/close-connections"; t.test("#CalculateBPI", (t) => { t.test("AA BPI tests", (t) => { @@ -312,4 +313,4 @@ t.test("#KaidenPercentile", async (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/lib/score-import/framework/calculated-data/game-specific.test.ts b/server/src/lib/score-import/framework/calculated-data/game-specific.test.ts index 1d7115cb3..871483722 100644 --- a/server/src/lib/score-import/framework/calculated-data/game-specific.test.ts +++ b/server/src/lib/score-import/framework/calculated-data/game-specific.test.ts @@ -1,6 +1,5 @@ import Pr from "prudence"; import t from "tap"; -import { CloseMongoConnection } from "../../../../external/mongo/db"; import CreateLogCtx from "../../../logger/logger"; import { prAssert } from "../../../../test-utils/asserts"; import { @@ -9,6 +8,7 @@ import { TestingSDVXSingleDryScore, } from "../../../../test-utils/test-data"; import { CreateGameSpecific } from "./game-specific"; +import { CloseAllConnections } from "../../../../test-utils/close-connections"; const logger = CreateLogCtx(__filename); /** @@ -127,4 +127,4 @@ t.test("#CreateGameSpecific", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/lib/score-import/framework/common/import-logger.test.ts b/server/src/lib/score-import/framework/common/import-logger.test.ts index 2ca9905ae..d357cd17b 100644 --- a/server/src/lib/score-import/framework/common/import-logger.test.ts +++ b/server/src/lib/score-import/framework/common/import-logger.test.ts @@ -1,7 +1,7 @@ import t from "tap"; import { CreateImportLoggerAndID } from "./import-logger"; import { PublicUserDocument } from "kamaitachi-common"; -import { CloseMongoConnection } from "../../../../external/mongo/db"; +import { CloseAllConnections } from "../../../../test-utils/close-connections"; t.test("#CreateImportLoggerAndID", (t) => { const { importID, logger } = CreateImportLoggerAndID( @@ -19,4 +19,4 @@ t.test("#CreateImportLoggerAndID", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/lib/score-import/framework/goals/goals.test.ts b/server/src/lib/score-import/framework/goals/goals.test.ts index 7c577cbc1..b0e2c8e90 100644 --- a/server/src/lib/score-import/framework/goals/goals.test.ts +++ b/server/src/lib/score-import/framework/goals/goals.test.ts @@ -1,13 +1,7 @@ import t from "tap"; -import db, { CloseMongoConnection } from "../../../../external/mongo/db"; +import db from "../../../../external/mongo/db"; import ResetDBState from "../../../../test-utils/reset-db-state"; -import { - GetRelevantFolderGoals, - GetRelevantGoals, - UpdateGoalsForUser, - GetAndUpdateUsersGoals, - ProcessGoal, -} from "./goals"; +import { GetRelevantFolderGoals, GetRelevantGoals, UpdateGoalsForUser, ProcessGoal } from "./goals"; import { GoalDocument, UserGoalDocument } from "kamaitachi-common"; import { CreateFolderChartLookup } from "../../../../utils/folder"; import { @@ -21,6 +15,7 @@ import { import deepmerge from "deepmerge"; import CreateLogCtx from "../../../logger/logger"; import crypto from "crypto"; +import { CloseAllConnections } from "../../../../test-utils/close-connections"; const logger = CreateLogCtx(__filename); @@ -422,4 +417,4 @@ t.test("#ProcessGoal", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/lib/score-import/framework/milestones/milestones.test.ts b/server/src/lib/score-import/framework/milestones/milestones.test.ts index 96d993535..ab1293db4 100644 --- a/server/src/lib/score-import/framework/milestones/milestones.test.ts +++ b/server/src/lib/score-import/framework/milestones/milestones.test.ts @@ -1,11 +1,12 @@ import t from "tap"; -import db, { CloseMongoConnection } from "../../../../external/mongo/db"; +import db from "../../../../external/mongo/db"; import CreateLogCtx from "../../../logger/logger"; import ResetDBState from "../../../../test-utils/reset-db-state"; import { TestingIIDXSPMilestone } from "../../../../test-utils/test-data"; import { UpdateUsersMilestones } from "./milestones"; import { GoalImportInfo } from "kamaitachi-common"; import deepmerge from "deepmerge"; +import { CloseAllConnections } from "../../../../test-utils/close-connections"; const logger = CreateLogCtx(__filename); @@ -353,4 +354,4 @@ t.test("#UpdateUsersMilestones", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/lib/score-import/framework/pb/create-pb-doc.test.ts b/server/src/lib/score-import/framework/pb/create-pb-doc.test.ts index dbd511144..15ae52fc3 100644 --- a/server/src/lib/score-import/framework/pb/create-pb-doc.test.ts +++ b/server/src/lib/score-import/framework/pb/create-pb-doc.test.ts @@ -1,5 +1,5 @@ import t from "tap"; -import db, { CloseMongoConnection } from "../../../../external/mongo/db"; +import db from "../../../../external/mongo/db"; import ResetDBState from "../../../../test-utils/reset-db-state"; import { GetKTDataJSON, Testing511SPA, TestingIIDXSPScore } from "../../../../test-utils/test-data"; import { CreatePBDoc } from "./create-pb-doc"; @@ -7,6 +7,7 @@ import deepmerge from "deepmerge"; import CreateLogCtx, { KtLogger } from "../../../logger/logger"; import { lamps } from "kamaitachi-common/js/config"; +import { CloseAllConnections } from "../../../../test-utils/close-connections"; let IIDXScore = TestingIIDXSPScore; @@ -169,4 +170,4 @@ t.test("#CreatePBDoc", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/lib/score-import/framework/pb/process-pbs.test.ts b/server/src/lib/score-import/framework/pb/process-pbs.test.ts index bc1f8def7..6eb95b3a8 100644 --- a/server/src/lib/score-import/framework/pb/process-pbs.test.ts +++ b/server/src/lib/score-import/framework/pb/process-pbs.test.ts @@ -1,11 +1,12 @@ import t from "tap"; -import db, { CloseMongoConnection } from "../../../../external/mongo/db"; +import db from "../../../../external/mongo/db"; import CreateLogCtx from "../../../logger/logger"; import ResetDBState from "../../../../test-utils/reset-db-state"; import { Testing511SPA, TestingIIDXSPScore } from "../../../../test-utils/test-data"; import { ProcessPBs } from "./process-pbs"; import deepmerge from "deepmerge"; import crypto from "crypto"; +import { CloseAllConnections } from "../../../../test-utils/close-connections"; const logger = CreateLogCtx(__filename); @@ -58,4 +59,4 @@ t.test("#ProcessPBs", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/lib/score-import/framework/score-importing/insert-score.test.ts b/server/src/lib/score-import/framework/score-importing/insert-score.test.ts index 910519ce6..af1ef9a38 100644 --- a/server/src/lib/score-import/framework/score-importing/insert-score.test.ts +++ b/server/src/lib/score-import/framework/score-importing/insert-score.test.ts @@ -1,6 +1,7 @@ import { ScoreDocument } from "kamaitachi-common"; import t from "tap"; -import db, { CloseMongoConnection } from "../../../../external/mongo/db"; +import db from "../../../../external/mongo/db"; +import { CloseAllConnections } from "../../../../test-utils/close-connections"; import ResetDBState from "../../../../test-utils/reset-db-state"; import { InsertQueue, QueueScoreInsert } from "./insert-score"; @@ -107,4 +108,4 @@ t.test("#QueueScoreInsert, #InsertQueue", async (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/lib/score-import/framework/score-importing/score-id.test.ts b/server/src/lib/score-import/framework/score-importing/score-id.test.ts index 7149e6e31..54b05bccd 100644 --- a/server/src/lib/score-import/framework/score-importing/score-id.test.ts +++ b/server/src/lib/score-import/framework/score-importing/score-id.test.ts @@ -1,6 +1,6 @@ import { ScoreDocument } from "kamaitachi-common"; import t from "tap"; -import { CloseMongoConnection } from "../../../../external/mongo/db"; +import { CloseAllConnections } from "../../../../test-utils/close-connections"; import ResetDBState from "../../../../test-utils/reset-db-state"; import { Testing511SPA, TestingIIDXSPDryScore } from "../../../../test-utils/test-data"; import { CreateScoreID, GetWithScoreID } from "./score-id"; @@ -93,4 +93,4 @@ t.test("#CreateScoreID", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/lib/score-import/framework/user-game-stats/classes.test.ts b/server/src/lib/score-import/framework/user-game-stats/classes.test.ts index 5e17c915f..1d0bca715 100644 --- a/server/src/lib/score-import/framework/user-game-stats/classes.test.ts +++ b/server/src/lib/score-import/framework/user-game-stats/classes.test.ts @@ -1,9 +1,9 @@ import { UserGameStats } from "kamaitachi-common"; import t from "tap"; -import { CloseMongoConnection } from "../../../../external/mongo/db"; import CreateLogCtx from "../../../logger/logger"; import ResetDBState from "../../../../test-utils/reset-db-state"; import { CalculateClassDeltas, UpdateUGSClasses } from "./classes"; +import { CloseAllConnections } from "../../../../test-utils/close-connections"; const logger = CreateLogCtx(__filename); @@ -135,4 +135,4 @@ t.test("#CalculateClassDeltas", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/lib/score-import/framework/user-game-stats/rating.test.ts b/server/src/lib/score-import/framework/user-game-stats/rating.test.ts index 44e4db545..8c53d3888 100644 --- a/server/src/lib/score-import/framework/user-game-stats/rating.test.ts +++ b/server/src/lib/score-import/framework/user-game-stats/rating.test.ts @@ -1,11 +1,12 @@ import t from "tap"; -import db, { CloseMongoConnection } from "../../../../external/mongo/db"; +import db from "../../../../external/mongo/db"; import ResetDBState from "../../../../test-utils/reset-db-state"; import { TestingIIDXSPScorePB } from "../../../../test-utils/test-data"; import { CalculateCustomRatings, CalculateRatings } from "./rating"; import deepmerge from "deepmerge"; import CreateLogCtx from "../../../logger/logger"; import crypto from "crypto"; +import { CloseAllConnections } from "../../../../test-utils/close-connections"; const logger = CreateLogCtx(__filename); @@ -142,4 +143,4 @@ t.test("#CalculateCustomRatings", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/lib/score-import/framework/user-game-stats/update-ugs.test.ts b/server/src/lib/score-import/framework/user-game-stats/update-ugs.test.ts index 429688e30..20e2113f0 100644 --- a/server/src/lib/score-import/framework/user-game-stats/update-ugs.test.ts +++ b/server/src/lib/score-import/framework/user-game-stats/update-ugs.test.ts @@ -1,12 +1,13 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import t from "tap"; -import db, { CloseMongoConnection } from "../../../../external/mongo/db"; +import db from "../../../../external/mongo/db"; import CreateLogCtx from "../../../logger/logger"; import ResetDBState from "../../../../test-utils/reset-db-state"; import { UpdateUsersGamePlaytypeStats } from "./update-ugs"; import deepmerge from "deepmerge"; import crypto from "crypto"; import { TestingIIDXSPScorePB } from "../../../../test-utils/test-data"; +import { CloseAllConnections } from "../../../../test-utils/close-connections"; const logger = CreateLogCtx(__filename); @@ -212,4 +213,4 @@ t.test("#UpdateUsersGamePlaytypeStats", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/lib/score-import/import-types/common/batch-manual/converter.test.ts b/server/src/lib/score-import/import-types/common/batch-manual/converter.test.ts index 5ef8e4168..80cde0cf1 100644 --- a/server/src/lib/score-import/import-types/common/batch-manual/converter.test.ts +++ b/server/src/lib/score-import/import-types/common/batch-manual/converter.test.ts @@ -5,10 +5,10 @@ import { GetKTDataJSON, Testing511Song, Testing511SPA } from "../../../../../tes import { ResolveChartFromSong, ResolveMatchTypeToKTData, ConverterBatchManual } from "./converter"; import deepmerge from "deepmerge"; import { EscapeStringRegexp } from "../../../../../utils/misc"; -import db, { CloseMongoConnection } from "../../../../../external/mongo/db"; import { Game } from "kamaitachi-common"; import ResetDBState from "../../../../../test-utils/reset-db-state"; import { InvalidScoreFailure } from "../../../framework/common/converter-failures"; +import { CloseAllConnections } from "../../../../../test-utils/close-connections"; const baseBatchManualScore = { score: 500, @@ -394,4 +394,4 @@ t.test("#ConverterFn", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/lib/score-import/import-types/common/batch-manual/parser.test.ts b/server/src/lib/score-import/import-types/common/batch-manual/parser.test.ts index 1b206a087..1f6f44914 100644 --- a/server/src/lib/score-import/import-types/common/batch-manual/parser.test.ts +++ b/server/src/lib/score-import/import-types/common/batch-manual/parser.test.ts @@ -1,11 +1,11 @@ import t from "tap"; -import { CloseMongoConnection } from "../../../../../external/mongo/db"; import CreateLogCtx from "../../../../logger/logger"; import ScoreImportFatalError from "../../../framework/score-importing/score-import-error"; import { ParseBatchManualFromObject as ParserFn } from "./parser"; import { BatchManual } from "./types"; import { EscapeStringRegexp } from "../../../../../utils/misc"; import deepmerge from "deepmerge"; +import { CloseAllConnections } from "../../../../../test-utils/close-connections"; const mockErr = (...msg: string[]) => (({ @@ -472,4 +472,4 @@ t.test("#ParserFn", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/lib/score-import/import-types/common/eamusement-iidx-csv/converter.test.ts b/server/src/lib/score-import/import-types/common/eamusement-iidx-csv/converter.test.ts index ee4d4af84..4e76996d8 100644 --- a/server/src/lib/score-import/import-types/common/eamusement-iidx-csv/converter.test.ts +++ b/server/src/lib/score-import/import-types/common/eamusement-iidx-csv/converter.test.ts @@ -1,5 +1,5 @@ import t from "tap"; -import db, { CloseMongoConnection } from "../../../../../external/mongo/db"; +import db from "../../../../../external/mongo/db"; import CreateLogCtx from "../../../../logger/logger"; import ResetDBState from "../../../../../test-utils/reset-db-state"; import ConverterFn, { EamScoreConverter, EamScoreConverterWrapper } from "./converter"; @@ -12,6 +12,7 @@ import { InvalidScoreFailure, KTDataNotFoundFailure, } from "../../../framework/common/converter-failures"; +import { CloseAllConnections } from "../../../../../test-utils/close-connections"; const logger = CreateLogCtx(__filename); @@ -373,4 +374,4 @@ t.todo("#ConverterFn", async (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/lib/score-import/import-types/common/eamusement-iidx-csv/parser.test.ts b/server/src/lib/score-import/import-types/common/eamusement-iidx-csv/parser.test.ts index f6a75f618..7102a5e0a 100644 --- a/server/src/lib/score-import/import-types/common/eamusement-iidx-csv/parser.test.ts +++ b/server/src/lib/score-import/import-types/common/eamusement-iidx-csv/parser.test.ts @@ -2,12 +2,12 @@ import t from "tap"; import CreateLogCtx from "../../../../logger/logger"; import ScoreImportFatalError from "../../../framework/score-importing/score-import-error"; import GenericParseEamIIDXCSV, { NaiveCSVParse, ResolveHeaders } from "./parser"; -import { CloseMongoConnection } from "../../../../../external/mongo/db"; import { TestingIIDXEamusementCSV26, TestingIIDXEamusementCSV27, } from "../../../../../test-utils/test-data"; import { MockMulterFile } from "../../../../../test-utils/mock-multer"; +import { CloseAllConnections } from "../../../../../test-utils/close-connections"; const logger = CreateLogCtx(__filename); @@ -304,4 +304,4 @@ t.test("#ParseEamusementCSV", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/lib/score-import/import-types/file/mer-iidx/converter.test.ts b/server/src/lib/score-import/import-types/file/mer-iidx/converter.test.ts index aadb40a63..ad4290bb9 100644 --- a/server/src/lib/score-import/import-types/file/mer-iidx/converter.test.ts +++ b/server/src/lib/score-import/import-types/file/mer-iidx/converter.test.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import t from "tap"; -import db, { CloseMongoConnection } from "../../../../../external/mongo/db"; +import db from "../../../../../external/mongo/db"; import CreateLogCtx from "../../../../logger/logger"; import ResetDBState from "../../../../../test-utils/reset-db-state"; import { @@ -12,6 +12,7 @@ import { import { ConvertFileMerIIDX } from "./converter"; import deepmerge from "deepmerge"; import { MerScore } from "./types"; +import { CloseAllConnections } from "../../../../../test-utils/close-connections"; const logger = CreateLogCtx(__filename); @@ -136,4 +137,4 @@ t.test("#ConvertFileMerIIDX", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/lib/score-import/import-types/file/mer-iidx/parser.test.ts b/server/src/lib/score-import/import-types/file/mer-iidx/parser.test.ts index 4ce4ebbdd..40e211db2 100644 --- a/server/src/lib/score-import/import-types/file/mer-iidx/parser.test.ts +++ b/server/src/lib/score-import/import-types/file/mer-iidx/parser.test.ts @@ -1,12 +1,12 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import t from "tap"; -import { CloseMongoConnection } from "../../../../../external/mongo/db"; import CreateLogCtx from "../../../../logger/logger"; import { MockMulterFile } from "../../../../../test-utils/mock-multer"; import ResetDBState from "../../../../../test-utils/reset-db-state"; import { GetKTDataBuffer, GetKTDataJSON } from "../../../../../test-utils/test-data"; import { ParseMerIIDX } from "./parser"; import deepmerge from "deepmerge"; +import { CloseAllConnections } from "../../../../../test-utils/close-connections"; const logger = CreateLogCtx(__filename); @@ -143,4 +143,4 @@ t.test("#ParseMerIIDX", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/lib/score-import/import-types/file/solid-state-squad/converter.test.ts b/server/src/lib/score-import/import-types/file/solid-state-squad/converter.test.ts index d51f9199a..0b99aa0b6 100644 --- a/server/src/lib/score-import/import-types/file/solid-state-squad/converter.test.ts +++ b/server/src/lib/score-import/import-types/file/solid-state-squad/converter.test.ts @@ -1,6 +1,5 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import t from "tap"; -import { CloseMongoConnection } from "../../../../../external/mongo/db"; import CreateLogCtx from "../../../../logger/logger"; import ResetDBState from "../../../../../test-utils/reset-db-state"; import { @@ -12,6 +11,7 @@ import { import { ConvertFileS3, ParseDifficulty, ResolveS3Lamp } from "./converter"; import { S3Score } from "./types"; import deepmerge from "deepmerge"; +import { CloseAllConnections } from "../../../../../test-utils/close-connections"; const logger = CreateLogCtx(__filename); @@ -222,4 +222,4 @@ t.test("#ResolveS3Lamp", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/lib/score-import/import-types/file/solid-state-squad/parser.test.ts b/server/src/lib/score-import/import-types/file/solid-state-squad/parser.test.ts index 81637719b..853f29a86 100644 --- a/server/src/lib/score-import/import-types/file/solid-state-squad/parser.test.ts +++ b/server/src/lib/score-import/import-types/file/solid-state-squad/parser.test.ts @@ -1,12 +1,11 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import t from "tap"; -import { GetMilisecondsSince } from "../../../../../utils/misc"; -import { CloseMongoConnection } from "../../../../../external/mongo/db"; import CreateLogCtx from "../../../../logger/logger"; import { MockMulterFile } from "../../../../../test-utils/mock-multer"; import ResetDBState from "../../../../../test-utils/reset-db-state"; import { GetKTDataBuffer } from "../../../../../test-utils/test-data"; import { ParseSolidStateXML } from "./parser"; +import { CloseAllConnections } from "../../../../../test-utils/close-connections"; const logger = CreateLogCtx(__filename); @@ -226,4 +225,4 @@ t.test("#ParseSolidStateXML", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/lib/score-import/import-types/ir/barbatos/converter.test.ts b/server/src/lib/score-import/import-types/ir/barbatos/converter.test.ts index b110eb2b9..936e915fd 100644 --- a/server/src/lib/score-import/import-types/ir/barbatos/converter.test.ts +++ b/server/src/lib/score-import/import-types/ir/barbatos/converter.test.ts @@ -1,10 +1,11 @@ import t from "tap"; -import db, { CloseMongoConnection } from "../../../../../external/mongo/db"; +import db from "../../../../../external/mongo/db"; import ResetDBState from "../../../../../test-utils/reset-db-state"; import CreateLogCtx from "../../../../logger/logger"; import { ConverterIRBarbatos } from "./converter"; import deepmerge from "deepmerge"; import { barbScore } from "../../../../../test-utils/test-data"; +import { CloseAllConnections } from "../../../../../test-utils/close-connections"; const logger = CreateLogCtx(__filename); @@ -111,4 +112,4 @@ t.test("#ConverterIRBarbatos", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/lib/score-import/import-types/ir/barbatos/parser.test.ts b/server/src/lib/score-import/import-types/ir/barbatos/parser.test.ts index 5e07e4ed7..eb1183742 100644 --- a/server/src/lib/score-import/import-types/ir/barbatos/parser.test.ts +++ b/server/src/lib/score-import/import-types/ir/barbatos/parser.test.ts @@ -1,5 +1,5 @@ import t from "tap"; -import { CloseMongoConnection } from "../../../../../external/mongo/db"; +import { CloseAllConnections } from "../../../../../test-utils/close-connections"; import ResetDBState from "../../../../../test-utils/reset-db-state"; import { barbScore } from "../../../../../test-utils/test-data"; import CreateLogCtx from "../../../../logger/logger"; @@ -33,4 +33,4 @@ t.test("#ParseBarbatosSingle", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/lib/score-import/import-types/ir/fervidex-static/class-handler.test.ts b/server/src/lib/score-import/import-types/ir/fervidex-static/class-handler.test.ts index 9132fe5bf..13ec5d7df 100644 --- a/server/src/lib/score-import/import-types/ir/fervidex-static/class-handler.test.ts +++ b/server/src/lib/score-import/import-types/ir/fervidex-static/class-handler.test.ts @@ -1,5 +1,5 @@ import t from "tap"; -import { CloseMongoConnection } from "../../../../../external/mongo/db"; +import { CloseAllConnections } from "../../../../../test-utils/close-connections"; import ResetDBState from "../../../../../test-utils/reset-db-state"; import CreateLogCtx from "../../../../logger/logger"; import { FerStaticClassHandler } from "./class-handler"; @@ -63,4 +63,4 @@ t.test("#FerStaticClassHandler", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/lib/score-import/import-types/ir/fervidex-static/parser.test.ts b/server/src/lib/score-import/import-types/ir/fervidex-static/parser.test.ts index 9f4f80eed..3f81ffaec 100644 --- a/server/src/lib/score-import/import-types/ir/fervidex-static/parser.test.ts +++ b/server/src/lib/score-import/import-types/ir/fervidex-static/parser.test.ts @@ -1,5 +1,5 @@ import t from "tap"; -import { CloseMongoConnection } from "../../../../../external/mongo/db"; +import { CloseAllConnections } from "../../../../../test-utils/close-connections"; import ResetDBState from "../../../../../test-utils/reset-db-state"; import { GetKTDataJSON } from "../../../../../test-utils/test-data"; import CreateLogCtx from "../../../../logger/logger"; @@ -181,4 +181,4 @@ t.test("#ParseFervidexStatic", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/lib/score-import/import-types/ir/fervidex/converter.test.ts b/server/src/lib/score-import/import-types/ir/fervidex/converter.test.ts index 7ff64a1b2..db7131217 100644 --- a/server/src/lib/score-import/import-types/ir/fervidex/converter.test.ts +++ b/server/src/lib/score-import/import-types/ir/fervidex/converter.test.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import t from "tap"; -import db, { CloseMongoConnection } from "../../../../../external/mongo/db"; +import db from "../../../../../external/mongo/db"; import CreateLogCtx from "../../../../logger/logger"; import ResetDBState from "../../../../../test-utils/reset-db-state"; import { GetKTDataJSON, Testing511Song, Testing511SPA } from "../../../../../test-utils/test-data"; @@ -15,6 +15,7 @@ import { } from "./converter"; import { FervidexScore } from "./types"; import deepmerge from "deepmerge"; +import { CloseAllConnections } from "../../../../../test-utils/close-connections"; const logger = CreateLogCtx(__filename); @@ -225,4 +226,4 @@ t.test("#ConverterIRFervidex", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/lib/score-import/import-types/ir/usc/converter.test.ts b/server/src/lib/score-import/import-types/ir/usc/converter.test.ts index 29f9637f5..e91e8cd17 100644 --- a/server/src/lib/score-import/import-types/ir/usc/converter.test.ts +++ b/server/src/lib/score-import/import-types/ir/usc/converter.test.ts @@ -1,11 +1,12 @@ import t from "tap"; -import db, { CloseMongoConnection } from "../../../../../external/mongo/db"; +import db from "../../../../../external/mongo/db"; import { ConverterIRUSC, DeriveLamp, DeriveNoteMod } from "./converter"; import d from "deepmerge"; import { uscChart, uscScore } from "../../../../../test-utils/test-data"; import CreateLogCtx from "../../../../logger/logger"; import ResetDBState from "../../../../../test-utils/reset-db-state"; import { USCClientScore } from "../../../../../server/router/ir/usc/usc"; +import { CloseAllConnections } from "../../../../../test-utils/close-connections"; const logger = CreateLogCtx(__filename); @@ -122,4 +123,4 @@ t.test("#ConverterIRUSC", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/lib/score-import/import-types/ir/usc/parser.test.ts b/server/src/lib/score-import/import-types/ir/usc/parser.test.ts index fe82396b3..684d4a1d4 100644 --- a/server/src/lib/score-import/import-types/ir/usc/parser.test.ts +++ b/server/src/lib/score-import/import-types/ir/usc/parser.test.ts @@ -1,5 +1,5 @@ import t from "tap"; -import { CloseMongoConnection } from "../../../../../external/mongo/db"; +import { CloseAllConnections } from "../../../../../test-utils/close-connections"; import { uscChart, uscScore } from "../../../../../test-utils/test-data"; import CreateLogCtx from "../../../../logger/logger"; import { ParseIRUSC } from "./parser"; @@ -37,4 +37,4 @@ t.test("#ParseIRUSC", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/server/router/api/v1/auth/auth.test.ts b/server/src/server/router/api/v1/auth/auth.test.ts index 9806eff67..6985f29ac 100644 --- a/server/src/server/router/api/v1/auth/auth.test.ts +++ b/server/src/server/router/api/v1/auth/auth.test.ts @@ -1,8 +1,9 @@ import { CreateInviteCode, AddNewInvite, ReinstateInvite, ValidateCaptcha } from "./auth"; import t from "tap"; -import db, { CloseMongoConnection } from "../../../../../external/mongo/db"; +import db from "../../../../../external/mongo/db"; import ResetDBState from "../../../../../test-utils/reset-db-state"; import { MockFetch } from "../../../../../test-utils/mock-fetch"; +import { CloseAllConnections } from "../../../../../test-utils/close-connections"; t.test("#ReinstateInvite", (t) => { t.beforeEach(ResetDBState); @@ -74,4 +75,4 @@ t.test("#ValidateCaptcha", async (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/server/router/ir/beatoraja/auth.test.ts b/server/src/server/router/ir/beatoraja/auth.test.ts index ba6a97496..c95d2a675 100644 --- a/server/src/server/router/ir/beatoraja/auth.test.ts +++ b/server/src/server/router/ir/beatoraja/auth.test.ts @@ -1,9 +1,9 @@ import t from "tap"; import { ValidateAuthToken, ValidateIRClientVersion } from "./auth"; import expMiddlewareMock from "express-request-mock"; -import { CloseMongoConnection } from "../../../../external/mongo/db"; import ResetDBState from "../../../../test-utils/reset-db-state"; import { SYMBOL_KtchiData } from "../../../../lib/constants/ktchi"; +import { CloseAllConnections } from "../../../../test-utils/close-connections"; t.test("#ValidateIRClientVersion", (t) => { t.test("Should reject clients that are not supported", async (t) => { @@ -117,4 +117,4 @@ t.test("#ValidateAuthToken", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/server/router/ir/beatoraja/charts/convert-scores.test.ts b/server/src/server/router/ir/beatoraja/charts/convert-scores.test.ts index 4c6efab2a..184552180 100644 --- a/server/src/server/router/ir/beatoraja/charts/convert-scores.test.ts +++ b/server/src/server/router/ir/beatoraja/charts/convert-scores.test.ts @@ -1,11 +1,12 @@ import t from "tap"; -import db, { CloseMongoConnection } from "../../../../../external/mongo/db"; +import db from "../../../../../external/mongo/db"; import ResetDBState from "../../../../../test-utils/reset-db-state"; import { GetKTDataJSON } from "../../../../../test-utils/test-data"; import { KtchiPBScoreToBeatorajaFormat } from "./convert-scores"; import { ScoreDocument, PBScoreDocument } from "kamaitachi-common"; import { Random20Hex } from "../../../../../utils/misc"; import deepmerge from "deepmerge"; +import { CloseAllConnections } from "../../../../../test-utils/close-connections"; const gazerChart = GetKTDataJSON("./kamaitachi/bms-gazer-chart.json"); @@ -187,4 +188,4 @@ t.test("#KtchiPBScoreToBeatorajaFormat", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/server/router/ir/usc/usc.test.ts b/server/src/server/router/ir/usc/usc.test.ts index d69390e4d..00f7351f4 100644 --- a/server/src/server/router/ir/usc/usc.test.ts +++ b/server/src/server/router/ir/usc/usc.test.ts @@ -1,10 +1,11 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import t from "tap"; -import db, { CloseMongoConnection } from "../../../../external/mongo/db"; +import db from "../../../../external/mongo/db"; import ResetDBState from "../../../../test-utils/reset-db-state"; import { CreatePOSTScoresResponseBody, KtchiScoreToServerScore } from "./usc"; import { ChartDocument, PBScoreDocument, ScoreDocument } from "kamaitachi-common"; import deepmerge from "deepmerge"; +import { CloseAllConnections } from "../../../../test-utils/close-connections"; const mockScorePB: PBScoreDocument<"usc:Single"> = { chartID: "USC_CHART_ID", @@ -419,4 +420,4 @@ t.test("#CreatePOSTScoresResponseBody", async (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/utils/db.test.ts b/server/src/utils/db.test.ts index 98533ccb8..98a417f83 100644 --- a/server/src/utils/db.test.ts +++ b/server/src/utils/db.test.ts @@ -1,7 +1,8 @@ import { GetNextCounterValue } from "./db"; import t from "tap"; -import db, { CloseMongoConnection } from "../external/mongo/db"; +import db from "../external/mongo/db"; import ResetDBState from "../test-utils/reset-db-state"; +import { CloseAllConnections } from "../test-utils/close-connections"; t.test("#GetNextCounterValue", (t) => { t.beforeEach(ResetDBState); @@ -27,4 +28,4 @@ t.test("#GetNextCounterValue", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/utils/folder.test.ts b/server/src/utils/folder.test.ts index 7d60e4946..b8564116f 100644 --- a/server/src/utils/folder.test.ts +++ b/server/src/utils/folder.test.ts @@ -8,9 +8,10 @@ import { GetFolderCharts, ResolveFolderToCharts, } from "./folder"; -import db, { CloseMongoConnection } from "../external/mongo/db"; +import db from "../external/mongo/db"; import ResetDBState from "../test-utils/reset-db-state"; import deepmerge from "deepmerge"; +import { CloseAllConnections } from "../test-utils/close-connections"; const logger = CreateLogCtx(__filename); @@ -208,4 +209,4 @@ t.test("#GetFolderChartIDs", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/utils/goal.test.ts b/server/src/utils/goal.test.ts index 4a338428c..62dc20db1 100644 --- a/server/src/utils/goal.test.ts +++ b/server/src/utils/goal.test.ts @@ -1,5 +1,5 @@ import t from "tap"; -import db, { CloseMongoConnection } from "../external/mongo/db"; +import db from "../external/mongo/db"; import CreateLogCtx from "../lib/logger/logger"; import ResetDBState from "../test-utils/reset-db-state"; import { EvaluateGoalForUser } from "./goal"; @@ -12,6 +12,7 @@ import { TestingIIDXSPScorePB, } from "../test-utils/test-data"; import { CreateFolderChartLookup } from "./folder"; +import { CloseAllConnections } from "../test-utils/close-connections"; const logger = CreateLogCtx(__filename); @@ -296,4 +297,4 @@ t.test("#EvaluateGoalForUser", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/utils/session.test.ts b/server/src/utils/session.test.ts index d1793ede0..4c11aec2c 100644 --- a/server/src/utils/session.test.ts +++ b/server/src/utils/session.test.ts @@ -1,5 +1,6 @@ import t from "tap"; -import db, { CloseMongoConnection } from "../external/mongo/db"; +import db from "../external/mongo/db"; +import { CloseAllConnections } from "../test-utils/close-connections"; import ResetDBState from "../test-utils/reset-db-state"; import { GetScoresFromSession } from "./session"; @@ -27,4 +28,4 @@ t.test("#GetScoresFromSession", async (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); diff --git a/server/src/utils/user.test.ts b/server/src/utils/user.test.ts index 4eceec9c9..502368eb7 100644 --- a/server/src/utils/user.test.ts +++ b/server/src/utils/user.test.ts @@ -1,9 +1,9 @@ import t from "tap"; -import { CloseMongoConnection } from "../external/mongo/db"; import { PRUDENCE_PRIVATE_USER, PRUDENCE_PUBLIC_USER } from "../external/mongo/schemas"; import { prAssert } from "../test-utils/asserts"; import { GetUserCaseInsensitive, PRIVATEINFO_GetUserCaseInsensitive, FormatUserDoc } from "./user"; import { PublicUserDocument } from "kamaitachi-common"; +import { CloseAllConnections } from "../test-utils/close-connections"; t.test("#GetUserCaseInsensitive", (t) => { t.test("Should return the user for an exact username", async (t) => { @@ -85,4 +85,4 @@ t.test("#FormatUserDoc", (t) => { t.end(); }); -t.teardown(CloseMongoConnection); +t.teardown(CloseAllConnections); From 47dc0584f89fbe2ed212fb6e1483aafaf0b35938 Mon Sep 17 00:00:00 2001 From: zkldi Date: Sat, 29 May 2021 10:56:43 +0100 Subject: [PATCH 5/5] fix bug in classes.ts --- .../src/lib/score-import/framework/user-game-stats/classes.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/src/lib/score-import/framework/user-game-stats/classes.ts b/server/src/lib/score-import/framework/user-game-stats/classes.ts index 626142bb1..f1aa06564 100644 --- a/server/src/lib/score-import/framework/user-game-stats/classes.ts +++ b/server/src/lib/score-import/framework/user-game-stats/classes.ts @@ -156,6 +156,8 @@ export function CalculateClassDeltas( } RedisPub("class-update", { userID, ...delta }); + + deltas.push(delta); } } catch (err) { logger.error(err);