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 } }