From c6ff91b29ca4915dd4c16bc5a1fbdd2a643e5c70 Mon Sep 17 00:00:00 2001 From: elweyn Date: Fri, 24 Mar 2023 08:52:27 +0100 Subject: [PATCH 01/26] feat(backend): add event for subscribe&unsubscribe --- backend/src/event/EventType.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/backend/src/event/EventType.ts b/backend/src/event/EventType.ts index b219a49ba..7b1fc2dc9 100644 --- a/backend/src/event/EventType.ts +++ b/backend/src/event/EventType.ts @@ -18,8 +18,10 @@ export enum EventType { REDEEM_REGISTER = 'REDEEM_REGISTER', SEND_ACCOUNT_MULTIREGISTRATION_EMAIL = 'SEND_ACCOUNT_MULTIREGISTRATION_EMAIL', SEND_CONFIRMATION_EMAIL = 'SEND_CONFIRMATION_EMAIL', + SUBSCRIBE_NEWSLETTER = 'SUBSCRIBE_NEWSLETTER', TRANSACTION_SEND = 'TRANSACTION_SEND', TRANSACTION_RECEIVE = 'TRANSACTION_RECEIVE', + UNSUBSCRIBE_NEWSLETTER = 'UNSUBSCRIBE_NEWSLETTER', // VISIT_GRADIDO = 'VISIT_GRADIDO', // VERIFY_REDEEM = 'VERIFY_REDEEM', // INACTIVE_ACCOUNT = 'INACTIVE_ACCOUNT', From 7e838389a73a7a2726c238dbfc9d1ef5c8dcf51f Mon Sep 17 00:00:00 2001 From: elweyn Date: Fri, 24 Mar 2023 08:56:33 +0100 Subject: [PATCH 02/26] Event for subscribe newsletter --- backend/src/event/EVENT_SUBSCRIBE_NEWSLETTER.ts | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 backend/src/event/EVENT_SUBSCRIBE_NEWSLETTER.ts diff --git a/backend/src/event/EVENT_SUBSCRIBE_NEWSLETTER.ts b/backend/src/event/EVENT_SUBSCRIBE_NEWSLETTER.ts new file mode 100644 index 000000000..f4207d059 --- /dev/null +++ b/backend/src/event/EVENT_SUBSCRIBE_NEWSLETTER.ts @@ -0,0 +1,6 @@ +import { User as DbUser } from '@entity/User' +import { Event as DbEvent } from '@entity/Event' +import { Event, EventType } from './Event' + +export const EVENT_SUBSCRIBE_NEWSLETTER = async (user: DbUser): Promise => + Event(EventType.SUBSCRIBE_NEWSLETTER, user, user).save() From f8549ba208c3257fe7ecb19bd26d01ebc956f8f4 Mon Sep 17 00:00:00 2001 From: elweyn Date: Fri, 24 Mar 2023 08:56:53 +0100 Subject: [PATCH 03/26] Event for unsubscribe newsletter --- backend/src/event/EVENT_UNSUBSCRIBE_NEWSLETTER.ts | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 backend/src/event/EVENT_UNSUBSCRIBE_NEWSLETTER.ts diff --git a/backend/src/event/EVENT_UNSUBSCRIBE_NEWSLETTER.ts b/backend/src/event/EVENT_UNSUBSCRIBE_NEWSLETTER.ts new file mode 100644 index 000000000..6a6946e3f --- /dev/null +++ b/backend/src/event/EVENT_UNSUBSCRIBE_NEWSLETTER.ts @@ -0,0 +1,6 @@ +import { User as DbUser } from '@entity/User' +import { Event as DbEvent } from '@entity/Event' +import { Event, EventType } from './Event' + +export const EVENT_UNSUBSCRIBE_NEWSLETTER = async (user: DbUser): Promise => + Event(EventType.UNSUBSCRIBE_NEWSLETTER, user, user).save() From 04e6d7abeb6e3f56b741e72dfcc405664aad49b4 Mon Sep 17 00:00:00 2001 From: elweyn Date: Fri, 24 Mar 2023 08:58:02 +0100 Subject: [PATCH 04/26] Add new defined events to Event --- backend/src/event/Event.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/backend/src/event/Event.ts b/backend/src/event/Event.ts index 2e7cca6af..4d6f47674 100644 --- a/backend/src/event/Event.ts +++ b/backend/src/event/Event.ts @@ -53,5 +53,7 @@ export { EVENT_LOGIN } from './EVENT_LOGIN' export { EVENT_REGISTER } from './EVENT_REGISTER' export { EVENT_SEND_ACCOUNT_MULTIREGISTRATION_EMAIL } from './EVENT_SEND_ACCOUNT_MULTIREGISTRATION_EMAIL' export { EVENT_SEND_CONFIRMATION_EMAIL } from './EVENT_SEND_CONFIRMATION_EMAIL' +export { EVENT_SUBSCRIBE_NEWSLETTER } from './EVENT_SUBSCRIBE_NEWSLETTER' export { EVENT_TRANSACTION_SEND } from './EVENT_TRANSACTION_SEND' export { EVENT_TRANSACTION_RECEIVE } from './EVENT_TRANSACTION_RECEIVE' +export { EVENT_UNSUBSCRIBE_NEWSLETTER } from './EVENT_UNSUBSCRIBE_NEWSLETTER' From 1945570146609c4e41c77db8d0fbbadd97db2cb4 Mon Sep 17 00:00:00 2001 From: elweyn Date: Fri, 24 Mar 2023 08:58:32 +0100 Subject: [PATCH 05/26] Call new Events --- backend/src/graphql/resolver/KlicktippResolver.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/backend/src/graphql/resolver/KlicktippResolver.ts b/backend/src/graphql/resolver/KlicktippResolver.ts index 661aeb4a6..10be59363 100644 --- a/backend/src/graphql/resolver/KlicktippResolver.ts +++ b/backend/src/graphql/resolver/KlicktippResolver.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-return */ import { Resolver, Query, Authorized, Arg, Mutation, Ctx } from 'type-graphql' @@ -7,6 +8,7 @@ import { unsubscribe, klicktippSignIn, } from '@/apis/KlicktippController' +import { EVENT_UNSUBSCRIBE_NEWSLETTER, EVENT_SUBSCRIBE_NEWSLETTER } from '@/event/Event' import { RIGHTS } from '@/auth/RIGHTS' import { Context, getUser } from '@/server/context' @@ -28,6 +30,7 @@ export class KlicktippResolver { @Mutation(() => Boolean) async unsubscribeNewsletter(@Ctx() context: Context): Promise { const user = getUser(context) + await EVENT_UNSUBSCRIBE_NEWSLETTER(user) return await unsubscribe(user.emailContact.email) } @@ -38,6 +41,7 @@ export class KlicktippResolver { @Ctx() context: Context, ): Promise { const user = getUser(context) + await EVENT_SUBSCRIBE_NEWSLETTER(user) return await klicktippSignIn(user.emailContact.email, language) } } From b2f0bf37d2d80e0d714fd97451a1621621d6ca1f Mon Sep 17 00:00:00 2001 From: elweyn Date: Thu, 30 Mar 2023 16:28:18 +0200 Subject: [PATCH 06/26] Refactor klicktippcontroller to not call function --- backend/src/apis/KlicktippController.ts | 27 +++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/backend/src/apis/KlicktippController.ts b/backend/src/apis/KlicktippController.ts index a291bb945..3646b174d 100644 --- a/backend/src/apis/KlicktippController.ts +++ b/backend/src/apis/KlicktippController.ts @@ -15,6 +15,9 @@ export const klicktippSignIn = async ( firstName?: string, lastName?: string, ): Promise => { + if (!CONFIG.KLICKTIPP) { + return true + } const fields = { fieldFirstName: firstName, fieldLastName: lastName, @@ -25,12 +28,18 @@ export const klicktippSignIn = async ( } export const signout = async (email: string, language: string): Promise => { + if (!CONFIG.KLICKTIPP) { + return true + } const apiKey = language === 'de' ? CONFIG.KLICKTIPP_APIKEY_DE : CONFIG.KLICKTIPP_APIKEY_EN const result = await klicktippConnector.signoff(apiKey, email) return result } export const unsubscribe = async (email: string): Promise => { + if (!CONFIG.KLICKTIPP) { + return true + } const isLogin = await loginKlicktippUser() if (isLogin) { return await klicktippConnector.unsubscribe(email) @@ -39,6 +48,9 @@ export const unsubscribe = async (email: string): Promise => { } export const getKlickTippUser = async (email: string): Promise => { + if (!CONFIG.KLICKTIPP) { + return true + } const isLogin = await loginKlicktippUser() if (isLogin) { const subscriberId = await klicktippConnector.subscriberSearch(email) @@ -49,14 +61,23 @@ export const getKlickTippUser = async (email: string): Promise => { } export const loginKlicktippUser = async (): Promise => { + if (!CONFIG.KLICKTIPP) { + return true + } return await klicktippConnector.login(CONFIG.KLICKTIPP_USER, CONFIG.KLICKTIPP_PASSWORD) } export const logoutKlicktippUser = async (): Promise => { + if (!CONFIG.KLICKTIPP) { + return true + } return await klicktippConnector.logout() } export const untagUser = async (email: string, tagId: string): Promise => { + if (!CONFIG.KLICKTIPP) { + return true + } const isLogin = await loginKlicktippUser() if (isLogin) { return await klicktippConnector.untag(email, tagId) @@ -65,6 +86,9 @@ export const untagUser = async (email: string, tagId: string): Promise } export const tagUser = async (email: string, tagIds: string): Promise => { + if (!CONFIG.KLICKTIPP) { + return true + } const isLogin = await loginKlicktippUser() if (isLogin) { return await klicktippConnector.tag(email, tagIds) @@ -73,6 +97,9 @@ export const tagUser = async (email: string, tagIds: string): Promise = } export const getKlicktippTagMap = async () => { + if (!CONFIG.KLICKTIPP) { + return '' + } const isLogin = await loginKlicktippUser() if (isLogin) { return await klicktippConnector.tagIndex() From ada9f9a056d15bcbfa99b0adcffd60954c647754 Mon Sep 17 00:00:00 2001 From: elweyn Date: Thu, 30 Mar 2023 16:28:38 +0200 Subject: [PATCH 07/26] Remove not used function rights. --- backend/src/auth/RIGHTS.ts | 2 -- backend/src/auth/ROLES.ts | 2 -- 2 files changed, 4 deletions(-) diff --git a/backend/src/auth/RIGHTS.ts b/backend/src/auth/RIGHTS.ts index f643295de..e373a1097 100644 --- a/backend/src/auth/RIGHTS.ts +++ b/backend/src/auth/RIGHTS.ts @@ -5,8 +5,6 @@ export enum RIGHTS { COMMUNITIES = 'COMMUNITIES', LIST_GDT_ENTRIES = 'LIST_GDT_ENTRIES', EXIST_PID = 'EXIST_PID', - GET_KLICKTIPP_USER = 'GET_KLICKTIPP_USER', - GET_KLICKTIPP_TAG_MAP = 'GET_KLICKTIPP_TAG_MAP', UNSUBSCRIBE_NEWSLETTER = 'UNSUBSCRIBE_NEWSLETTER', SUBSCRIBE_NEWSLETTER = 'SUBSCRIBE_NEWSLETTER', TRANSACTION_LIST = 'TRANSACTION_LIST', diff --git a/backend/src/auth/ROLES.ts b/backend/src/auth/ROLES.ts index 2f3b4e081..d576385e1 100644 --- a/backend/src/auth/ROLES.ts +++ b/backend/src/auth/ROLES.ts @@ -9,8 +9,6 @@ export const ROLE_USER = new Role('user', [ RIGHTS.BALANCE, RIGHTS.LIST_GDT_ENTRIES, RIGHTS.EXIST_PID, - RIGHTS.GET_KLICKTIPP_USER, - RIGHTS.GET_KLICKTIPP_TAG_MAP, RIGHTS.UNSUBSCRIBE_NEWSLETTER, RIGHTS.SUBSCRIBE_NEWSLETTER, RIGHTS.TRANSACTION_LIST, From 04c6756ef473ba978b838d2bbe826589ea4f8c77 Mon Sep 17 00:00:00 2001 From: elweyn Date: Thu, 30 Mar 2023 16:29:05 +0200 Subject: [PATCH 08/26] Remove check on CONFIG.KLICKTIPP --- backend/src/middleware/klicktippMiddleware.ts | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/backend/src/middleware/klicktippMiddleware.ts b/backend/src/middleware/klicktippMiddleware.ts index 0469b4ccc..bc11f6ad7 100644 --- a/backend/src/middleware/klicktippMiddleware.ts +++ b/backend/src/middleware/klicktippMiddleware.ts @@ -3,9 +3,8 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/restrict-template-expressions */ import { MiddlewareFn } from 'type-graphql' -import { /* klicktippSignIn, */ getKlickTippUser } from '@/apis/KlicktippController' +import { getKlickTippUser } from '@/apis/KlicktippController' import { KlickTipp } from '@model/KlickTipp' -import CONFIG from '@/config' import { klickTippLogger as logger } from '@/server/logger' // export const klicktippRegistrationMiddleware: MiddlewareFn = async ( @@ -28,15 +27,13 @@ export const klicktippNewsletterStateMiddleware: MiddlewareFn = async ( ) => { const result = await next() let klickTipp = new KlickTipp({ status: 'Unsubscribed' }) - if (CONFIG.KLICKTIPP) { - try { - const klickTippUser = await getKlickTippUser(result.email) - if (klickTippUser) { - klickTipp = new KlickTipp(klickTippUser) - } - } catch (err) { - logger.error(`There is no user for (email='${result.email}') ${err}`) + try { + const klickTippUser = await getKlickTippUser(result.email) + if (klickTippUser) { + klickTipp = new KlickTipp(klickTippUser) } + } catch (err) { + logger.error(`There is no user for (email='${result.email}') ${err}`) } result.klickTipp = klickTipp return result From ff7a73048cc84882aea31c85f42b28efa5c7cd8c Mon Sep 17 00:00:00 2001 From: elweyn Date: Thu, 30 Mar 2023 16:29:35 +0200 Subject: [PATCH 09/26] Correct mutations in testing --- backend/src/seeds/graphql/mutations.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/src/seeds/graphql/mutations.ts b/backend/src/seeds/graphql/mutations.ts index 1aa12a32f..1523f9621 100644 --- a/backend/src/seeds/graphql/mutations.ts +++ b/backend/src/seeds/graphql/mutations.ts @@ -1,14 +1,14 @@ import gql from 'graphql-tag' export const subscribeNewsletter = gql` - mutation ($email: String!, $language: String!) { - subscribeNewsletter(email: $email, language: $language) + mutation { + subscribeNewsletter } ` export const unsubscribeNewsletter = gql` - mutation ($email: String!) { - unsubscribeNewsletter(email: $email) + mutation { + unsubscribeNewsletter } ` From e1c6764978c010f7cd58a4de807c22c5178464c6 Mon Sep 17 00:00:00 2001 From: elweyn Date: Thu, 30 Mar 2023 16:30:11 +0200 Subject: [PATCH 10/26] Remove unused queries --- .../src/graphql/resolver/KlicktippResolver.ts | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/backend/src/graphql/resolver/KlicktippResolver.ts b/backend/src/graphql/resolver/KlicktippResolver.ts index 19720cc09..1c3438bde 100644 --- a/backend/src/graphql/resolver/KlicktippResolver.ts +++ b/backend/src/graphql/resolver/KlicktippResolver.ts @@ -1,10 +1,6 @@ -/* eslint-disable @typescript-eslint/no-unsafe-call */ -/* eslint-disable @typescript-eslint/no-unsafe-return */ -import { Resolver, Query, Authorized, Arg, Mutation, Ctx } from 'type-graphql' +import { Resolver, Authorized, Mutation, Ctx } from 'type-graphql' import { - getKlickTippUser, - getKlicktippTagMap, unsubscribe, klicktippSignIn, } from '@/apis/KlicktippController' @@ -14,18 +10,6 @@ import { Context, getUser } from '@/server/context' @Resolver() export class KlicktippResolver { - @Authorized([RIGHTS.GET_KLICKTIPP_USER]) - @Query(() => String) - async getKlicktippUser(@Arg('email') email: string): Promise { - return await getKlickTippUser(email) - } - - @Authorized([RIGHTS.GET_KLICKTIPP_TAG_MAP]) - @Query(() => String) - async getKlicktippTagMap(): Promise { - return await getKlicktippTagMap() - } - @Authorized([RIGHTS.UNSUBSCRIBE_NEWSLETTER]) @Mutation(() => Boolean) async unsubscribeNewsletter(@Ctx() context: Context): Promise { From 54e912f028faaad20bfb01cb4b712245989059c4 Mon Sep 17 00:00:00 2001 From: elweyn Date: Thu, 30 Mar 2023 16:30:44 +0200 Subject: [PATCH 11/26] Add unit tests for KlicktippResolver --- .../resolver/KlicktippResolver.test.ts | 134 ++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 backend/src/graphql/resolver/KlicktippResolver.test.ts diff --git a/backend/src/graphql/resolver/KlicktippResolver.test.ts b/backend/src/graphql/resolver/KlicktippResolver.test.ts new file mode 100644 index 000000000..860444b88 --- /dev/null +++ b/backend/src/graphql/resolver/KlicktippResolver.test.ts @@ -0,0 +1,134 @@ +import { cleanDB, resetToken, testEnvironment } from '@test/helpers' +import { userFactory } from '@/seeds/factory/user' +import { logger, i18n as localization } from '@test/testSetup' +import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' +import { login, subscribeNewsletter, unsubscribeNewsletter } from '@/seeds/graphql/mutations' +import { GraphQLError } from 'graphql' +import { UserContact } from '@entity/UserContact' +import { Event as DbEvent } from '@entity/Event' +import { EventType } from '@/event/Event' + +let testEnv: any, mutate: any, query: any, con: any + +beforeAll(async () => { + testEnv = await testEnvironment(logger, localization) + mutate = testEnv.mutate + query = testEnv.query + con = testEnv.con + await cleanDB() +}) + +afterAll(async () => { + await cleanDB() + await con.close() +}) + +describe('KlicktippResolver', () => { + let bibi + + beforeAll(async () => { + bibi = await userFactory(testEnv, bibiBloxberg) + }) + + afterAll(async () => { + await cleanDB() + }) + + describe('subscribeNewsletter', () => { + describe('unauthenticated', () => { + it('returns an error', async () => { + const { errors: errorObjects }: { errors: [GraphQLError] } = await mutate({ + mutation: subscribeNewsletter, + }) + + expect(errorObjects).toEqual([new GraphQLError('401 Unauthorized')]) + }) + }) + + describe('authenticated', () => { + beforeAll(async () => { + await mutate({ + mutation: login, + variables: { email: 'bibi@bloxberg.de', password: 'Aa12345_' }, + }) + }) + + afterAll(() => { + resetToken() + }) + + it('calls API', async () => { + const { + data: { subscribeNewsletter: isSubscribed }, + }: { data: { subscribeNewsletter: boolean } } = await mutate({ + mutation: subscribeNewsletter, + }) + + expect(isSubscribed).toEqual(true) + }) + + it('stores the SUBSCRIBE_NEWSLETTER event in the database', async () => { + const userConatct = await UserContact.findOneOrFail( + { email: 'bibi@bloxberg.de' }, + { relations: ['user'] }, + ) + await expect(DbEvent.find()).resolves.toContainEqual( + expect.objectContaining({ + type: EventType.SUBSCRIBE_NEWSLETTER, + affectedUserId: userConatct.user.id, + actingUserId: userConatct.user.id, + }), + ) + }) + }) + }) + + describe('unsubscribeNewsletter', () => { + describe('unauthenticated', () => { + it('returns an error', async () => { + const { errors: errorObjects }: { errors: [GraphQLError] } = await mutate({ + mutation: unsubscribeNewsletter, + }) + + expect(errorObjects).toEqual([new GraphQLError('401 Unauthorized')]) + }) + }) + + describe('authenticated', () => { + beforeAll(async () => { + await mutate({ + mutation: login, + variables: { email: 'bibi@bloxberg.de', password: 'Aa12345_' }, + }) + }) + + afterAll(() => { + resetToken() + }) + + it('calls API', async () => { + const { + data: { unsubscribeNewsletter: isUnsubscribed }, + }: { data: { unsubscribeNewsletter: boolean } } = await mutate({ + mutation: unsubscribeNewsletter, + }) + + expect(isUnsubscribed).toEqual(true) + }) + + it('stores the UNSUBSCRIBE_NEWSLETTER event in the database', async () => { + const userConatct = await UserContact.findOneOrFail( + { email: 'bibi@bloxberg.de' }, + { relations: ['user'] }, + ) + await expect(DbEvent.find()).resolves.toContainEqual( + expect.objectContaining({ + type: EventType.UNSUBSCRIBE_NEWSLETTER, + affectedUserId: userConatct.user.id, + actingUserId: userConatct.user.id, + }), + ) + }) + }) + }) +}) From 8c3a847af6bf84a471def4f579fc404e189a50de Mon Sep 17 00:00:00 2001 From: elweyn Date: Thu, 30 Mar 2023 16:31:02 +0200 Subject: [PATCH 12/26] Linting --- backend/src/graphql/resolver/KlicktippResolver.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/backend/src/graphql/resolver/KlicktippResolver.ts b/backend/src/graphql/resolver/KlicktippResolver.ts index 1c3438bde..e03e81440 100644 --- a/backend/src/graphql/resolver/KlicktippResolver.ts +++ b/backend/src/graphql/resolver/KlicktippResolver.ts @@ -1,9 +1,6 @@ import { Resolver, Authorized, Mutation, Ctx } from 'type-graphql' -import { - unsubscribe, - klicktippSignIn, -} from '@/apis/KlicktippController' +import { unsubscribe, klicktippSignIn } from '@/apis/KlicktippController' import { EVENT_UNSUBSCRIBE_NEWSLETTER, EVENT_SUBSCRIBE_NEWSLETTER } from '@/event/Event' import { RIGHTS } from '@/auth/RIGHTS' import { Context, getUser } from '@/server/context' From c07582d5a1a55518433a313716fb965f148e305b Mon Sep 17 00:00:00 2001 From: elweyn Date: Thu, 30 Mar 2023 16:44:17 +0200 Subject: [PATCH 13/26] Merge & linting --- .../src/emails/sendEmailTranslated.test.ts | 2 +- backend/src/emails/sendEmailVariants.test.ts | 4 ++-- backend/src/event/Event.ts | 2 +- .../federation/validateCommunities.test.ts | 2 +- backend/src/graphql/model/Transaction.ts | 2 +- .../src/graphql/resolver/BalanceResolver.ts | 5 ++-- .../resolver/CommunityResolver.test.ts | 2 +- .../resolver/ContributionLinkResolver.test.ts | 2 +- .../resolver/ContributionLinkResolver.ts | 14 +++++------ .../resolver/ContributionResolver.test.ts | 24 +++++++++---------- .../graphql/resolver/ContributionResolver.ts | 20 ++++++++-------- .../resolver/KlicktippResolver.test.ts | 6 ++--- .../resolver/TransactionLinkResolver.test.ts | 6 ++--- .../resolver/TransactionLinkResolver.ts | 10 ++++---- .../resolver/TransactionResolver.test.ts | 4 ++-- .../graphql/resolver/TransactionResolver.ts | 10 ++++---- .../src/graphql/resolver/UserResolver.test.ts | 4 ++-- backend/src/graphql/resolver/UserResolver.ts | 17 +++++++------ .../src/graphql/resolver/semaphore.test.ts | 2 +- .../graphql/resolver/util/creations.test.ts | 2 +- .../src/graphql/resolver/util/creations.ts | 2 +- backend/src/middleware/klicktippMiddleware.ts | 2 +- backend/src/password/EncryptorUtils.ts | 2 +- backend/src/seeds/factory/contributionLink.ts | 2 +- backend/src/server/LogError.test.ts | 2 +- backend/src/util/communityUser.ts | 2 +- backend/src/util/decay.ts | 2 +- backend/src/util/validate.ts | 4 ++-- backend/src/util/virtualTransactions.ts | 2 +- e2e-tests/yarn.lock | 10 ++++---- 30 files changed, 84 insertions(+), 86 deletions(-) diff --git a/backend/src/emails/sendEmailTranslated.test.ts b/backend/src/emails/sendEmailTranslated.test.ts index 762b88cf0..f2fae2746 100644 --- a/backend/src/emails/sendEmailTranslated.test.ts +++ b/backend/src/emails/sendEmailTranslated.test.ts @@ -1,8 +1,8 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/unbound-method */ import { createTransport } from 'nodemailer' -import { sendEmailTranslated } from './sendEmailTranslated' import { logger, i18n } from '@test/testSetup' +import { sendEmailTranslated } from './sendEmailTranslated' import CONFIG from '@/config' CONFIG.EMAIL = false diff --git a/backend/src/emails/sendEmailVariants.test.ts b/backend/src/emails/sendEmailVariants.test.ts index 399ed89ac..3c8d22f95 100644 --- a/backend/src/emails/sendEmailVariants.test.ts +++ b/backend/src/emails/sendEmailVariants.test.ts @@ -4,6 +4,8 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ import { Decimal } from 'decimal.js-light' +import { testEnvironment } from '@test/helpers' +import { logger, i18n as localization } from '@test/testSetup' import { sendAddedContributionMessageEmail, sendAccountActivationEmail, @@ -16,8 +18,6 @@ import { sendTransactionReceivedEmail, } from './sendEmailVariants' import { sendEmailTranslated } from './sendEmailTranslated' -import { testEnvironment } from '@test/helpers' -import { logger, i18n as localization } from '@test/testSetup' import CONFIG from '@/config' let con: any diff --git a/backend/src/event/Event.ts b/backend/src/event/Event.ts index bfeba6d50..e2a5c0090 100644 --- a/backend/src/event/Event.ts +++ b/backend/src/event/Event.ts @@ -57,7 +57,7 @@ export { EVENT_EMAIL_ACCOUNT_MULTIREGISTRATION } from './EVENT_EMAIL_ACCOUNT_MUL export { EVENT_EMAIL_ADMIN_CONFIRMATION } from './EVENT_EMAIL_ADMIN_CONFIRMATION' export { EVENT_EMAIL_CONFIRMATION } from './EVENT_EMAIL_CONFIRMATION' export { EVENT_EMAIL_FORGOT_PASSWORD } from './EVENT_EMAIL_FORGOT_PASSWORD' -export { EVENT_SEND_CONFIRMATION_EMAIL } from './EVENT_SEND_CONFIRMATION_EMAIL' +export { EVENT_SUBSCRIBE_NEWSLETTER } from './EVENT_SUBSCRIBE_NEWSLETTER' export { EVENT_TRANSACTION_SEND } from './EVENT_TRANSACTION_SEND' export { EVENT_TRANSACTION_RECEIVE } from './EVENT_TRANSACTION_RECEIVE' export { EVENT_TRANSACTION_LINK_CREATE } from './EVENT_TRANSACTION_LINK_CREATE' diff --git a/backend/src/federation/validateCommunities.test.ts b/backend/src/federation/validateCommunities.test.ts index a99bb3274..57d9bd65f 100644 --- a/backend/src/federation/validateCommunities.test.ts +++ b/backend/src/federation/validateCommunities.test.ts @@ -6,9 +6,9 @@ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import { Community as DbCommunity } from '@entity/Community' -import { validateCommunities } from './validateCommunities' import { logger } from '@test/testSetup' import { testEnvironment, cleanDB } from '@test/helpers' +import { validateCommunities } from './validateCommunities' let con: any let testEnv: any diff --git a/backend/src/graphql/model/Transaction.ts b/backend/src/graphql/model/Transaction.ts index 8f0d1eadc..9e2be85dd 100644 --- a/backend/src/graphql/model/Transaction.ts +++ b/backend/src/graphql/model/Transaction.ts @@ -1,9 +1,9 @@ import { ObjectType, Field, Int } from 'type-graphql' import { Transaction as dbTransaction } from '@entity/Transaction' import { Decimal } from 'decimal.js-light' +import { TransactionTypeId } from '@enum/TransactionTypeId' import { Decay } from './Decay' import { User } from './User' -import { TransactionTypeId } from '@enum/TransactionTypeId' @ObjectType() export class Transaction { diff --git a/backend/src/graphql/resolver/BalanceResolver.ts b/backend/src/graphql/resolver/BalanceResolver.ts index 7600f12b9..520b8c094 100644 --- a/backend/src/graphql/resolver/BalanceResolver.ts +++ b/backend/src/graphql/resolver/BalanceResolver.ts @@ -6,11 +6,10 @@ import { getCustomRepository } from '@dbTools/typeorm' import { Transaction as dbTransaction } from '@entity/Transaction' import { TransactionLink as dbTransactionLink } from '@entity/TransactionLink' +import { TransactionLinkRepository } from '@repository/TransactionLink' +import { Balance } from '@model/Balance' import { GdtResolver } from './GdtResolver' import { getLastTransaction } from './util/getLastTransaction' -import { TransactionLinkRepository } from '@repository/TransactionLink' - -import { Balance } from '@model/Balance' import { backendLogger as logger } from '@/server/logger' import { Context, getUser } from '@/server/context' diff --git a/backend/src/graphql/resolver/CommunityResolver.test.ts b/backend/src/graphql/resolver/CommunityResolver.test.ts index f4352c095..5513a73b8 100644 --- a/backend/src/graphql/resolver/CommunityResolver.test.ts +++ b/backend/src/graphql/resolver/CommunityResolver.test.ts @@ -6,8 +6,8 @@ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import { Community as DbCommunity } from '@entity/Community' -import { getCommunities } from '@/seeds/graphql/queries' import { testEnvironment } from '@test/helpers' +import { getCommunities } from '@/seeds/graphql/queries' let query: any diff --git a/backend/src/graphql/resolver/ContributionLinkResolver.test.ts b/backend/src/graphql/resolver/ContributionLinkResolver.test.ts index 6a69e257e..7dfb44e55 100644 --- a/backend/src/graphql/resolver/ContributionLinkResolver.test.ts +++ b/backend/src/graphql/resolver/ContributionLinkResolver.test.ts @@ -9,6 +9,7 @@ import { GraphQLError } from 'graphql' import { ContributionLink as DbContributionLink } from '@entity/ContributionLink' import { Event as DbEvent } from '@entity/Event' import { logger } from '@test/testSetup' +import { cleanDB, testEnvironment, resetToken } from '@test/helpers' import { login, createContributionLink, @@ -16,7 +17,6 @@ import { updateContributionLink, } from '@/seeds/graphql/mutations' import { listContributionLinks } from '@/seeds/graphql/queries' -import { cleanDB, testEnvironment, resetToken } from '@test/helpers' import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' import { peterLustig } from '@/seeds/users/peter-lustig' import { userFactory } from '@/seeds/factory/user' diff --git a/backend/src/graphql/resolver/ContributionLinkResolver.ts b/backend/src/graphql/resolver/ContributionLinkResolver.ts index 55a23187f..dc88bea07 100644 --- a/backend/src/graphql/resolver/ContributionLinkResolver.ts +++ b/backend/src/graphql/resolver/ContributionLinkResolver.ts @@ -3,20 +3,20 @@ import { Resolver, Args, Arg, Authorized, Mutation, Query, Int, Ctx } from 'type import { MoreThan, IsNull } from '@dbTools/typeorm' import { ContributionLink as DbContributionLink } from '@entity/ContributionLink' +import { ContributionLinkList } from '@model/ContributionLinkList' +import { ContributionLink } from '@model/ContributionLink' +import ContributionLinkArgs from '@arg/ContributionLinkArgs' +import { Order } from '@enum/Order' +import Paginated from '@arg/Paginated' +import { transactionLinkCode as contributionLinkCode } from './TransactionLinkResolver' +import { isStartEndDateValid } from './util/creations' import { CONTRIBUTIONLINK_NAME_MAX_CHARS, CONTRIBUTIONLINK_NAME_MIN_CHARS, MEMO_MAX_CHARS, MEMO_MIN_CHARS, } from './const/const' -import { isStartEndDateValid } from './util/creations' -import { transactionLinkCode as contributionLinkCode } from './TransactionLinkResolver' -import { ContributionLinkList } from '@model/ContributionLinkList' -import { ContributionLink } from '@model/ContributionLink' -import ContributionLinkArgs from '@arg/ContributionLinkArgs' import { RIGHTS } from '@/auth/RIGHTS' -import { Order } from '@enum/Order' -import Paginated from '@arg/Paginated' // TODO: this is a strange construct import LogError from '@/server/LogError' diff --git a/backend/src/graphql/resolver/ContributionResolver.test.ts b/backend/src/graphql/resolver/ContributionResolver.test.ts index df8524a0c..1dfb6567c 100644 --- a/backend/src/graphql/resolver/ContributionResolver.test.ts +++ b/backend/src/graphql/resolver/ContributionResolver.test.ts @@ -13,6 +13,18 @@ import { Transaction as DbTransaction } from '@entity/Transaction' import { User } from '@entity/User' import { UserInputError } from 'apollo-server-express' import { Event as DbEvent } from '@entity/Event' +import { + cleanDB, + resetToken, + testEnvironment, + contributionDateFormatter, + resetEntity, +} from '@test/helpers' +import { logger, i18n as localization } from '@test/testSetup' +import { UnconfirmedContribution } from '@model/UnconfirmedContribution' +import { ContributionListResult } from '@model/Contribution' +import { ContributionStatus } from '@enum/ContributionStatus' +import { Order } from '@enum/Order' import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' import { bobBaumeister } from '@/seeds/users/bob-baumeister' import { stephenHawking } from '@/seeds/users/stephen-hawking' @@ -40,24 +52,12 @@ import { sendContributionDeletedEmail, sendContributionDeniedEmail, } from '@/emails/sendEmailVariants' -import { - cleanDB, - resetToken, - testEnvironment, - contributionDateFormatter, - resetEntity, -} from '@test/helpers' import { userFactory } from '@/seeds/factory/user' import { creationFactory } from '@/seeds/factory/creation' import { creations } from '@/seeds/creation/index' import { peterLustig } from '@/seeds/users/peter-lustig' import { EventType } from '@/event/Event' -import { logger, i18n as localization } from '@test/testSetup' import { raeuberHotzenplotz } from '@/seeds/users/raeuber-hotzenplotz' -import { UnconfirmedContribution } from '@model/UnconfirmedContribution' -import { ContributionListResult } from '@model/Contribution' -import { ContributionStatus } from '@enum/ContributionStatus' -import { Order } from '@enum/Order' jest.mock('@/emails/sendEmailVariants') diff --git a/backend/src/graphql/resolver/ContributionResolver.ts b/backend/src/graphql/resolver/ContributionResolver.ts index 83cf29fc7..6e412fc72 100644 --- a/backend/src/graphql/resolver/ContributionResolver.ts +++ b/backend/src/graphql/resolver/ContributionResolver.ts @@ -9,16 +9,6 @@ import { UserContact } from '@entity/UserContact' import { User as DbUser } from '@entity/User' import { Transaction as DbTransaction } from '@entity/Transaction' -import { MEMO_MAX_CHARS, MEMO_MIN_CHARS } from './const/const' -import { getLastTransaction } from './util/getLastTransaction' -import { findContributions } from './util/findContributions' -import { - getUserCreation, - validateContribution, - updateCreations, - isValidDateString, - getOpenCreations, -} from './util/creations' import { AdminUpdateContribution } from '@model/AdminUpdateContribution' import { Contribution, ContributionListResult } from '@model/Contribution' import { Decay } from '@model/Decay' @@ -33,6 +23,16 @@ import ContributionArgs from '@arg/ContributionArgs' import Paginated from '@arg/Paginated' import AdminCreateContributionArgs from '@arg/AdminCreateContributionArgs' import AdminUpdateContributionArgs from '@arg/AdminUpdateContributionArgs' +import { + getUserCreation, + validateContribution, + updateCreations, + isValidDateString, + getOpenCreations, +} from './util/creations' +import { findContributions } from './util/findContributions' +import { getLastTransaction } from './util/getLastTransaction' +import { MEMO_MAX_CHARS, MEMO_MIN_CHARS } from './const/const' import { RIGHTS } from '@/auth/RIGHTS' import { Context, getUser, getClientTimezoneOffset } from '@/server/context' diff --git a/backend/src/graphql/resolver/KlicktippResolver.test.ts b/backend/src/graphql/resolver/KlicktippResolver.test.ts index 860444b88..0e64a779f 100644 --- a/backend/src/graphql/resolver/KlicktippResolver.test.ts +++ b/backend/src/graphql/resolver/KlicktippResolver.test.ts @@ -1,11 +1,11 @@ import { cleanDB, resetToken, testEnvironment } from '@test/helpers' -import { userFactory } from '@/seeds/factory/user' import { logger, i18n as localization } from '@test/testSetup' -import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' -import { login, subscribeNewsletter, unsubscribeNewsletter } from '@/seeds/graphql/mutations' import { GraphQLError } from 'graphql' import { UserContact } from '@entity/UserContact' import { Event as DbEvent } from '@entity/Event' +import { login, subscribeNewsletter, unsubscribeNewsletter } from '@/seeds/graphql/mutations' +import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' +import { userFactory } from '@/seeds/factory/user' import { EventType } from '@/event/Event' let testEnv: any, mutate: any, query: any, con: any diff --git a/backend/src/graphql/resolver/TransactionLinkResolver.test.ts b/backend/src/graphql/resolver/TransactionLinkResolver.test.ts index fd2a44b4b..96eb99ea7 100644 --- a/backend/src/graphql/resolver/TransactionLinkResolver.test.ts +++ b/backend/src/graphql/resolver/TransactionLinkResolver.test.ts @@ -13,10 +13,12 @@ import { GraphQLError } from 'graphql' import { Transaction } from '@entity/Transaction' import { Event as DbEvent } from '@entity/Event' import { UserContact } from '@entity/UserContact' +import { cleanDB, testEnvironment, resetToken, resetEntity } from '@test/helpers' +import { UnconfirmedContribution } from '@model/UnconfirmedContribution' +import { logger } from '@test/testSetup' import { transactionLinkCode } from './TransactionLinkResolver' import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' import { peterLustig } from '@/seeds/users/peter-lustig' -import { cleanDB, testEnvironment, resetToken, resetEntity } from '@test/helpers' import { creationFactory } from '@/seeds/factory/creation' import { creations } from '@/seeds/creation/index' import { userFactory } from '@/seeds/factory/user' @@ -33,9 +35,7 @@ import { confirmContribution, } from '@/seeds/graphql/mutations' import { listTransactionLinksAdmin } from '@/seeds/graphql/queries' -import { UnconfirmedContribution } from '@model/UnconfirmedContribution' import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK' -import { logger } from '@test/testSetup' import { EventType } from '@/event/Event' // mock semaphore to allow use fake timers diff --git a/backend/src/graphql/resolver/TransactionLinkResolver.ts b/backend/src/graphql/resolver/TransactionLinkResolver.ts index 6aa829ac1..534db02c1 100644 --- a/backend/src/graphql/resolver/TransactionLinkResolver.ts +++ b/backend/src/graphql/resolver/TransactionLinkResolver.ts @@ -10,10 +10,6 @@ import { Contribution as DbContribution } from '@entity/Contribution' import { ContributionLink as DbContributionLink } from '@entity/ContributionLink' import { Resolver, Args, Arg, Authorized, Ctx, Mutation, Query, Int } from 'type-graphql' -import { getUserCreation, validateContribution } from './util/creations' -import { executeTransaction } from './TransactionResolver' -import { getLastTransaction } from './util/getLastTransaction' -import transactionLinkList from './util/transactionLinkList' import { User } from '@model/User' import { ContributionLink } from '@model/ContributionLink' import { Decay } from '@model/Decay' @@ -25,12 +21,16 @@ import { ContributionCycleType } from '@enum/ContributionCycleType' import TransactionLinkArgs from '@arg/TransactionLinkArgs' import Paginated from '@arg/Paginated' import TransactionLinkFilters from '@arg/TransactionLinkFilters' +import QueryLinkResult from '@union/QueryLinkResult' +import transactionLinkList from './util/transactionLinkList' +import { getLastTransaction } from './util/getLastTransaction' +import { executeTransaction } from './TransactionResolver' +import { getUserCreation, validateContribution } from './util/creations' import { backendLogger as logger } from '@/server/logger' import { Context, getUser, getClientTimezoneOffset } from '@/server/context' import { calculateBalance } from '@/util/validate' import { RIGHTS } from '@/auth/RIGHTS' import { calculateDecay } from '@/util/decay' -import QueryLinkResult from '@union/QueryLinkResult' import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK' import LogError from '@/server/LogError' import { diff --git a/backend/src/graphql/resolver/TransactionResolver.test.ts b/backend/src/graphql/resolver/TransactionResolver.test.ts index f26234363..17ed81676 100644 --- a/backend/src/graphql/resolver/TransactionResolver.test.ts +++ b/backend/src/graphql/resolver/TransactionResolver.test.ts @@ -10,6 +10,8 @@ import { Transaction } from '@entity/Transaction' import { User } from '@entity/User' import { GraphQLError } from 'graphql' import { Event as DbEvent } from '@entity/Event' +import { cleanDB, testEnvironment } from '@test/helpers' +import { logger } from '@test/testSetup' import { findUserByEmail } from './UserResolver' import { EventType } from '@/event/Event' import { userFactory } from '@/seeds/factory/user' @@ -23,8 +25,6 @@ import { bobBaumeister } from '@/seeds/users/bob-baumeister' import { garrickOllivander } from '@/seeds/users/garrick-ollivander' import { peterLustig } from '@/seeds/users/peter-lustig' import { stephenHawking } from '@/seeds/users/stephen-hawking' -import { cleanDB, testEnvironment } from '@test/helpers' -import { logger } from '@test/testSetup' let mutate: any, query: any, con: any let testEnv: any diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index f38a4a07b..e0ac5d435 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -9,10 +9,6 @@ import { getCustomRepository, getConnection, In } from '@dbTools/typeorm' import { User as dbUser } from '@entity/User' import { Transaction as dbTransaction } from '@entity/Transaction' import { TransactionLink as dbTransactionLink } from '@entity/TransactionLink' -import { BalanceResolver } from './BalanceResolver' -import { MEMO_MAX_CHARS, MEMO_MIN_CHARS } from './const/const' -import { findUserByEmail } from './UserResolver' -import { getLastTransaction } from './util/getLastTransaction' import { TransactionRepository } from '@repository/Transaction' import { TransactionLinkRepository } from '@repository/TransactionLink' @@ -21,9 +17,13 @@ import { Transaction } from '@model/Transaction' import { TransactionList } from '@model/TransactionList' import { Order } from '@enum/Order' import { TransactionTypeId } from '@enum/TransactionTypeId' -import { calculateBalance } from '@/util/validate' import TransactionSendArgs from '@arg/TransactionSendArgs' import Paginated from '@arg/Paginated' +import { getLastTransaction } from './util/getLastTransaction' +import { findUserByEmail } from './UserResolver' +import { MEMO_MAX_CHARS, MEMO_MIN_CHARS } from './const/const' +import { BalanceResolver } from './BalanceResolver' +import { calculateBalance } from '@/util/validate' import { backendLogger as logger } from '@/server/logger' import { Context, getUser } from '@/server/context' diff --git a/backend/src/graphql/resolver/UserResolver.test.ts b/backend/src/graphql/resolver/UserResolver.test.ts index aebd0f0eb..1b6239fea 100644 --- a/backend/src/graphql/resolver/UserResolver.test.ts +++ b/backend/src/graphql/resolver/UserResolver.test.ts @@ -15,9 +15,10 @@ import { Event as DbEvent } from '@entity/Event' import { OptInType } from '@enum/OptInType' import { UserContactType } from '@enum/UserContactType' import { PasswordEncryptionType } from '@enum/PasswordEncryptionType' -import { objectValuesToArray } from '@/util/utilities' import { testEnvironment, headerPushMock, resetToken, cleanDB } from '@test/helpers' import { logger, i18n as localization } from '@test/testSetup' +import { ContributionLink } from '@model/ContributionLink' +import { objectValuesToArray } from '@/util/utilities' import { printTimeDuration } from '@/util/time' import { userFactory } from '@/seeds/factory/user' import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' @@ -44,7 +45,6 @@ import { } from '@/emails/sendEmailVariants' import { contributionLinkFactory } from '@/seeds/factory/contributionLink' import { transactionLinkFactory } from '@/seeds/factory/transactionLink' -import { ContributionLink } from '@model/ContributionLink' import { EventType } from '@/event/Event' import { peterLustig } from '@/seeds/users/peter-lustig' import { bobBaumeister } from '@/seeds/users/bob-baumeister' diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index 54d4f583f..aca72b5d0 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -21,8 +21,6 @@ import { User as DbUser } from '@entity/User' import { UserContact as DbUserContact } from '@entity/UserContact' import { TransactionLink as DbTransactionLink } from '@entity/TransactionLink' import { ContributionLink as DbContributionLink } from '@entity/ContributionLink' -import { getUserCreations } from './util/creations' -import { FULL_CREATION_AVAILABLE } from './const/const' import { PasswordEncryptionType } from '@enum/PasswordEncryptionType' import { UserRepository } from '@repository/User' @@ -33,18 +31,19 @@ import { OptInType } from '@enum/OptInType' import { Order } from '@enum/Order' import { UserContactType } from '@enum/UserContactType' -import { - sendAccountActivationEmail, - sendAccountMultiRegistrationEmail, - sendResetPasswordEmail, -} from '@/emails/sendEmailVariants' - -import { getTimeDurationObject, printTimeDuration } from '@/util/time' import CreateUserArgs from '@arg/CreateUserArgs' import UnsecureLoginArgs from '@arg/UnsecureLoginArgs' import UpdateUserInfosArgs from '@arg/UpdateUserInfosArgs' import Paginated from '@arg/Paginated' import SearchUsersArgs from '@arg/SearchUsersArgs' +import { FULL_CREATION_AVAILABLE } from './const/const' +import { getUserCreations } from './util/creations' +import { getTimeDurationObject, printTimeDuration } from '@/util/time' +import { + sendAccountActivationEmail, + sendAccountMultiRegistrationEmail, + sendResetPasswordEmail, +} from '@/emails/sendEmailVariants' import { backendLogger as logger } from '@/server/logger' import { Context, getUser, getClientTimezoneOffset } from '@/server/context' diff --git a/backend/src/graphql/resolver/semaphore.test.ts b/backend/src/graphql/resolver/semaphore.test.ts index 6b1976021..cc4d589dc 100644 --- a/backend/src/graphql/resolver/semaphore.test.ts +++ b/backend/src/graphql/resolver/semaphore.test.ts @@ -5,12 +5,12 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import { Decimal } from 'decimal.js-light' +import { cleanDB, testEnvironment, contributionDateFormatter } from '@test/helpers' import { userFactory } from '@/seeds/factory/user' import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' import { bobBaumeister } from '@/seeds/users/bob-baumeister' import { peterLustig } from '@/seeds/users/peter-lustig' import { creationFactory, nMonthsBefore } from '@/seeds/factory/creation' -import { cleanDB, testEnvironment, contributionDateFormatter } from '@test/helpers' import { confirmContribution, createContribution, diff --git a/backend/src/graphql/resolver/util/creations.test.ts b/backend/src/graphql/resolver/util/creations.test.ts index 7461401c8..5b6b40e2b 100644 --- a/backend/src/graphql/resolver/util/creations.test.ts +++ b/backend/src/graphql/resolver/util/creations.test.ts @@ -6,8 +6,8 @@ import { User } from '@entity/User' import { Contribution } from '@entity/Contribution' -import { getUserCreation } from './creations' import { testEnvironment, cleanDB, contributionDateFormatter } from '@test/helpers' +import { getUserCreation } from './creations' import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' import { peterLustig } from '@/seeds/users/peter-lustig' import { userFactory } from '@/seeds/factory/user' diff --git a/backend/src/graphql/resolver/util/creations.ts b/backend/src/graphql/resolver/util/creations.ts index 6ebeae8b9..dba0c8c81 100644 --- a/backend/src/graphql/resolver/util/creations.ts +++ b/backend/src/graphql/resolver/util/creations.ts @@ -3,9 +3,9 @@ import { getConnection } from '@dbTools/typeorm' import { Contribution } from '@entity/Contribution' import { Decimal } from 'decimal.js-light' +import { OpenCreation } from '@model/OpenCreation' import { FULL_CREATION_AVAILABLE, MAX_CREATION_AMOUNT } from '@/graphql/resolver/const/const' import { backendLogger as logger } from '@/server/logger' -import { OpenCreation } from '@model/OpenCreation' import LogError from '@/server/LogError' interface CreationMap { diff --git a/backend/src/middleware/klicktippMiddleware.ts b/backend/src/middleware/klicktippMiddleware.ts index bc11f6ad7..369b29475 100644 --- a/backend/src/middleware/klicktippMiddleware.ts +++ b/backend/src/middleware/klicktippMiddleware.ts @@ -3,8 +3,8 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/restrict-template-expressions */ import { MiddlewareFn } from 'type-graphql' -import { getKlickTippUser } from '@/apis/KlicktippController' import { KlickTipp } from '@model/KlickTipp' +import { getKlickTippUser } from '@/apis/KlicktippController' import { klickTippLogger as logger } from '@/server/logger' // export const klicktippRegistrationMiddleware: MiddlewareFn = async ( diff --git a/backend/src/password/EncryptorUtils.ts b/backend/src/password/EncryptorUtils.ts index b4531b3bb..ab8a333d2 100644 --- a/backend/src/password/EncryptorUtils.ts +++ b/backend/src/password/EncryptorUtils.ts @@ -2,10 +2,10 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ import { User } from '@entity/User' +import { PasswordEncryptionType } from '@enum/PasswordEncryptionType' import CONFIG from '@/config' import LogError from '@/server/LogError' import { backendLogger as logger } from '@/server/logger' -import { PasswordEncryptionType } from '@enum/PasswordEncryptionType' // eslint-disable-next-line @typescript-eslint/no-var-requires, import/no-commonjs const sodium = require('sodium-native') diff --git a/backend/src/seeds/factory/contributionLink.ts b/backend/src/seeds/factory/contributionLink.ts index 5925cdcfe..6e1d9bd50 100644 --- a/backend/src/seeds/factory/contributionLink.ts +++ b/backend/src/seeds/factory/contributionLink.ts @@ -2,8 +2,8 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/unbound-method */ import { ApolloServerTestClient } from 'apollo-server-testing' -import { login, createContributionLink } from '@/seeds/graphql/mutations' import { ContributionLink } from '@model/ContributionLink' +import { login, createContributionLink } from '@/seeds/graphql/mutations' import { ContributionLinkInterface } from '@/seeds/contributionLink/ContributionLinkInterface' export const contributionLinkFactory = async ( diff --git a/backend/src/server/LogError.test.ts b/backend/src/server/LogError.test.ts index 318a477ef..b7a067e28 100644 --- a/backend/src/server/LogError.test.ts +++ b/backend/src/server/LogError.test.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/unbound-method */ -import LogError from './LogError' import { logger } from '@test/testSetup' +import LogError from './LogError' describe('LogError', () => { it('logs an Error when created', () => { diff --git a/backend/src/util/communityUser.ts b/backend/src/util/communityUser.ts index dfa477da9..d086727bf 100644 --- a/backend/src/util/communityUser.ts +++ b/backend/src/util/communityUser.ts @@ -3,9 +3,9 @@ import { SaveOptions, RemoveOptions } from '@dbTools/typeorm' import { User as dbUser } from '@entity/User' import { UserContact } from '@entity/UserContact' +import { User } from '@model/User' import { PasswordEncryptionType } from '@/graphql/enum/PasswordEncryptionType' // import { UserContact as EmailContact } from '@entity/UserContact' -import { User } from '@model/User' const communityDbUser: dbUser = { id: -1, diff --git a/backend/src/util/decay.ts b/backend/src/util/decay.ts index d35eb83a4..3c76b0995 100644 --- a/backend/src/util/decay.ts +++ b/backend/src/util/decay.ts @@ -1,6 +1,6 @@ import { Decimal } from 'decimal.js-light' -import CONFIG from '@/config' import { Decay } from '@model/Decay' +import CONFIG from '@/config' import LogError from '@/server/LogError' // TODO: externalize all those definitions and functions into an external decay library diff --git a/backend/src/util/validate.ts b/backend/src/util/validate.ts index ec28dfa13..b70c90344 100644 --- a/backend/src/util/validate.ts +++ b/backend/src/util/validate.ts @@ -1,10 +1,10 @@ import { Decimal } from 'decimal.js-light' import { getCustomRepository } from '@dbTools/typeorm' import { TransactionLink as dbTransactionLink } from '@entity/TransactionLink' -import { calculateDecay } from './decay' -import { getLastTransaction } from '@/graphql/resolver/util/getLastTransaction' import { TransactionLinkRepository } from '@repository/TransactionLink' import { Decay } from '@model/Decay' +import { calculateDecay } from './decay' +import { getLastTransaction } from '@/graphql/resolver/util/getLastTransaction' function isStringBoolean(value: string): boolean { const lowerValue = value.toLowerCase() diff --git a/backend/src/util/virtualTransactions.ts b/backend/src/util/virtualTransactions.ts index 7810ad871..aea4ebb66 100644 --- a/backend/src/util/virtualTransactions.ts +++ b/backend/src/util/virtualTransactions.ts @@ -2,10 +2,10 @@ import { SaveOptions, RemoveOptions } from '@dbTools/typeorm' import { Transaction as dbTransaction } from '@entity/Transaction' import { Decimal } from 'decimal.js-light' -import { calculateDecay } from './decay' import { Transaction } from '@model/Transaction' import { TransactionTypeId } from '@enum/TransactionTypeId' import { User } from '@model/User' +import { calculateDecay } from './decay' const defaultModelFunctions = { hasId: function (): boolean { diff --git a/e2e-tests/yarn.lock b/e2e-tests/yarn.lock index c0f623e47..20956c5d0 100644 --- a/e2e-tests/yarn.lock +++ b/e2e-tests/yarn.lock @@ -2193,10 +2193,10 @@ crypto-browserify@^3.0.0: randombytes "^2.0.0" randomfill "^1.0.3" -cypress@^10.4.0: - version "10.8.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-10.8.0.tgz#12a681f2642b6f13d636bab65d5b71abdb1497a5" - integrity sha512-QVse0dnLm018hgti2enKMVZR9qbIO488YGX06nH5j3Dg1isL38DwrBtyrax02CANU6y8F4EJUuyW6HJKw1jsFA== +cypress@^12.7.0: + version "12.9.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-12.9.0.tgz#e6ab43cf329fd7c821ef7645517649d72ccf0a12" + integrity sha512-Ofe09LbHKgSqX89Iy1xen2WvpgbvNxDzsWx3mgU1mfILouELeXYGwIib3ItCwoRrRifoQwcBFmY54Vs0zw7QCg== dependencies: "@cypress/request" "^2.88.10" "@cypress/xvfb" "^1.2.4" @@ -2215,7 +2215,7 @@ cypress@^10.4.0: commander "^5.1.0" common-tags "^1.8.0" dayjs "^1.10.4" - debug "^4.3.2" + debug "^4.3.4" enquirer "^2.3.6" eventemitter2 "6.4.7" execa "4.1.0" From 989a3e30f28be4364f2631c767f05e8dabed06c5 Mon Sep 17 00:00:00 2001 From: elweyn Date: Fri, 31 Mar 2023 07:16:04 +0200 Subject: [PATCH 14/26] Import order fixed by lint --- .../src/emails/sendEmailTranslated.test.ts | 2 +- backend/src/emails/sendEmailVariants.test.ts | 4 ++-- .../federation/validateCommunities.test.ts | 2 +- backend/src/graphql/model/Transaction.ts | 2 +- .../src/graphql/resolver/BalanceResolver.ts | 4 ++-- .../resolver/ContributionLinkResolver.ts | 10 +++++----- .../graphql/resolver/ContributionResolver.ts | 20 +++++++++---------- .../resolver/TransactionLinkResolver.test.ts | 2 +- .../resolver/TransactionLinkResolver.ts | 8 ++++---- .../resolver/TransactionResolver.test.ts | 2 +- .../graphql/resolver/TransactionResolver.ts | 8 ++++---- backend/src/graphql/resolver/UserResolver.ts | 4 ++-- .../graphql/resolver/util/creations.test.ts | 2 +- backend/src/server/LogError.test.ts | 2 +- backend/src/util/validate.ts | 2 +- backend/src/util/virtualTransactions.ts | 2 +- 16 files changed, 38 insertions(+), 38 deletions(-) diff --git a/backend/src/emails/sendEmailTranslated.test.ts b/backend/src/emails/sendEmailTranslated.test.ts index f2fae2746..762b88cf0 100644 --- a/backend/src/emails/sendEmailTranslated.test.ts +++ b/backend/src/emails/sendEmailTranslated.test.ts @@ -1,8 +1,8 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/unbound-method */ import { createTransport } from 'nodemailer' -import { logger, i18n } from '@test/testSetup' import { sendEmailTranslated } from './sendEmailTranslated' +import { logger, i18n } from '@test/testSetup' import CONFIG from '@/config' CONFIG.EMAIL = false diff --git a/backend/src/emails/sendEmailVariants.test.ts b/backend/src/emails/sendEmailVariants.test.ts index 3c8d22f95..399ed89ac 100644 --- a/backend/src/emails/sendEmailVariants.test.ts +++ b/backend/src/emails/sendEmailVariants.test.ts @@ -4,8 +4,6 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ import { Decimal } from 'decimal.js-light' -import { testEnvironment } from '@test/helpers' -import { logger, i18n as localization } from '@test/testSetup' import { sendAddedContributionMessageEmail, sendAccountActivationEmail, @@ -18,6 +16,8 @@ import { sendTransactionReceivedEmail, } from './sendEmailVariants' import { sendEmailTranslated } from './sendEmailTranslated' +import { testEnvironment } from '@test/helpers' +import { logger, i18n as localization } from '@test/testSetup' import CONFIG from '@/config' let con: any diff --git a/backend/src/federation/validateCommunities.test.ts b/backend/src/federation/validateCommunities.test.ts index 57d9bd65f..a99bb3274 100644 --- a/backend/src/federation/validateCommunities.test.ts +++ b/backend/src/federation/validateCommunities.test.ts @@ -6,9 +6,9 @@ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import { Community as DbCommunity } from '@entity/Community' +import { validateCommunities } from './validateCommunities' import { logger } from '@test/testSetup' import { testEnvironment, cleanDB } from '@test/helpers' -import { validateCommunities } from './validateCommunities' let con: any let testEnv: any diff --git a/backend/src/graphql/model/Transaction.ts b/backend/src/graphql/model/Transaction.ts index 9e2be85dd..8f0d1eadc 100644 --- a/backend/src/graphql/model/Transaction.ts +++ b/backend/src/graphql/model/Transaction.ts @@ -1,9 +1,9 @@ import { ObjectType, Field, Int } from 'type-graphql' import { Transaction as dbTransaction } from '@entity/Transaction' import { Decimal } from 'decimal.js-light' -import { TransactionTypeId } from '@enum/TransactionTypeId' import { Decay } from './Decay' import { User } from './User' +import { TransactionTypeId } from '@enum/TransactionTypeId' @ObjectType() export class Transaction { diff --git a/backend/src/graphql/resolver/BalanceResolver.ts b/backend/src/graphql/resolver/BalanceResolver.ts index 520b8c094..31e2384d4 100644 --- a/backend/src/graphql/resolver/BalanceResolver.ts +++ b/backend/src/graphql/resolver/BalanceResolver.ts @@ -6,10 +6,10 @@ import { getCustomRepository } from '@dbTools/typeorm' import { Transaction as dbTransaction } from '@entity/Transaction' import { TransactionLink as dbTransactionLink } from '@entity/TransactionLink' -import { TransactionLinkRepository } from '@repository/TransactionLink' -import { Balance } from '@model/Balance' import { GdtResolver } from './GdtResolver' import { getLastTransaction } from './util/getLastTransaction' +import { TransactionLinkRepository } from '@repository/TransactionLink' +import { Balance } from '@model/Balance' import { backendLogger as logger } from '@/server/logger' import { Context, getUser } from '@/server/context' diff --git a/backend/src/graphql/resolver/ContributionLinkResolver.ts b/backend/src/graphql/resolver/ContributionLinkResolver.ts index dc88bea07..4b19c36e1 100644 --- a/backend/src/graphql/resolver/ContributionLinkResolver.ts +++ b/backend/src/graphql/resolver/ContributionLinkResolver.ts @@ -3,11 +3,6 @@ import { Resolver, Args, Arg, Authorized, Mutation, Query, Int, Ctx } from 'type import { MoreThan, IsNull } from '@dbTools/typeorm' import { ContributionLink as DbContributionLink } from '@entity/ContributionLink' -import { ContributionLinkList } from '@model/ContributionLinkList' -import { ContributionLink } from '@model/ContributionLink' -import ContributionLinkArgs from '@arg/ContributionLinkArgs' -import { Order } from '@enum/Order' -import Paginated from '@arg/Paginated' import { transactionLinkCode as contributionLinkCode } from './TransactionLinkResolver' import { isStartEndDateValid } from './util/creations' import { @@ -16,6 +11,11 @@ import { MEMO_MAX_CHARS, MEMO_MIN_CHARS, } from './const/const' +import { ContributionLinkList } from '@model/ContributionLinkList' +import { ContributionLink } from '@model/ContributionLink' +import ContributionLinkArgs from '@arg/ContributionLinkArgs' +import { Order } from '@enum/Order' +import Paginated from '@arg/Paginated' import { RIGHTS } from '@/auth/RIGHTS' // TODO: this is a strange construct diff --git a/backend/src/graphql/resolver/ContributionResolver.ts b/backend/src/graphql/resolver/ContributionResolver.ts index 6e412fc72..c48b05920 100644 --- a/backend/src/graphql/resolver/ContributionResolver.ts +++ b/backend/src/graphql/resolver/ContributionResolver.ts @@ -9,6 +9,16 @@ import { UserContact } from '@entity/UserContact' import { User as DbUser } from '@entity/User' import { Transaction as DbTransaction } from '@entity/Transaction' +import { + getUserCreation, + validateContribution, + updateCreations, + isValidDateString, + getOpenCreations, +} from './util/creations' +import { findContributions } from './util/findContributions' +import { getLastTransaction } from './util/getLastTransaction' +import { MEMO_MAX_CHARS, MEMO_MIN_CHARS } from './const/const' import { AdminUpdateContribution } from '@model/AdminUpdateContribution' import { Contribution, ContributionListResult } from '@model/Contribution' import { Decay } from '@model/Decay' @@ -23,16 +33,6 @@ import ContributionArgs from '@arg/ContributionArgs' import Paginated from '@arg/Paginated' import AdminCreateContributionArgs from '@arg/AdminCreateContributionArgs' import AdminUpdateContributionArgs from '@arg/AdminUpdateContributionArgs' -import { - getUserCreation, - validateContribution, - updateCreations, - isValidDateString, - getOpenCreations, -} from './util/creations' -import { findContributions } from './util/findContributions' -import { getLastTransaction } from './util/getLastTransaction' -import { MEMO_MAX_CHARS, MEMO_MIN_CHARS } from './const/const' import { RIGHTS } from '@/auth/RIGHTS' import { Context, getUser, getClientTimezoneOffset } from '@/server/context' diff --git a/backend/src/graphql/resolver/TransactionLinkResolver.test.ts b/backend/src/graphql/resolver/TransactionLinkResolver.test.ts index 96eb99ea7..4f72276d4 100644 --- a/backend/src/graphql/resolver/TransactionLinkResolver.test.ts +++ b/backend/src/graphql/resolver/TransactionLinkResolver.test.ts @@ -13,10 +13,10 @@ import { GraphQLError } from 'graphql' import { Transaction } from '@entity/Transaction' import { Event as DbEvent } from '@entity/Event' import { UserContact } from '@entity/UserContact' +import { transactionLinkCode } from './TransactionLinkResolver' import { cleanDB, testEnvironment, resetToken, resetEntity } from '@test/helpers' import { UnconfirmedContribution } from '@model/UnconfirmedContribution' import { logger } from '@test/testSetup' -import { transactionLinkCode } from './TransactionLinkResolver' import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' import { peterLustig } from '@/seeds/users/peter-lustig' import { creationFactory } from '@/seeds/factory/creation' diff --git a/backend/src/graphql/resolver/TransactionLinkResolver.ts b/backend/src/graphql/resolver/TransactionLinkResolver.ts index 534db02c1..3ff6fd36a 100644 --- a/backend/src/graphql/resolver/TransactionLinkResolver.ts +++ b/backend/src/graphql/resolver/TransactionLinkResolver.ts @@ -10,6 +10,10 @@ import { Contribution as DbContribution } from '@entity/Contribution' import { ContributionLink as DbContributionLink } from '@entity/ContributionLink' import { Resolver, Args, Arg, Authorized, Ctx, Mutation, Query, Int } from 'type-graphql' +import transactionLinkList from './util/transactionLinkList' +import { getLastTransaction } from './util/getLastTransaction' +import { executeTransaction } from './TransactionResolver' +import { getUserCreation, validateContribution } from './util/creations' import { User } from '@model/User' import { ContributionLink } from '@model/ContributionLink' import { Decay } from '@model/Decay' @@ -22,10 +26,6 @@ import TransactionLinkArgs from '@arg/TransactionLinkArgs' import Paginated from '@arg/Paginated' import TransactionLinkFilters from '@arg/TransactionLinkFilters' import QueryLinkResult from '@union/QueryLinkResult' -import transactionLinkList from './util/transactionLinkList' -import { getLastTransaction } from './util/getLastTransaction' -import { executeTransaction } from './TransactionResolver' -import { getUserCreation, validateContribution } from './util/creations' import { backendLogger as logger } from '@/server/logger' import { Context, getUser, getClientTimezoneOffset } from '@/server/context' import { calculateBalance } from '@/util/validate' diff --git a/backend/src/graphql/resolver/TransactionResolver.test.ts b/backend/src/graphql/resolver/TransactionResolver.test.ts index 17ed81676..6d039784e 100644 --- a/backend/src/graphql/resolver/TransactionResolver.test.ts +++ b/backend/src/graphql/resolver/TransactionResolver.test.ts @@ -10,9 +10,9 @@ import { Transaction } from '@entity/Transaction' import { User } from '@entity/User' import { GraphQLError } from 'graphql' import { Event as DbEvent } from '@entity/Event' +import { findUserByEmail } from './UserResolver' import { cleanDB, testEnvironment } from '@test/helpers' import { logger } from '@test/testSetup' -import { findUserByEmail } from './UserResolver' import { EventType } from '@/event/Event' import { userFactory } from '@/seeds/factory/user' import { diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index e0ac5d435..a699e7291 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -9,6 +9,10 @@ import { getCustomRepository, getConnection, In } from '@dbTools/typeorm' import { User as dbUser } from '@entity/User' import { Transaction as dbTransaction } from '@entity/Transaction' import { TransactionLink as dbTransactionLink } from '@entity/TransactionLink' +import { getLastTransaction } from './util/getLastTransaction' +import { findUserByEmail } from './UserResolver' +import { MEMO_MAX_CHARS, MEMO_MIN_CHARS } from './const/const' +import { BalanceResolver } from './BalanceResolver' import { TransactionRepository } from '@repository/Transaction' import { TransactionLinkRepository } from '@repository/TransactionLink' @@ -19,10 +23,6 @@ import { Order } from '@enum/Order' import { TransactionTypeId } from '@enum/TransactionTypeId' import TransactionSendArgs from '@arg/TransactionSendArgs' import Paginated from '@arg/Paginated' -import { getLastTransaction } from './util/getLastTransaction' -import { findUserByEmail } from './UserResolver' -import { MEMO_MAX_CHARS, MEMO_MIN_CHARS } from './const/const' -import { BalanceResolver } from './BalanceResolver' import { calculateBalance } from '@/util/validate' import { backendLogger as logger } from '@/server/logger' diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index aca72b5d0..0c1cefd12 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -21,6 +21,8 @@ import { User as DbUser } from '@entity/User' import { UserContact as DbUserContact } from '@entity/UserContact' import { TransactionLink as DbTransactionLink } from '@entity/TransactionLink' import { ContributionLink as DbContributionLink } from '@entity/ContributionLink' +import { FULL_CREATION_AVAILABLE } from './const/const' +import { getUserCreations } from './util/creations' import { PasswordEncryptionType } from '@enum/PasswordEncryptionType' import { UserRepository } from '@repository/User' @@ -36,8 +38,6 @@ import UnsecureLoginArgs from '@arg/UnsecureLoginArgs' import UpdateUserInfosArgs from '@arg/UpdateUserInfosArgs' import Paginated from '@arg/Paginated' import SearchUsersArgs from '@arg/SearchUsersArgs' -import { FULL_CREATION_AVAILABLE } from './const/const' -import { getUserCreations } from './util/creations' import { getTimeDurationObject, printTimeDuration } from '@/util/time' import { sendAccountActivationEmail, diff --git a/backend/src/graphql/resolver/util/creations.test.ts b/backend/src/graphql/resolver/util/creations.test.ts index 5b6b40e2b..7461401c8 100644 --- a/backend/src/graphql/resolver/util/creations.test.ts +++ b/backend/src/graphql/resolver/util/creations.test.ts @@ -6,8 +6,8 @@ import { User } from '@entity/User' import { Contribution } from '@entity/Contribution' -import { testEnvironment, cleanDB, contributionDateFormatter } from '@test/helpers' import { getUserCreation } from './creations' +import { testEnvironment, cleanDB, contributionDateFormatter } from '@test/helpers' import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' import { peterLustig } from '@/seeds/users/peter-lustig' import { userFactory } from '@/seeds/factory/user' diff --git a/backend/src/server/LogError.test.ts b/backend/src/server/LogError.test.ts index b7a067e28..318a477ef 100644 --- a/backend/src/server/LogError.test.ts +++ b/backend/src/server/LogError.test.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/unbound-method */ -import { logger } from '@test/testSetup' import LogError from './LogError' +import { logger } from '@test/testSetup' describe('LogError', () => { it('logs an Error when created', () => { diff --git a/backend/src/util/validate.ts b/backend/src/util/validate.ts index b70c90344..aaadbdd31 100644 --- a/backend/src/util/validate.ts +++ b/backend/src/util/validate.ts @@ -1,9 +1,9 @@ import { Decimal } from 'decimal.js-light' import { getCustomRepository } from '@dbTools/typeorm' import { TransactionLink as dbTransactionLink } from '@entity/TransactionLink' +import { calculateDecay } from './decay' import { TransactionLinkRepository } from '@repository/TransactionLink' import { Decay } from '@model/Decay' -import { calculateDecay } from './decay' import { getLastTransaction } from '@/graphql/resolver/util/getLastTransaction' function isStringBoolean(value: string): boolean { diff --git a/backend/src/util/virtualTransactions.ts b/backend/src/util/virtualTransactions.ts index aea4ebb66..7810ad871 100644 --- a/backend/src/util/virtualTransactions.ts +++ b/backend/src/util/virtualTransactions.ts @@ -2,10 +2,10 @@ import { SaveOptions, RemoveOptions } from '@dbTools/typeorm' import { Transaction as dbTransaction } from '@entity/Transaction' import { Decimal } from 'decimal.js-light' +import { calculateDecay } from './decay' import { Transaction } from '@model/Transaction' import { TransactionTypeId } from '@enum/TransactionTypeId' import { User } from '@model/User' -import { calculateDecay } from './decay' const defaultModelFunctions = { hasId: function (): boolean { From 71266dcc2d3675f2fe6bac12d4a7c466e6493887 Mon Sep 17 00:00:00 2001 From: elweyn Date: Fri, 31 Mar 2023 07:16:21 +0200 Subject: [PATCH 15/26] Fix linting rules --- .../graphql/resolver/KlicktippResolver.test.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/backend/src/graphql/resolver/KlicktippResolver.test.ts b/backend/src/graphql/resolver/KlicktippResolver.test.ts index 0e64a779f..d7a7e8255 100644 --- a/backend/src/graphql/resolver/KlicktippResolver.test.ts +++ b/backend/src/graphql/resolver/KlicktippResolver.test.ts @@ -1,19 +1,22 @@ -import { cleanDB, resetToken, testEnvironment } from '@test/helpers' -import { logger, i18n as localization } from '@test/testSetup' +/* eslint-disable @typescript-eslint/no-explicit-any */ +/* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable @typescript-eslint/no-unsafe-call */ +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ import { GraphQLError } from 'graphql' import { UserContact } from '@entity/UserContact' import { Event as DbEvent } from '@entity/Event' +import { logger, i18n as localization } from '@test/testSetup' +import { cleanDB, resetToken, testEnvironment } from '@test/helpers' import { login, subscribeNewsletter, unsubscribeNewsletter } from '@/seeds/graphql/mutations' import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' import { userFactory } from '@/seeds/factory/user' import { EventType } from '@/event/Event' -let testEnv: any, mutate: any, query: any, con: any +let testEnv: any, mutate: any, con: any beforeAll(async () => { testEnv = await testEnvironment(logger, localization) mutate = testEnv.mutate - query = testEnv.query con = testEnv.con await cleanDB() }) @@ -24,10 +27,8 @@ afterAll(async () => { }) describe('KlicktippResolver', () => { - let bibi - beforeAll(async () => { - bibi = await userFactory(testEnv, bibiBloxberg) + await userFactory(testEnv, bibiBloxberg) }) afterAll(async () => { From d326f00c0bee44d5306ccbfd0677a3da05d78346 Mon Sep 17 00:00:00 2001 From: elweyn Date: Fri, 31 Mar 2023 07:28:52 +0200 Subject: [PATCH 16/26] Fix linting --- backend/src/event/EVENT_SUBSCRIBE_NEWSLETTER.ts | 3 ++- backend/src/event/EVENT_UNSUBSCRIBE_NEWSLETTER.ts | 3 ++- .../src/graphql/resolver/CommunityResolver.test.ts | 1 + .../src/graphql/resolver/KlicktippResolver.test.ts | 12 +++++++----- backend/src/graphql/resolver/KlicktippResolver.ts | 2 +- backend/src/middleware/klicktippMiddleware.ts | 3 +-- 6 files changed, 14 insertions(+), 10 deletions(-) diff --git a/backend/src/event/EVENT_SUBSCRIBE_NEWSLETTER.ts b/backend/src/event/EVENT_SUBSCRIBE_NEWSLETTER.ts index f4207d059..a9656b6fa 100644 --- a/backend/src/event/EVENT_SUBSCRIBE_NEWSLETTER.ts +++ b/backend/src/event/EVENT_SUBSCRIBE_NEWSLETTER.ts @@ -1,5 +1,6 @@ -import { User as DbUser } from '@entity/User' import { Event as DbEvent } from '@entity/Event' +import { User as DbUser } from '@entity/User' + import { Event, EventType } from './Event' export const EVENT_SUBSCRIBE_NEWSLETTER = async (user: DbUser): Promise => diff --git a/backend/src/event/EVENT_UNSUBSCRIBE_NEWSLETTER.ts b/backend/src/event/EVENT_UNSUBSCRIBE_NEWSLETTER.ts index 6a6946e3f..1b2561894 100644 --- a/backend/src/event/EVENT_UNSUBSCRIBE_NEWSLETTER.ts +++ b/backend/src/event/EVENT_UNSUBSCRIBE_NEWSLETTER.ts @@ -1,5 +1,6 @@ -import { User as DbUser } from '@entity/User' import { Event as DbEvent } from '@entity/Event' +import { User as DbUser } from '@entity/User' + import { Event, EventType } from './Event' export const EVENT_UNSUBSCRIBE_NEWSLETTER = async (user: DbUser): Promise => diff --git a/backend/src/graphql/resolver/CommunityResolver.test.ts b/backend/src/graphql/resolver/CommunityResolver.test.ts index 2cb27de31..5b4b26cad 100644 --- a/backend/src/graphql/resolver/CommunityResolver.test.ts +++ b/backend/src/graphql/resolver/CommunityResolver.test.ts @@ -8,6 +8,7 @@ import { Community as DbCommunity } from '@entity/Community' import { testEnvironment } from '@test/helpers' + import { getCommunities } from '@/seeds/graphql/queries' let query: any diff --git a/backend/src/graphql/resolver/KlicktippResolver.test.ts b/backend/src/graphql/resolver/KlicktippResolver.test.ts index d7a7e8255..02b3e0492 100644 --- a/backend/src/graphql/resolver/KlicktippResolver.test.ts +++ b/backend/src/graphql/resolver/KlicktippResolver.test.ts @@ -2,15 +2,17 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ -import { GraphQLError } from 'graphql' -import { UserContact } from '@entity/UserContact' import { Event as DbEvent } from '@entity/Event' -import { logger, i18n as localization } from '@test/testSetup' +import { UserContact } from '@entity/UserContact' +import { GraphQLError } from 'graphql' + import { cleanDB, resetToken, testEnvironment } from '@test/helpers' +import { logger, i18n as localization } from '@test/testSetup' + +import { EventType } from '@/event/Event' +import { userFactory } from '@/seeds/factory/user' import { login, subscribeNewsletter, unsubscribeNewsletter } from '@/seeds/graphql/mutations' import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' -import { userFactory } from '@/seeds/factory/user' -import { EventType } from '@/event/Event' let testEnv: any, mutate: any, con: any diff --git a/backend/src/graphql/resolver/KlicktippResolver.ts b/backend/src/graphql/resolver/KlicktippResolver.ts index e03e81440..03b591c4d 100644 --- a/backend/src/graphql/resolver/KlicktippResolver.ts +++ b/backend/src/graphql/resolver/KlicktippResolver.ts @@ -1,8 +1,8 @@ import { Resolver, Authorized, Mutation, Ctx } from 'type-graphql' import { unsubscribe, klicktippSignIn } from '@/apis/KlicktippController' -import { EVENT_UNSUBSCRIBE_NEWSLETTER, EVENT_SUBSCRIBE_NEWSLETTER } from '@/event/Event' import { RIGHTS } from '@/auth/RIGHTS' +import { EVENT_UNSUBSCRIBE_NEWSLETTER, EVENT_SUBSCRIBE_NEWSLETTER } from '@/event/Event' import { Context, getUser } from '@/server/context' @Resolver() diff --git a/backend/src/middleware/klicktippMiddleware.ts b/backend/src/middleware/klicktippMiddleware.ts index 82391a614..cc0335c09 100644 --- a/backend/src/middleware/klicktippMiddleware.ts +++ b/backend/src/middleware/klicktippMiddleware.ts @@ -6,8 +6,7 @@ import { MiddlewareFn } from 'type-graphql' import { KlickTipp } from '@model/KlickTipp' -import { /* klicktippSignIn, */ getKlickTippUser } from '@/apis/KlicktippController' -import CONFIG from '@/config' +import { getKlickTippUser } from '@/apis/KlicktippController' import { klickTippLogger as logger } from '@/server/logger' // export const klicktippRegistrationMiddleware: MiddlewareFn = async ( From 51d572f0b795efa54f771a6d19db8675a1efa5cd Mon Sep 17 00:00:00 2001 From: elweyn Date: Mon, 3 Apr 2023 14:58:26 +0200 Subject: [PATCH 17/26] Implement callKlickTippAPI --- backend/src/apis/KlicktippController.ts | 178 ++++++++++++++---------- 1 file changed, 103 insertions(+), 75 deletions(-) diff --git a/backend/src/apis/KlicktippController.ts b/backend/src/apis/KlicktippController.ts index 1278b0d9c..d414bb9ec 100644 --- a/backend/src/apis/KlicktippController.ts +++ b/backend/src/apis/KlicktippController.ts @@ -4,107 +4,135 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +/* eslint-disable @typescript-eslint/restrict-template-expressions */ import CONFIG from '@/config' +import LogError from '@/server/LogError' // eslint-disable-next-line import/no-relative-parent-imports import KlicktippConnector from 'klicktipp-api' const klicktippConnector = new KlicktippConnector() -export const klicktippSignIn = async ( +const callKlickTippAPI = (callback: (arg0: any) => any, args: any) => { + if (!CONFIG.KLICKTIPP) { + return true + } + return callback(args) +} + +export const klicktippSignIn = ( email: string, language: string, firstName?: string, lastName?: string, ): Promise => { - if (!CONFIG.KLICKTIPP) { - return true - } - const fields = { - fieldFirstName: firstName, - fieldLastName: lastName, - } - const apiKey = language === 'de' ? CONFIG.KLICKTIPP_APIKEY_DE : CONFIG.KLICKTIPP_APIKEY_EN - const result = await klicktippConnector.signin(apiKey, email, fields) - return result + return callKlickTippAPI( + ({ fieldFirstName, fieldLastName, language, email }) => { + const fields = { + fieldFirstName, + fieldLastName, + } + const apiKey = language === 'de' ? CONFIG.KLICKTIPP_APIKEY_DE : CONFIG.KLICKTIPP_APIKEY_EN + return klicktippConnector.signin(apiKey, email, fields) + }, + { + fieldFirstName: firstName, + fieldLastName: lastName, + language, + email, + }, + ) } -export const signout = async (email: string, language: string): Promise => { - if (!CONFIG.KLICKTIPP) { - return true - } - const apiKey = language === 'de' ? CONFIG.KLICKTIPP_APIKEY_DE : CONFIG.KLICKTIPP_APIKEY_EN - const result = await klicktippConnector.signoff(apiKey, email) - return result +export const signout = (email: string, language: string): Promise => { + return callKlickTippAPI( + async ({ language, email }) => { + const apiKey = language === 'de' ? CONFIG.KLICKTIPP_APIKEY_DE : CONFIG.KLICKTIPP_APIKEY_EN + const result = await klicktippConnector.signoff(apiKey, email) + return result + }, + { + email, + language, + }, + ) } -export const unsubscribe = async (email: string): Promise => { - if (!CONFIG.KLICKTIPP) { - return true - } - const isLogin = await loginKlicktippUser() - if (isLogin) { - return await klicktippConnector.unsubscribe(email) - } - throw new Error(`Could not unsubscribe ${email}`) +export const unsubscribe = (email: string): Promise => { + return callKlickTippAPI( + async ({ email }) => { + const isLogin = await loginKlicktippUser() + if (isLogin) { + return klicktippConnector.unsubscribe(email) + } + throw new LogError(`Could not unsubscribe ${email}`) + }, + { + email, + }, + ) } -export const getKlickTippUser = async (email: string): Promise => { - if (!CONFIG.KLICKTIPP) { - return true - } - const isLogin = await loginKlicktippUser() - if (isLogin) { - const subscriberId = await klicktippConnector.subscriberSearch(email) - const result = await klicktippConnector.subscriberGet(subscriberId) - return result - } - return false +export const getKlickTippUser = (email: string): Promise => { + return callKlickTippAPI( + async ({ email }) => { + const isLogin = await loginKlicktippUser() + if (isLogin) { + const subscriberId = await klicktippConnector.subscriberSearch(email) + return klicktippConnector.subscriberGet(subscriberId) + } + throw new LogError(`Could not get subscriber ${email}`) + }, + { + email, + }, + ) } -export const loginKlicktippUser = async (): Promise => { - if (!CONFIG.KLICKTIPP) { - return true - } - return await klicktippConnector.login(CONFIG.KLICKTIPP_USER, CONFIG.KLICKTIPP_PASSWORD) +export const loginKlicktippUser = (): Promise => { + return callKlickTippAPI(() => { + return klicktippConnector.login(CONFIG.KLICKTIPP_USER, CONFIG.KLICKTIPP_PASSWORD) + }, {}) } -export const logoutKlicktippUser = async (): Promise => { - if (!CONFIG.KLICKTIPP) { - return true - } - return await klicktippConnector.logout() +export const logoutKlicktippUser = (): Promise => { + return callKlickTippAPI(() => { + return klicktippConnector.logout() + }, {}) } -export const untagUser = async (email: string, tagId: string): Promise => { - if (!CONFIG.KLICKTIPP) { - return true - } - const isLogin = await loginKlicktippUser() - if (isLogin) { - return await klicktippConnector.untag(email, tagId) - } - return false +export const untagUser = (email: string, tagId: string): Promise => { + return callKlickTippAPI( + async ({ email, tagId }) => { + const isLogin = await loginKlicktippUser() + if (isLogin) { + return await klicktippConnector.untag(email, tagId) + } + throw new LogError(`Could not untag ${email}`) + }, + { email, tagId }, + ) } -export const tagUser = async (email: string, tagIds: string): Promise => { - if (!CONFIG.KLICKTIPP) { - return true - } - const isLogin = await loginKlicktippUser() - if (isLogin) { - return await klicktippConnector.tag(email, tagIds) - } - return false +export const tagUser = (email: string, tagIds: string): Promise => { + return callKlickTippAPI( + async ({ email, tagIds }) => { + const isLogin = await loginKlicktippUser() + if (isLogin) { + return klicktippConnector.tag(email, tagIds) + } + throw new LogError(`Could not tag ${email}`) + }, + { email, tagIds }, + ) } -export const getKlicktippTagMap = async () => { - if (!CONFIG.KLICKTIPP) { - return '' - } - const isLogin = await loginKlicktippUser() - if (isLogin) { - return await klicktippConnector.tagIndex() - } - return '' +export const getKlicktippTagMap = (): Promise => { + return callKlickTippAPI(async () => { + const isLogin = await loginKlicktippUser() + if (isLogin) { + return klicktippConnector.tagIndex() + } + throw new LogError(`Could not get tagIndexes`) + }, {}) } From 7df35f057b792cc25ca95a3691b86527878096c0 Mon Sep 17 00:00:00 2001 From: elweyn Date: Tue, 4 Apr 2023 17:07:01 +0200 Subject: [PATCH 18/26] Revert "Implement callKlickTippAPI" This reverts commit 51d572f0b795efa54f771a6d19db8675a1efa5cd. --- backend/src/apis/KlicktippController.ts | 178 ++++++++++-------------- 1 file changed, 75 insertions(+), 103 deletions(-) diff --git a/backend/src/apis/KlicktippController.ts b/backend/src/apis/KlicktippController.ts index d414bb9ec..1278b0d9c 100644 --- a/backend/src/apis/KlicktippController.ts +++ b/backend/src/apis/KlicktippController.ts @@ -4,135 +4,107 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ -/* eslint-disable @typescript-eslint/restrict-template-expressions */ import CONFIG from '@/config' -import LogError from '@/server/LogError' // eslint-disable-next-line import/no-relative-parent-imports import KlicktippConnector from 'klicktipp-api' const klicktippConnector = new KlicktippConnector() -const callKlickTippAPI = (callback: (arg0: any) => any, args: any) => { - if (!CONFIG.KLICKTIPP) { - return true - } - return callback(args) -} - -export const klicktippSignIn = ( +export const klicktippSignIn = async ( email: string, language: string, firstName?: string, lastName?: string, ): Promise => { - return callKlickTippAPI( - ({ fieldFirstName, fieldLastName, language, email }) => { - const fields = { - fieldFirstName, - fieldLastName, - } - const apiKey = language === 'de' ? CONFIG.KLICKTIPP_APIKEY_DE : CONFIG.KLICKTIPP_APIKEY_EN - return klicktippConnector.signin(apiKey, email, fields) - }, - { - fieldFirstName: firstName, - fieldLastName: lastName, - language, - email, - }, - ) + if (!CONFIG.KLICKTIPP) { + return true + } + const fields = { + fieldFirstName: firstName, + fieldLastName: lastName, + } + const apiKey = language === 'de' ? CONFIG.KLICKTIPP_APIKEY_DE : CONFIG.KLICKTIPP_APIKEY_EN + const result = await klicktippConnector.signin(apiKey, email, fields) + return result } -export const signout = (email: string, language: string): Promise => { - return callKlickTippAPI( - async ({ language, email }) => { - const apiKey = language === 'de' ? CONFIG.KLICKTIPP_APIKEY_DE : CONFIG.KLICKTIPP_APIKEY_EN - const result = await klicktippConnector.signoff(apiKey, email) - return result - }, - { - email, - language, - }, - ) +export const signout = async (email: string, language: string): Promise => { + if (!CONFIG.KLICKTIPP) { + return true + } + const apiKey = language === 'de' ? CONFIG.KLICKTIPP_APIKEY_DE : CONFIG.KLICKTIPP_APIKEY_EN + const result = await klicktippConnector.signoff(apiKey, email) + return result } -export const unsubscribe = (email: string): Promise => { - return callKlickTippAPI( - async ({ email }) => { - const isLogin = await loginKlicktippUser() - if (isLogin) { - return klicktippConnector.unsubscribe(email) - } - throw new LogError(`Could not unsubscribe ${email}`) - }, - { - email, - }, - ) +export const unsubscribe = async (email: string): Promise => { + if (!CONFIG.KLICKTIPP) { + return true + } + const isLogin = await loginKlicktippUser() + if (isLogin) { + return await klicktippConnector.unsubscribe(email) + } + throw new Error(`Could not unsubscribe ${email}`) } -export const getKlickTippUser = (email: string): Promise => { - return callKlickTippAPI( - async ({ email }) => { - const isLogin = await loginKlicktippUser() - if (isLogin) { - const subscriberId = await klicktippConnector.subscriberSearch(email) - return klicktippConnector.subscriberGet(subscriberId) - } - throw new LogError(`Could not get subscriber ${email}`) - }, - { - email, - }, - ) +export const getKlickTippUser = async (email: string): Promise => { + if (!CONFIG.KLICKTIPP) { + return true + } + const isLogin = await loginKlicktippUser() + if (isLogin) { + const subscriberId = await klicktippConnector.subscriberSearch(email) + const result = await klicktippConnector.subscriberGet(subscriberId) + return result + } + return false } -export const loginKlicktippUser = (): Promise => { - return callKlickTippAPI(() => { - return klicktippConnector.login(CONFIG.KLICKTIPP_USER, CONFIG.KLICKTIPP_PASSWORD) - }, {}) +export const loginKlicktippUser = async (): Promise => { + if (!CONFIG.KLICKTIPP) { + return true + } + return await klicktippConnector.login(CONFIG.KLICKTIPP_USER, CONFIG.KLICKTIPP_PASSWORD) } -export const logoutKlicktippUser = (): Promise => { - return callKlickTippAPI(() => { - return klicktippConnector.logout() - }, {}) +export const logoutKlicktippUser = async (): Promise => { + if (!CONFIG.KLICKTIPP) { + return true + } + return await klicktippConnector.logout() } -export const untagUser = (email: string, tagId: string): Promise => { - return callKlickTippAPI( - async ({ email, tagId }) => { - const isLogin = await loginKlicktippUser() - if (isLogin) { - return await klicktippConnector.untag(email, tagId) - } - throw new LogError(`Could not untag ${email}`) - }, - { email, tagId }, - ) +export const untagUser = async (email: string, tagId: string): Promise => { + if (!CONFIG.KLICKTIPP) { + return true + } + const isLogin = await loginKlicktippUser() + if (isLogin) { + return await klicktippConnector.untag(email, tagId) + } + return false } -export const tagUser = (email: string, tagIds: string): Promise => { - return callKlickTippAPI( - async ({ email, tagIds }) => { - const isLogin = await loginKlicktippUser() - if (isLogin) { - return klicktippConnector.tag(email, tagIds) - } - throw new LogError(`Could not tag ${email}`) - }, - { email, tagIds }, - ) +export const tagUser = async (email: string, tagIds: string): Promise => { + if (!CONFIG.KLICKTIPP) { + return true + } + const isLogin = await loginKlicktippUser() + if (isLogin) { + return await klicktippConnector.tag(email, tagIds) + } + return false } -export const getKlicktippTagMap = (): Promise => { - return callKlickTippAPI(async () => { - const isLogin = await loginKlicktippUser() - if (isLogin) { - return klicktippConnector.tagIndex() - } - throw new LogError(`Could not get tagIndexes`) - }, {}) +export const getKlicktippTagMap = async () => { + if (!CONFIG.KLICKTIPP) { + return '' + } + const isLogin = await loginKlicktippUser() + if (isLogin) { + return await klicktippConnector.tagIndex() + } + return '' } From b00c518863e81e30291eaf10d285efacec1c4b65 Mon Sep 17 00:00:00 2001 From: elweyn Date: Tue, 4 Apr 2023 17:09:32 +0200 Subject: [PATCH 19/26] Implement callKlickTippAPI --- backend/src/apis/KlicktippController.ts | 36 +++++++------------------ 1 file changed, 9 insertions(+), 27 deletions(-) diff --git a/backend/src/apis/KlicktippController.ts b/backend/src/apis/KlicktippController.ts index 1278b0d9c..a0fc6e06f 100644 --- a/backend/src/apis/KlicktippController.ts +++ b/backend/src/apis/KlicktippController.ts @@ -17,9 +17,7 @@ export const klicktippSignIn = async ( firstName?: string, lastName?: string, ): Promise => { - if (!CONFIG.KLICKTIPP) { - return true - } + if (!CONFIG.KLICKTIPP) return true const fields = { fieldFirstName: firstName, fieldLastName: lastName, @@ -30,18 +28,14 @@ export const klicktippSignIn = async ( } export const signout = async (email: string, language: string): Promise => { - if (!CONFIG.KLICKTIPP) { - return true - } + if (!CONFIG.KLICKTIPP) return true const apiKey = language === 'de' ? CONFIG.KLICKTIPP_APIKEY_DE : CONFIG.KLICKTIPP_APIKEY_EN const result = await klicktippConnector.signoff(apiKey, email) return result } export const unsubscribe = async (email: string): Promise => { - if (!CONFIG.KLICKTIPP) { - return true - } + if (!CONFIG.KLICKTIPP) return true const isLogin = await loginKlicktippUser() if (isLogin) { return await klicktippConnector.unsubscribe(email) @@ -50,9 +44,7 @@ export const unsubscribe = async (email: string): Promise => { } export const getKlickTippUser = async (email: string): Promise => { - if (!CONFIG.KLICKTIPP) { - return true - } + if (!CONFIG.KLICKTIPP) return true const isLogin = await loginKlicktippUser() if (isLogin) { const subscriberId = await klicktippConnector.subscriberSearch(email) @@ -63,23 +55,17 @@ export const getKlickTippUser = async (email: string): Promise => { } export const loginKlicktippUser = async (): Promise => { - if (!CONFIG.KLICKTIPP) { - return true - } + if (!CONFIG.KLICKTIPP) return true return await klicktippConnector.login(CONFIG.KLICKTIPP_USER, CONFIG.KLICKTIPP_PASSWORD) } export const logoutKlicktippUser = async (): Promise => { - if (!CONFIG.KLICKTIPP) { - return true - } + if (!CONFIG.KLICKTIPP) return true return await klicktippConnector.logout() } export const untagUser = async (email: string, tagId: string): Promise => { - if (!CONFIG.KLICKTIPP) { - return true - } + if (!CONFIG.KLICKTIPP) return true const isLogin = await loginKlicktippUser() if (isLogin) { return await klicktippConnector.untag(email, tagId) @@ -88,9 +74,7 @@ export const untagUser = async (email: string, tagId: string): Promise } export const tagUser = async (email: string, tagIds: string): Promise => { - if (!CONFIG.KLICKTIPP) { - return true - } + if (!CONFIG.KLICKTIPP) return true const isLogin = await loginKlicktippUser() if (isLogin) { return await klicktippConnector.tag(email, tagIds) @@ -99,9 +83,7 @@ export const tagUser = async (email: string, tagIds: string): Promise = } export const getKlicktippTagMap = async () => { - if (!CONFIG.KLICKTIPP) { - return '' - } + if (!CONFIG.KLICKTIPP) return true const isLogin = await loginKlicktippUser() if (isLogin) { return await klicktippConnector.tagIndex() From 1505d9abf06163e3d3535c481148d9910e765bef Mon Sep 17 00:00:00 2001 From: elweyn Date: Wed, 5 Apr 2023 10:43:42 +0200 Subject: [PATCH 20/26] Change ACTION_NEWSLETTER to NEWSLETTER_ACTION --- ...UBSCRIBE_NEWSLETTER.ts => EVENT_NEWSLETTER_SUBSCRIBE.ts} | 4 ++-- ...SCRIBE_NEWSLETTER.ts => EVENT_NEWSLETTER_UNSUBSCRIBE.ts} | 4 ++-- backend/src/event/Event.ts | 4 ++-- backend/src/event/EventType.ts | 4 ++-- backend/src/graphql/resolver/KlicktippResolver.ts | 6 +++--- 5 files changed, 11 insertions(+), 11 deletions(-) rename backend/src/event/{EVENT_SUBSCRIBE_NEWSLETTER.ts => EVENT_NEWSLETTER_SUBSCRIBE.ts} (56%) rename backend/src/event/{EVENT_UNSUBSCRIBE_NEWSLETTER.ts => EVENT_NEWSLETTER_UNSUBSCRIBE.ts} (56%) diff --git a/backend/src/event/EVENT_SUBSCRIBE_NEWSLETTER.ts b/backend/src/event/EVENT_NEWSLETTER_SUBSCRIBE.ts similarity index 56% rename from backend/src/event/EVENT_SUBSCRIBE_NEWSLETTER.ts rename to backend/src/event/EVENT_NEWSLETTER_SUBSCRIBE.ts index a9656b6fa..51fb3d186 100644 --- a/backend/src/event/EVENT_SUBSCRIBE_NEWSLETTER.ts +++ b/backend/src/event/EVENT_NEWSLETTER_SUBSCRIBE.ts @@ -3,5 +3,5 @@ import { User as DbUser } from '@entity/User' import { Event, EventType } from './Event' -export const EVENT_SUBSCRIBE_NEWSLETTER = async (user: DbUser): Promise => - Event(EventType.SUBSCRIBE_NEWSLETTER, user, user).save() +export const EVENT_NEWSLETTER_SUBSCRIBE = async (user: DbUser): Promise => + Event(EventType.NEWSLETTER_SUBSCRIBE, user, user).save() diff --git a/backend/src/event/EVENT_UNSUBSCRIBE_NEWSLETTER.ts b/backend/src/event/EVENT_NEWSLETTER_UNSUBSCRIBE.ts similarity index 56% rename from backend/src/event/EVENT_UNSUBSCRIBE_NEWSLETTER.ts rename to backend/src/event/EVENT_NEWSLETTER_UNSUBSCRIBE.ts index 1b2561894..4e4d3e9e4 100644 --- a/backend/src/event/EVENT_UNSUBSCRIBE_NEWSLETTER.ts +++ b/backend/src/event/EVENT_NEWSLETTER_UNSUBSCRIBE.ts @@ -3,5 +3,5 @@ import { User as DbUser } from '@entity/User' import { Event, EventType } from './Event' -export const EVENT_UNSUBSCRIBE_NEWSLETTER = async (user: DbUser): Promise => - Event(EventType.UNSUBSCRIBE_NEWSLETTER, user, user).save() +export const EVENT_NEWSLETTER_UNSUBSCRIBE = async (user: DbUser): Promise => + Event(EventType.NEWSLETTER_UNSUBSCRIBE, user, user).save() diff --git a/backend/src/event/Event.ts b/backend/src/event/Event.ts index 05c0a78a9..2064a91f0 100644 --- a/backend/src/event/Event.ts +++ b/backend/src/event/Event.ts @@ -58,13 +58,13 @@ export { EVENT_EMAIL_ACCOUNT_MULTIREGISTRATION } from './EVENT_EMAIL_ACCOUNT_MUL export { EVENT_EMAIL_ADMIN_CONFIRMATION } from './EVENT_EMAIL_ADMIN_CONFIRMATION' export { EVENT_EMAIL_CONFIRMATION } from './EVENT_EMAIL_CONFIRMATION' export { EVENT_EMAIL_FORGOT_PASSWORD } from './EVENT_EMAIL_FORGOT_PASSWORD' -export { EVENT_SUBSCRIBE_NEWSLETTER } from './EVENT_SUBSCRIBE_NEWSLETTER' +export { EVENT_NEWSLETTER_SUBSCRIBE } from './EVENT_NEWSLETTER_SUBSCRIBE' export { EVENT_TRANSACTION_SEND } from './EVENT_TRANSACTION_SEND' export { EVENT_TRANSACTION_RECEIVE } from './EVENT_TRANSACTION_RECEIVE' export { EVENT_TRANSACTION_LINK_CREATE } from './EVENT_TRANSACTION_LINK_CREATE' export { EVENT_TRANSACTION_LINK_DELETE } from './EVENT_TRANSACTION_LINK_DELETE' export { EVENT_TRANSACTION_LINK_REDEEM } from './EVENT_TRANSACTION_LINK_REDEEM' -export { EVENT_UNSUBSCRIBE_NEWSLETTER } from './EVENT_UNSUBSCRIBE_NEWSLETTER' +export { EVENT_NEWSLETTER_UNSUBSCRIBE } from './EVENT_NEWSLETTER_UNSUBSCRIBE' export { EVENT_USER_ACTIVATE_ACCOUNT } from './EVENT_USER_ACTIVATE_ACCOUNT' export { EVENT_USER_INFO_UPDATE } from './EVENT_USER_INFO_UPDATE' export { EVENT_USER_LOGIN } from './EVENT_USER_LOGIN' diff --git a/backend/src/event/EventType.ts b/backend/src/event/EventType.ts index 137bbfa09..b2b6f9322 100644 --- a/backend/src/event/EventType.ts +++ b/backend/src/event/EventType.ts @@ -21,13 +21,13 @@ export enum EventType { EMAIL_ADMIN_CONFIRMATION = 'EMAIL_ADMIN_CONFIRMATION', EMAIL_CONFIRMATION = 'EMAIL_CONFIRMATION', EMAIL_FORGOT_PASSWORD = 'EMAIL_FORGOT_PASSWORD', - SUBSCRIBE_NEWSLETTER = 'SUBSCRIBE_NEWSLETTER', + NEWSLETTER_SUBSCRIBE = 'NEWSLETTER_SUBSCRIBE', + NEWSLETTER_UNSUBSCRIBE = 'NEWSLETTER_UNSUBSCRIBE', TRANSACTION_SEND = 'TRANSACTION_SEND', TRANSACTION_RECEIVE = 'TRANSACTION_RECEIVE', TRANSACTION_LINK_CREATE = 'TRANSACTION_LINK_CREATE', TRANSACTION_LINK_DELETE = 'TRANSACTION_LINK_DELETE', TRANSACTION_LINK_REDEEM = 'TRANSACTION_LINK_REDEEM', - UNSUBSCRIBE_NEWSLETTER = 'UNSUBSCRIBE_NEWSLETTER', USER_ACTIVATE_ACCOUNT = 'ACTIVATE_ACCOUNT', USER_INFO_UPDATE = 'USER_INFO_UPDATE', USER_LOGIN = 'USER_LOGIN', diff --git a/backend/src/graphql/resolver/KlicktippResolver.ts b/backend/src/graphql/resolver/KlicktippResolver.ts index 03b591c4d..cb09822cf 100644 --- a/backend/src/graphql/resolver/KlicktippResolver.ts +++ b/backend/src/graphql/resolver/KlicktippResolver.ts @@ -2,7 +2,7 @@ import { Resolver, Authorized, Mutation, Ctx } from 'type-graphql' import { unsubscribe, klicktippSignIn } from '@/apis/KlicktippController' import { RIGHTS } from '@/auth/RIGHTS' -import { EVENT_UNSUBSCRIBE_NEWSLETTER, EVENT_SUBSCRIBE_NEWSLETTER } from '@/event/Event' +import { EVENT_NEWSLETTER_SUBSCRIBE, EVENT_NEWSLETTER_UNSUBSCRIBE } from '@/event/Event' import { Context, getUser } from '@/server/context' @Resolver() @@ -11,7 +11,7 @@ export class KlicktippResolver { @Mutation(() => Boolean) async unsubscribeNewsletter(@Ctx() context: Context): Promise { const user = getUser(context) - await EVENT_UNSUBSCRIBE_NEWSLETTER(user) + await EVENT_NEWSLETTER_UNSUBSCRIBE(user) return unsubscribe(user.emailContact.email) } @@ -19,7 +19,7 @@ export class KlicktippResolver { @Mutation(() => Boolean) async subscribeNewsletter(@Ctx() context: Context): Promise { const user = getUser(context) - await EVENT_SUBSCRIBE_NEWSLETTER(user) + await EVENT_NEWSLETTER_SUBSCRIBE(user) return klicktippSignIn(user.emailContact.email, user.language) } } From 50574ece6b5c364185d8de89e363653a2ec52e5a Mon Sep 17 00:00:00 2001 From: Hannes Heine Date: Thu, 6 Apr 2023 14:52:58 +0200 Subject: [PATCH 21/26] Update backend/src/graphql/resolver/KlicktippResolver.test.ts Co-authored-by: Ulf Gebhardt --- backend/src/graphql/resolver/KlicktippResolver.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/graphql/resolver/KlicktippResolver.test.ts b/backend/src/graphql/resolver/KlicktippResolver.test.ts index 02b3e0492..79bc2f218 100644 --- a/backend/src/graphql/resolver/KlicktippResolver.test.ts +++ b/backend/src/graphql/resolver/KlicktippResolver.test.ts @@ -119,7 +119,7 @@ describe('KlicktippResolver', () => { expect(isUnsubscribed).toEqual(true) }) - it('stores the UNSUBSCRIBE_NEWSLETTER event in the database', async () => { + it('stores the NEWSLETTER_UNSUBSCRIBE event in the database', async () => { const userConatct = await UserContact.findOneOrFail( { email: 'bibi@bloxberg.de' }, { relations: ['user'] }, From 3990135c7a02dca9e9b6f7e27d4027f6fac92b35 Mon Sep 17 00:00:00 2001 From: Hannes Heine Date: Thu, 6 Apr 2023 14:53:09 +0200 Subject: [PATCH 22/26] Update backend/src/graphql/resolver/KlicktippResolver.test.ts Co-authored-by: Ulf Gebhardt --- backend/src/graphql/resolver/KlicktippResolver.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/graphql/resolver/KlicktippResolver.test.ts b/backend/src/graphql/resolver/KlicktippResolver.test.ts index 79bc2f218..62dee84b0 100644 --- a/backend/src/graphql/resolver/KlicktippResolver.test.ts +++ b/backend/src/graphql/resolver/KlicktippResolver.test.ts @@ -70,7 +70,7 @@ describe('KlicktippResolver', () => { expect(isSubscribed).toEqual(true) }) - it('stores the SUBSCRIBE_NEWSLETTER event in the database', async () => { + it('stores the NEWSLETTER_SUBSCRIBE event in the database', async () => { const userConatct = await UserContact.findOneOrFail( { email: 'bibi@bloxberg.de' }, { relations: ['user'] }, From f36bc61a7024b55bdc357b859a21d5fbc5a47009 Mon Sep 17 00:00:00 2001 From: Hannes Heine Date: Thu, 6 Apr 2023 14:53:24 +0200 Subject: [PATCH 23/26] Update backend/src/graphql/resolver/KlicktippResolver.test.ts Co-authored-by: Ulf Gebhardt --- backend/src/graphql/resolver/KlicktippResolver.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/graphql/resolver/KlicktippResolver.test.ts b/backend/src/graphql/resolver/KlicktippResolver.test.ts index 62dee84b0..322131480 100644 --- a/backend/src/graphql/resolver/KlicktippResolver.test.ts +++ b/backend/src/graphql/resolver/KlicktippResolver.test.ts @@ -126,7 +126,7 @@ describe('KlicktippResolver', () => { ) await expect(DbEvent.find()).resolves.toContainEqual( expect.objectContaining({ - type: EventType.UNSUBSCRIBE_NEWSLETTER, + type: EventType.NEWSLETTER_UNSUBSCRIBE, affectedUserId: userConatct.user.id, actingUserId: userConatct.user.id, }), From 7d12ecbe9845570e3f0f71360af65aad4cbd98a1 Mon Sep 17 00:00:00 2001 From: Hannes Heine Date: Thu, 6 Apr 2023 14:53:35 +0200 Subject: [PATCH 24/26] Update backend/src/graphql/resolver/KlicktippResolver.test.ts Co-authored-by: Ulf Gebhardt --- backend/src/graphql/resolver/KlicktippResolver.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/graphql/resolver/KlicktippResolver.test.ts b/backend/src/graphql/resolver/KlicktippResolver.test.ts index 322131480..20669d242 100644 --- a/backend/src/graphql/resolver/KlicktippResolver.test.ts +++ b/backend/src/graphql/resolver/KlicktippResolver.test.ts @@ -77,7 +77,7 @@ describe('KlicktippResolver', () => { ) await expect(DbEvent.find()).resolves.toContainEqual( expect.objectContaining({ - type: EventType.SUBSCRIBE_NEWSLETTER, + type: EventType.NEWSLETTER_SUBSCRIBE, affectedUserId: userConatct.user.id, actingUserId: userConatct.user.id, }), From 525a560832a3abf498a5e78adbbc19111950fb39 Mon Sep 17 00:00:00 2001 From: Hannes Heine Date: Thu, 6 Apr 2023 14:53:51 +0200 Subject: [PATCH 25/26] Update backend/src/event/Event.ts Co-authored-by: Ulf Gebhardt --- backend/src/event/Event.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/event/Event.ts b/backend/src/event/Event.ts index 2064a91f0..4bebac1c0 100644 --- a/backend/src/event/Event.ts +++ b/backend/src/event/Event.ts @@ -59,12 +59,12 @@ export { EVENT_EMAIL_ADMIN_CONFIRMATION } from './EVENT_EMAIL_ADMIN_CONFIRMATION export { EVENT_EMAIL_CONFIRMATION } from './EVENT_EMAIL_CONFIRMATION' export { EVENT_EMAIL_FORGOT_PASSWORD } from './EVENT_EMAIL_FORGOT_PASSWORD' export { EVENT_NEWSLETTER_SUBSCRIBE } from './EVENT_NEWSLETTER_SUBSCRIBE' +export { EVENT_NEWSLETTER_UNSUBSCRIBE } from './EVENT_NEWSLETTER_UNSUBSCRIBE' export { EVENT_TRANSACTION_SEND } from './EVENT_TRANSACTION_SEND' export { EVENT_TRANSACTION_RECEIVE } from './EVENT_TRANSACTION_RECEIVE' export { EVENT_TRANSACTION_LINK_CREATE } from './EVENT_TRANSACTION_LINK_CREATE' export { EVENT_TRANSACTION_LINK_DELETE } from './EVENT_TRANSACTION_LINK_DELETE' export { EVENT_TRANSACTION_LINK_REDEEM } from './EVENT_TRANSACTION_LINK_REDEEM' -export { EVENT_NEWSLETTER_UNSUBSCRIBE } from './EVENT_NEWSLETTER_UNSUBSCRIBE' export { EVENT_USER_ACTIVATE_ACCOUNT } from './EVENT_USER_ACTIVATE_ACCOUNT' export { EVENT_USER_INFO_UPDATE } from './EVENT_USER_INFO_UPDATE' export { EVENT_USER_LOGIN } from './EVENT_USER_LOGIN' From d9e8247b3c0d6249b9a307d30a29c2afafb441e0 Mon Sep 17 00:00:00 2001 From: elweyn Date: Thu, 6 Apr 2023 15:12:08 +0200 Subject: [PATCH 26/26] Fix event no-cycle. --- backend/src/event/EVENT_NEWSLETTER_SUBSCRIBE.ts | 3 ++- backend/src/event/EVENT_NEWSLETTER_UNSUBSCRIBE.ts | 3 ++- backend/src/graphql/resolver/KlicktippResolver.test.ts | 3 ++- backend/src/graphql/resolver/KlicktippResolver.ts | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/backend/src/event/EVENT_NEWSLETTER_SUBSCRIBE.ts b/backend/src/event/EVENT_NEWSLETTER_SUBSCRIBE.ts index 51fb3d186..717bb8296 100644 --- a/backend/src/event/EVENT_NEWSLETTER_SUBSCRIBE.ts +++ b/backend/src/event/EVENT_NEWSLETTER_SUBSCRIBE.ts @@ -1,7 +1,8 @@ import { Event as DbEvent } from '@entity/Event' import { User as DbUser } from '@entity/User' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_NEWSLETTER_SUBSCRIBE = async (user: DbUser): Promise => Event(EventType.NEWSLETTER_SUBSCRIBE, user, user).save() diff --git a/backend/src/event/EVENT_NEWSLETTER_UNSUBSCRIBE.ts b/backend/src/event/EVENT_NEWSLETTER_UNSUBSCRIBE.ts index 4e4d3e9e4..f8adc69d1 100644 --- a/backend/src/event/EVENT_NEWSLETTER_UNSUBSCRIBE.ts +++ b/backend/src/event/EVENT_NEWSLETTER_UNSUBSCRIBE.ts @@ -1,7 +1,8 @@ import { Event as DbEvent } from '@entity/Event' import { User as DbUser } from '@entity/User' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_NEWSLETTER_UNSUBSCRIBE = async (user: DbUser): Promise => Event(EventType.NEWSLETTER_UNSUBSCRIBE, user, user).save() diff --git a/backend/src/graphql/resolver/KlicktippResolver.test.ts b/backend/src/graphql/resolver/KlicktippResolver.test.ts index 20669d242..6a2250bc9 100644 --- a/backend/src/graphql/resolver/KlicktippResolver.test.ts +++ b/backend/src/graphql/resolver/KlicktippResolver.test.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-unsafe-argument */ /* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-unsafe-call */ @@ -9,7 +10,7 @@ import { GraphQLError } from 'graphql' import { cleanDB, resetToken, testEnvironment } from '@test/helpers' import { logger, i18n as localization } from '@test/testSetup' -import { EventType } from '@/event/Event' +import { EventType } from '@/event/Events' import { userFactory } from '@/seeds/factory/user' import { login, subscribeNewsletter, unsubscribeNewsletter } from '@/seeds/graphql/mutations' import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' diff --git a/backend/src/graphql/resolver/KlicktippResolver.ts b/backend/src/graphql/resolver/KlicktippResolver.ts index cb09822cf..6875abcc5 100644 --- a/backend/src/graphql/resolver/KlicktippResolver.ts +++ b/backend/src/graphql/resolver/KlicktippResolver.ts @@ -2,7 +2,7 @@ import { Resolver, Authorized, Mutation, Ctx } from 'type-graphql' import { unsubscribe, klicktippSignIn } from '@/apis/KlicktippController' import { RIGHTS } from '@/auth/RIGHTS' -import { EVENT_NEWSLETTER_SUBSCRIBE, EVENT_NEWSLETTER_UNSUBSCRIBE } from '@/event/Event' +import { EVENT_NEWSLETTER_SUBSCRIBE, EVENT_NEWSLETTER_UNSUBSCRIBE } from '@/event/Events' import { Context, getUser } from '@/server/context' @Resolver()