From 4da0f8d0f7994b21d5fb0ad01ce31b6bfc5b95be Mon Sep 17 00:00:00 2001 From: elweyn Date: Thu, 11 May 2023 10:03:42 +0200 Subject: [PATCH 1/2] First steps for testing klicktipp external scripts. --- backend/src/util/klicktipp.test.ts | 75 ++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 backend/src/util/klicktipp.test.ts diff --git a/backend/src/util/klicktipp.test.ts b/backend/src/util/klicktipp.test.ts new file mode 100644 index 000000000..9972c570d --- /dev/null +++ b/backend/src/util/klicktipp.test.ts @@ -0,0 +1,75 @@ +/* eslint-disable @typescript-eslint/no-unsafe-return */ +/* eslint-disable @typescript-eslint/no-unsafe-call */ +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ +/* eslint-disable @typescript-eslint/no-unsafe-assignment */ +import { Connection } from '@dbTools/typeorm' +import { Event as DbEvent } from '@entity/Event' +import { ApolloServerTestClient } from 'apollo-server-testing' + +import { testEnvironment, cleanDB, resetToken } from '@test/helpers' + +import { addFieldsToSubscriber } from '@/apis/KlicktippController' +import { creations } from '@/seeds/creation' +import { creationFactory } from '@/seeds/factory/creation' +import { userFactory } from '@/seeds/factory/user' +import { login } from '@/seeds/graphql/mutations' +import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' + +import { exportEventDataToKlickTipp } from './klicktipp' + +jest.mock('@/apis/KlicktippController', () => { + const originalModule = jest.requireActual('@/apis/KlicktippController') + return { + __esModule: true, + ...originalModule, + getKlickTippUser: jest.fn((email) => originalModule.getKlickTippUser(email)), + addFieldsToSubscriber: jest.fn((email, a) => originalModule.addFieldsToSubscriber(email, a)), + } +}) + +let mutate: ApolloServerTestClient['mutate'], + query: ApolloServerTestClient['query'], + con: Connection +let testEnv: { + mutate: ApolloServerTestClient['mutate'] + query: ApolloServerTestClient['query'] + con: Connection +} + +beforeAll(async () => { + testEnv = await testEnvironment() + mutate = testEnv.mutate + query = testEnv.query + con = testEnv.con + await DbEvent.clear() +}) + +afterAll(async () => { + await cleanDB() + await con.close() +}) + +describe('klicktipp', () => { + beforeAll(async () => { + await userFactory(testEnv, bibiBloxberg) + const bibisCreation = creations.find((creation) => creation.email === 'bibi@bloxberg.de') + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + await creationFactory(testEnv, bibisCreation!) + await mutate({ + mutation: login, + variables: { email: 'bibi@bloxberg.de', password: 'Aa12345_' }, + }) + void exportEventDataToKlickTipp() + }) + + afterAll(async () => { + await cleanDB() + resetToken() + }) + + describe('exportEventDataToKlickTipp', () => { + it('calls the KlicktippController', () => { + expect(addFieldsToSubscriber).toBeCalled() + }) + }) +}) From 10c0cf8370050aaba7c229f4e9c486e60ece2c15 Mon Sep 17 00:00:00 2001 From: elweyn Date: Fri, 12 May 2023 18:23:36 +0200 Subject: [PATCH 2/2] Test for the klicktipp tag export. --- backend/src/util/klicktipp.test.ts | 16 ++++++++++++++-- backend/src/util/klicktipp.ts | 21 ++++++++++++++------- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/backend/src/util/klicktipp.test.ts b/backend/src/util/klicktipp.test.ts index 9972c570d..d6416a2f0 100644 --- a/backend/src/util/klicktipp.test.ts +++ b/backend/src/util/klicktipp.test.ts @@ -14,6 +14,8 @@ import { creationFactory } from '@/seeds/factory/creation' import { userFactory } from '@/seeds/factory/user' import { login } from '@/seeds/graphql/mutations' import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' +import { peterLustig } from '@/seeds/users/peter-lustig' +import { connection } from '@/typeorm/connection' import { exportEventDataToKlickTipp } from './klicktipp' @@ -27,6 +29,15 @@ jest.mock('@/apis/KlicktippController', () => { } }) +// jest.mock('@/typeorm/connection', () => { +// const originalModule = jest.requireActual('@/typeorm/connection') +// return { +// __esModule: true, +// ...originalModule, +// connection: jest.fn(() => Promise.resolve(con)), +// } +// }) + let mutate: ApolloServerTestClient['mutate'], query: ApolloServerTestClient['query'], con: Connection @@ -52,6 +63,7 @@ afterAll(async () => { describe('klicktipp', () => { beforeAll(async () => { await userFactory(testEnv, bibiBloxberg) + await userFactory(testEnv, peterLustig) const bibisCreation = creations.find((creation) => creation.email === 'bibi@bloxberg.de') // eslint-disable-next-line @typescript-eslint/no-non-null-assertion await creationFactory(testEnv, bibisCreation!) @@ -59,11 +71,11 @@ describe('klicktipp', () => { mutation: login, variables: { email: 'bibi@bloxberg.de', password: 'Aa12345_' }, }) + await con.close() void exportEventDataToKlickTipp() }) - afterAll(async () => { - await cleanDB() + afterAll(() => { resetToken() }) diff --git a/backend/src/util/klicktipp.ts b/backend/src/util/klicktipp.ts index f6c631205..ff5828c15 100644 --- a/backend/src/util/klicktipp.ts +++ b/backend/src/util/klicktipp.ts @@ -1,4 +1,5 @@ // eslint-disable @typescript-eslint/no-explicit-any +import { Connection } from '@dbTools/typeorm' import { User } from '@entity/User' import { getKlickTippUser, addFieldsToSubscriber } from '@/apis/KlicktippController' @@ -39,29 +40,35 @@ async function klickTippSendFieldToUser( } } +function getMyConnection(): Promise { + return connection() +} + export async function exportEventDataToKlickTipp(): Promise { - const connectionInstance = await connection() + const connectionInstance = await getMyConnection() if (!connectionInstance) { throw new LogError('No connection to database') } const lastLoginEvents = await lastDateTimeEvents(EventType.USER_LOGIN) - void klickTippSendFieldToUser(lastLoginEvents, 'field186060') + await klickTippSendFieldToUser(lastLoginEvents, 'field186060') const registeredEvents = await lastDateTimeEvents(EventType.USER_ACTIVATE_ACCOUNT) - void klickTippSendFieldToUser(registeredEvents, 'field186061') + await klickTippSendFieldToUser(registeredEvents, 'field186061') const receiveTransactionEvents = await lastDateTimeEvents(EventType.TRANSACTION_RECEIVE) - void klickTippSendFieldToUser(receiveTransactionEvents, 'field185674') + await klickTippSendFieldToUser(receiveTransactionEvents, 'field185674') const contributionCreateEvents = await lastDateTimeEvents(EventType.TRANSACTION_SEND) - void klickTippSendFieldToUser(contributionCreateEvents, 'field185673') + await klickTippSendFieldToUser(contributionCreateEvents, 'field185673') const linkRedeemedEvents = await lastDateTimeEvents(EventType.TRANSACTION_LINK_REDEEM) - void klickTippSendFieldToUser(linkRedeemedEvents, 'field185676') + await klickTippSendFieldToUser(linkRedeemedEvents, 'field185676') const confirmContributionEvents = await lastDateTimeEvents(EventType.ADMIN_CONTRIBUTION_CONFIRM) - void klickTippSendFieldToUser(confirmContributionEvents, 'field185675') + await klickTippSendFieldToUser(confirmContributionEvents, 'field185675') + + await connectionInstance.close() } void exportEventDataToKlickTipp() // void retrieveNotRegisteredEmails()