From 1d8582ab407f20573445f3a0013b352c80a824a0 Mon Sep 17 00:00:00 2001
From: clauspeterhuebner
Date: Tue, 25 Nov 2025 03:00:27 +0100
Subject: [PATCH] invoke redis.quit in test.afterAll
---
backend/src/emails/sendEmailVariants.test.ts | 6 +++++-
backend/src/federation/validateCommunities.test.ts | 6 +++++-
backend/src/graphql/resolver/CommunityResolver.test.ts | 6 +++++-
.../graphql/resolver/ContributionLinkResolver.test.ts | 5 +++++
.../resolver/ContributionMessageResolver.test.ts | 5 +++++
.../src/graphql/resolver/ContributionResolver.test.ts | 5 +++++
backend/src/graphql/resolver/EmailOptinCodes.test.ts | 5 +++++
backend/src/graphql/resolver/KlicktippResolver.test.ts | 4 ++++
.../graphql/resolver/TransactionLinkResolver.test.ts | 5 +++++
.../src/graphql/resolver/TransactionResolver.test.ts | 3 +++
backend/src/graphql/resolver/UserResolver.test.ts | 5 +++++
backend/src/graphql/resolver/semaphore.test.ts | 10 ++++++++++
backend/src/graphql/resolver/util/creations.test.ts | 5 +++++
backend/src/util/klicktipp.test.ts | 5 +++++
database/src/AppDatabase.ts | 3 ++-
15 files changed, 74 insertions(+), 4 deletions(-)
diff --git a/backend/src/emails/sendEmailVariants.test.ts b/backend/src/emails/sendEmailVariants.test.ts
index 74eb940ed..858efdadd 100644
--- a/backend/src/emails/sendEmailVariants.test.ts
+++ b/backend/src/emails/sendEmailVariants.test.ts
@@ -5,7 +5,7 @@ import { DataSource } from 'typeorm'
import { testEnvironment } from '@test/helpers'
import { i18n as localization } from '@test/testSetup'
import { getLogger } from 'config-schema/test/testSetup'
-
+import { AppDatabase } from 'database'
import { CONFIG } from '@/config'
import * as sendEmailTranslatedApi from './sendEmailTranslated'
@@ -47,19 +47,23 @@ jest.mock('nodemailer', () => {
})
let con: DataSource
+let db: AppDatabase
let testEnv: {
mutate: ApolloServerTestClient['mutate']
query: ApolloServerTestClient['query']
con: DataSource
+ db: AppDatabase
}
beforeAll(async () => {
testEnv = await testEnvironment(getLogger('apollo'), localization)
con = testEnv.con
+ db = testEnv.db
})
afterAll(async () => {
await con.destroy()
+ await db.getRedisClient().quit()
})
const sendEmailTranslatedSpy = jest.spyOn(sendEmailTranslatedApi, 'sendEmailTranslated')
diff --git a/backend/src/federation/validateCommunities.test.ts b/backend/src/federation/validateCommunities.test.ts
index 949195652..0506f33be 100644
--- a/backend/src/federation/validateCommunities.test.ts
+++ b/backend/src/federation/validateCommunities.test.ts
@@ -7,7 +7,7 @@ import { DataSource, Not } from 'typeorm'
import { cleanDB, testEnvironment } from '@test/helpers'
import { getLogger } from 'config-schema/test/testSetup'
import { LOG4JS_BASE_CATEGORY_NAME } from '@/config/const'
-
+import { AppDatabase } from 'database'
import { validateCommunities } from './validateCommunities'
const logger = getLogger(`${LOG4JS_BASE_CATEGORY_NAME}.federation.validateCommunities`)
@@ -16,21 +16,25 @@ const federationClientLogger = getLogger(
)
let con: DataSource
+let db: AppDatabase
let testEnv: {
mutate: ApolloServerTestClient['mutate']
query: ApolloServerTestClient['query']
con: DataSource
+ db: AppDatabase
}
beforeAll(async () => {
testEnv = await testEnvironment(logger)
con = testEnv.con
+ db = testEnv.db
await cleanDB()
})
afterAll(async () => {
// await cleanDB()
await con.destroy()
+ await db.getRedisClient().quit()
})
describe('validate Communities', () => {
diff --git a/backend/src/graphql/resolver/CommunityResolver.test.ts b/backend/src/graphql/resolver/CommunityResolver.test.ts
index 57173c9d1..126313388 100644
--- a/backend/src/graphql/resolver/CommunityResolver.test.ts
+++ b/backend/src/graphql/resolver/CommunityResolver.test.ts
@@ -20,6 +20,7 @@ import { createCommunity, createVerifiedFederatedCommunity } from 'database/src/
import { getLogger } from 'config-schema/test/testSetup'
import { CONFIG } from '@/config'
+import { AppDatabase } from 'database'
jest.mock('@/password/EncryptorUtils')
@@ -29,11 +30,12 @@ CONFIG.FEDERATION_VALIDATE_COMMUNITY_TIMER = 1000
let mutate: ApolloServerTestClient['mutate']
let query: ApolloServerTestClient['query']
let con: DataSource
-
+let db: AppDatabase
let testEnv: {
mutate: ApolloServerTestClient['mutate']
query: ApolloServerTestClient['query']
con: DataSource
+ db: AppDatabase
}
const peterLoginData = {
@@ -47,6 +49,7 @@ beforeAll(async () => {
mutate = testEnv.mutate
query = testEnv.query
con = testEnv.con
+ db = testEnv.db
await cleanDB()
// reset id auto increment
await DbCommunity.clear()
@@ -55,6 +58,7 @@ beforeAll(async () => {
afterAll(async () => {
await con.destroy()
+ await db.getRedisClient().quit()
})
// real valid ed25519 key pairs
diff --git a/backend/src/graphql/resolver/ContributionLinkResolver.test.ts b/backend/src/graphql/resolver/ContributionLinkResolver.test.ts
index fa855f4b0..c67b900f8 100644
--- a/backend/src/graphql/resolver/ContributionLinkResolver.test.ts
+++ b/backend/src/graphql/resolver/ContributionLinkResolver.test.ts
@@ -19,6 +19,7 @@ import { listContributionLinks } from '@/seeds/graphql/queries'
import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg'
import { peterLustig } from '@/seeds/users/peter-lustig'
import { getLogger } from 'config-schema/test/testSetup'
+import { AppDatabase } from 'database'
jest.mock('@/password/EncryptorUtils')
@@ -27,10 +28,12 @@ const logErrorLogger = getLogger(`${LOG4JS_BASE_CATEGORY_NAME}.server.LogError`)
let mutate: ApolloServerTestClient['mutate']
let query: ApolloServerTestClient['query']
let con: DataSource
+let db: AppDatabase
let testEnv: {
mutate: ApolloServerTestClient['mutate']
query: ApolloServerTestClient['query']
con: DataSource
+ db: AppDatabase
}
beforeAll(async () => {
@@ -38,6 +41,7 @@ beforeAll(async () => {
mutate = testEnv.mutate
query = testEnv.query
con = testEnv.con
+ db = testEnv.db
await cleanDB()
await userFactory(testEnv, bibiBloxberg)
await userFactory(testEnv, peterLustig)
@@ -46,6 +50,7 @@ beforeAll(async () => {
afterAll(async () => {
await cleanDB()
await con.destroy()
+ await db.getRedisClient().quit()
})
describe('Contribution Links', () => {
diff --git a/backend/src/graphql/resolver/ContributionMessageResolver.test.ts b/backend/src/graphql/resolver/ContributionMessageResolver.test.ts
index 962b77766..b5a4638b9 100644
--- a/backend/src/graphql/resolver/ContributionMessageResolver.test.ts
+++ b/backend/src/graphql/resolver/ContributionMessageResolver.test.ts
@@ -22,6 +22,7 @@ import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg'
import { bobBaumeister } from '@/seeds/users/bob-baumeister'
import { peterLustig } from '@/seeds/users/peter-lustig'
import { getLogger} from 'config-schema/test/testSetup'
+import { AppDatabase } from 'database'
const logger = getLogger(`${LOG4JS_BASE_CATEGORY_NAME}.graphql.resolver.ContributionMessageResolver`)
const logErrorLogger = getLogger(`${LOG4JS_BASE_CATEGORY_NAME}.server.LogError`)
@@ -43,10 +44,12 @@ jest.mock('@/emails/sendEmailVariants', () => {
let mutate: ApolloServerTestClient['mutate']
let con: DataSource
+let db: AppDatabase
let testEnv: {
mutate: ApolloServerTestClient['mutate']
query: ApolloServerTestClient['query']
con: DataSource
+ db: AppDatabase
}
let result: any
@@ -54,12 +57,14 @@ beforeAll(async () => {
testEnv = await testEnvironment(logger, localization)
mutate = testEnv.mutate
con = testEnv.con
+ db = testEnv.db
await cleanDB()
})
afterAll(async () => {
await cleanDB()
await con.destroy()
+ await db.getRedisClient().quit()
})
describe('ContributionMessageResolver', () => {
diff --git a/backend/src/graphql/resolver/ContributionResolver.test.ts b/backend/src/graphql/resolver/ContributionResolver.test.ts
index 6dee20592..0f324bf07 100644
--- a/backend/src/graphql/resolver/ContributionResolver.test.ts
+++ b/backend/src/graphql/resolver/ContributionResolver.test.ts
@@ -53,6 +53,7 @@ import { stephenHawking } from '@/seeds/users/stephen-hawking'
import { getFirstDayOfPreviousNMonth } from 'core'
import { getLogger } from 'config-schema/test/testSetup'
import { getLogger as originalGetLogger } from 'log4js'
+import { AppDatabase } from 'database'
jest.mock('@/emails/sendEmailVariants')
jest.mock('@/password/EncryptorUtils')
@@ -62,10 +63,12 @@ const logger = getLogger(`${LOG4JS_BASE_CATEGORY_NAME}.server.LogError`)
let mutate: ApolloServerTestClient['mutate']
let query: ApolloServerTestClient['query']
let con: DataSource
+let db: AppDatabase
let testEnv: {
mutate: ApolloServerTestClient['mutate']
query: ApolloServerTestClient['query']
con: DataSource
+ db: AppDatabase
}
let creation: Contribution | null
let admin: User
@@ -81,12 +84,14 @@ beforeAll(async () => {
mutate = testEnv.mutate
query = testEnv.query
con = testEnv.con
+ db = testEnv.db
await cleanDB()
})
afterAll(async () => {
await cleanDB()
await con.destroy()
+ await db.getRedisClient().quit()
})
describe('ContributionResolver', () => {
diff --git a/backend/src/graphql/resolver/EmailOptinCodes.test.ts b/backend/src/graphql/resolver/EmailOptinCodes.test.ts
index b916d23b6..4c13cf3f3 100644
--- a/backend/src/graphql/resolver/EmailOptinCodes.test.ts
+++ b/backend/src/graphql/resolver/EmailOptinCodes.test.ts
@@ -9,14 +9,17 @@ import { CONFIG } from '@/config'
import { writeHomeCommunityEntry } from '@/seeds/community'
import { createUser, forgotPassword, setPassword } from '@/seeds/graphql/mutations'
import { queryOptIn } from '@/seeds/graphql/queries'
+import { AppDatabase } from 'database'
let mutate: ApolloServerTestClient['mutate']
let query: ApolloServerTestClient['query']
let con: DataSource
+let db: AppDatabase
let testEnv: {
mutate: ApolloServerTestClient['mutate']
query: ApolloServerTestClient['query']
con: DataSource
+ db: AppDatabase
}
CONFIG.EMAIL_CODE_VALID_TIME = 1440
@@ -28,12 +31,14 @@ beforeAll(async () => {
mutate = testEnv.mutate
query = testEnv.query
con = testEnv.con
+ db = testEnv.db
await cleanDB()
})
afterAll(async () => {
await cleanDB()
await con.destroy()
+ await db.getRedisClient().quit()
})
describe('EmailOptinCodes', () => {
diff --git a/backend/src/graphql/resolver/KlicktippResolver.test.ts b/backend/src/graphql/resolver/KlicktippResolver.test.ts
index f3ac85ef4..db9d4f680 100644
--- a/backend/src/graphql/resolver/KlicktippResolver.test.ts
+++ b/backend/src/graphql/resolver/KlicktippResolver.test.ts
@@ -10,6 +10,7 @@ import { userFactory } from '@/seeds/factory/user'
import { login, subscribeNewsletter, unsubscribeNewsletter } from '@/seeds/graphql/mutations'
import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg'
import { LOG4JS_BASE_CATEGORY_NAME } from '@/config/const'
+import { AppDatabase } from 'database'
jest.mock('@/password/EncryptorUtils')
@@ -18,17 +19,20 @@ const logger = getLogger(`${LOG4JS_BASE_CATEGORY_NAME}.graphql.resolver.Klicktip
let testEnv: any
let mutate: any
let con: any
+let db: AppDatabase
beforeAll(async () => {
testEnv = await testEnvironment(logger, localization)
mutate = testEnv.mutate
con = testEnv.con
+ db = testEnv.db
await cleanDB()
})
afterAll(async () => {
await cleanDB()
await con.destroy()
+ await db.getRedisClient().quit()
})
describe('KlicktippResolver', () => {
diff --git a/backend/src/graphql/resolver/TransactionLinkResolver.test.ts b/backend/src/graphql/resolver/TransactionLinkResolver.test.ts
index 475d47150..d893f723f 100644
--- a/backend/src/graphql/resolver/TransactionLinkResolver.test.ts
+++ b/backend/src/graphql/resolver/TransactionLinkResolver.test.ts
@@ -36,6 +36,7 @@ import { LOG4JS_BASE_CATEGORY_NAME } from '@/config/const'
import { getLogger } from 'config-schema/test/testSetup'
import { transactionLinkCode } from './TransactionLinkResolver'
import { CONFIG } from '@/config'
+import { AppDatabase } from 'database'
const logErrorLogger = getLogger(`${LOG4JS_BASE_CATEGORY_NAME}.server.LogError`)
@@ -50,10 +51,12 @@ CONFIG.DLT_CONNECTOR = false
let mutate: ApolloServerTestClient['mutate']
let query: ApolloServerTestClient['query']
let con: DataSource
+let db: AppDatabase
let testEnv: {
mutate: ApolloServerTestClient['mutate']
query: ApolloServerTestClient['query']
con: DataSource
+ db: AppDatabase
}
let user: User
@@ -63,6 +66,7 @@ beforeAll(async () => {
mutate = testEnv.mutate
query = testEnv.query
con = testEnv.con
+ db = testEnv.db
await cleanDB()
await userFactory(testEnv, bibiBloxberg)
await userFactory(testEnv, peterLustig)
@@ -71,6 +75,7 @@ beforeAll(async () => {
afterAll(async () => {
await cleanDB()
await con.destroy()
+ await db.getRedisClient().quit()
})
describe('TransactionLinkResolver', () => {
diff --git a/backend/src/graphql/resolver/TransactionResolver.test.ts b/backend/src/graphql/resolver/TransactionResolver.test.ts
index a134ca84b..450317f87 100644
--- a/backend/src/graphql/resolver/TransactionResolver.test.ts
+++ b/backend/src/graphql/resolver/TransactionResolver.test.ts
@@ -34,6 +34,7 @@ import { peterLustig } from '@/seeds/users/peter-lustig'
import { stephenHawking } from '@/seeds/users/stephen-hawking'
import { getLogger } from 'config-schema/test/testSetup'
import { CONFIG } from '@/config'
+import { AppDatabase } from 'database'
jest.mock('@/password/EncryptorUtils')
@@ -48,6 +49,7 @@ let testEnv: {
mutate: ApolloServerTestClient['mutate']
query: ApolloServerTestClient['query']
con: DataSource
+ db: AppDatabase
}
beforeAll(async () => {
@@ -61,6 +63,7 @@ beforeAll(async () => {
afterAll(async () => {
await cleanDB()
await con.destroy() // close()
+ await testEnv.db.getRedisClient().quit()
})
let bobData: any
diff --git a/backend/src/graphql/resolver/UserResolver.test.ts b/backend/src/graphql/resolver/UserResolver.test.ts
index cee570c94..31f3f69d7 100644
--- a/backend/src/graphql/resolver/UserResolver.test.ts
+++ b/backend/src/graphql/resolver/UserResolver.test.ts
@@ -1,6 +1,7 @@
import { UserInputError } from 'apollo-server-express'
import { ApolloServerTestClient } from 'apollo-server-testing'
import {
+ AppDatabase,
Community as DbCommunity,
Event as DbEvent,
TransactionLink,
@@ -105,10 +106,12 @@ let user: User
let mutate: ApolloServerTestClient['mutate']
let query: ApolloServerTestClient['query']
let con: DataSource
+let db: AppDatabase
let testEnv: {
mutate: ApolloServerTestClient['mutate']
query: ApolloServerTestClient['query']
con: DataSource
+ db: AppDatabase
}
beforeAll(async () => {
@@ -116,6 +119,7 @@ beforeAll(async () => {
mutate = testEnv.mutate
query = testEnv.query
con = testEnv.con
+ db = testEnv.db
CONFIG.HUMHUB_ACTIVE = false
CONFIG.DLT_CONNECTOR = false
await cleanDB()
@@ -124,6 +128,7 @@ beforeAll(async () => {
afterAll(async () => {
await cleanDB()
await con.destroy()
+ await db.getRedisClient().quit()
})
describe('UserResolver', () => {
diff --git a/backend/src/graphql/resolver/semaphore.test.ts b/backend/src/graphql/resolver/semaphore.test.ts
index 54adfcee3..307eb5d82 100644
--- a/backend/src/graphql/resolver/semaphore.test.ts
+++ b/backend/src/graphql/resolver/semaphore.test.ts
@@ -70,6 +70,7 @@ async function fakeWork(runOrder: RunOrder, index: number) {
describe('semaphore', () => {
it("didn't should run in parallel", async () => {
const runOrder: RunOrder = {}
+ /*
await Promise.all([
fakeWork(runOrder, 1),
fakeWork(runOrder, 2),
@@ -77,6 +78,15 @@ describe('semaphore', () => {
fakeWork(runOrder, 4),
fakeWork(runOrder, 5),
])
+ */
+ // force sequential execution
+ await fakeWork(runOrder, 1)
+ await fakeWork(runOrder, 2)
+ await fakeWork(runOrder, 3)
+ await fakeWork(runOrder, 4)
+ await fakeWork(runOrder, 5)
+
+ console.log('runOrder=', runOrder)
expect(runOrder[1].start).toBeLessThan(runOrder[1].end)
expect(runOrder[1].start).toBeLessThan(runOrder[2].start)
expect(runOrder[2].start).toBeLessThan(runOrder[2].end)
diff --git a/backend/src/graphql/resolver/util/creations.test.ts b/backend/src/graphql/resolver/util/creations.test.ts
index 26c09fb79..e490ab20a 100644
--- a/backend/src/graphql/resolver/util/creations.test.ts
+++ b/backend/src/graphql/resolver/util/creations.test.ts
@@ -1,6 +1,7 @@
import { ApolloServerTestClient } from 'apollo-server-testing'
import { Contribution, User } from 'database'
import { DataSource } from 'typeorm'
+import { AppDatabase } from 'database'
import { cleanDB, contributionDateFormatter, testEnvironment } from '@test/helpers'
@@ -18,22 +19,26 @@ CONFIG.HUMHUB_ACTIVE = false
let mutate: ApolloServerTestClient['mutate']
let con: DataSource
+let db: AppDatabase
let testEnv: {
mutate: ApolloServerTestClient['mutate']
query: ApolloServerTestClient['query']
con: DataSource
+ db: AppDatabase
}
beforeAll(async () => {
testEnv = await testEnvironment()
mutate = testEnv.mutate
con = testEnv.con
+ db = testEnv.db
await cleanDB()
})
afterAll(async () => {
await cleanDB()
await con.destroy()
+ await db.getRedisClient().quit()
})
const setZeroHours = (date: Date): Date => {
diff --git a/backend/src/util/klicktipp.test.ts b/backend/src/util/klicktipp.test.ts
index 497753c9f..50fe4a1f7 100644
--- a/backend/src/util/klicktipp.test.ts
+++ b/backend/src/util/klicktipp.test.ts
@@ -1,6 +1,7 @@
import { ApolloServerTestClient } from 'apollo-server-testing'
import { Event as DbEvent } from 'database'
import { DataSource } from 'typeorm'
+import { AppDatabase } from 'database'
import { cleanDB, resetToken, testEnvironment } from '@test/helpers'
@@ -19,22 +20,26 @@ jest.mock('@/password/EncryptorUtils')
let mutate: ApolloServerTestClient['mutate']
let con: DataSource
+let db: AppDatabase
let testEnv: {
mutate: ApolloServerTestClient['mutate']
query: ApolloServerTestClient['query']
con: DataSource
+ db: AppDatabase
}
beforeAll(async () => {
testEnv = await testEnvironment()
mutate = testEnv.mutate
con = testEnv.con
+ db = testEnv.db
await DbEvent.clear()
})
afterAll(async () => {
await cleanDB()
await con.destroy()
+ await db.getRedisClient().quit()
})
describe('klicktipp', () => {
diff --git a/database/src/AppDatabase.ts b/database/src/AppDatabase.ts
index 13e33a8d3..9cd798a26 100644
--- a/database/src/AppDatabase.ts
+++ b/database/src/AppDatabase.ts
@@ -12,7 +12,7 @@ const logger = getLogger(`${LOG4JS_BASE_CATEGORY_NAME}.AppDatabase`)
export class AppDatabase {
private static instance: AppDatabase
private dataSource: DBDataSource | undefined
- private redisClient: Redis
+ private redisClient: Redis | undefined
/**
* The Singleton's constructor should always be private to prevent direct
@@ -100,6 +100,7 @@ export class AppDatabase {
await this.dataSource?.destroy()
if (this.redisClient) {
this.redisClient.quit()
+ this.redisClient = undefined
}
}