diff --git a/backend/src/graphql/resolver/ContributionResolver.test.ts b/backend/src/graphql/resolver/ContributionResolver.test.ts index d4c84b4f3..42fe79ff0 100644 --- a/backend/src/graphql/resolver/ContributionResolver.test.ts +++ b/backend/src/graphql/resolver/ContributionResolver.test.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { Connection } from '@dbTools/typeorm' +import { Connection, Equal } from '@dbTools/typeorm' import { Contribution } from '@entity/Contribution' import { Event as DbEvent } from '@entity/Event' import { Transaction as DbTransaction } from '@entity/Transaction' @@ -457,7 +457,7 @@ describe('ContributionResolver', () => { describe('contribution has wrong status', () => { beforeAll(async () => { const contribution = await Contribution.findOneOrFail({ - id: pendingContribution.data.createContribution.id, + where: { id: pendingContribution.data.createContribution.id }, }) contribution.contributionStatus = ContributionStatus.DELETED await contribution.save() @@ -469,7 +469,7 @@ describe('ContributionResolver', () => { afterAll(async () => { const contribution = await Contribution.findOneOrFail({ - id: pendingContribution.data.createContribution.id, + where: { id: pendingContribution.data.createContribution.id }, }) contribution.contributionStatus = ContributionStatus.PENDING await contribution.save() @@ -1828,7 +1828,7 @@ describe('ContributionResolver', () => { creation = await Contribution.findOneOrFail({ where: { memo: 'Herzlich Willkommen bei Gradido!', - amount: 400, + amount: Equal(new Decimal('400')), }, }) }) diff --git a/backend/src/graphql/resolver/TransactionResolver.test.ts b/backend/src/graphql/resolver/TransactionResolver.test.ts index 96d434a29..60445e239 100644 --- a/backend/src/graphql/resolver/TransactionResolver.test.ts +++ b/backend/src/graphql/resolver/TransactionResolver.test.ts @@ -346,8 +346,10 @@ describe('send coins', () => { it('stores the TRANSACTION_SEND event in the database', async () => { // Find the exact transaction (sent one is the one with user[1] as user) const transaction = await Transaction.find({ - userId: user[1].id, - memo: 'unrepeatable memo', + where: { + userId: user[1].id, + memo: 'unrepeatable memo', + }, }) await expect(DbEvent.find()).resolves.toContainEqual( @@ -364,8 +366,10 @@ describe('send coins', () => { it('stores the TRANSACTION_RECEIVE event in the database', async () => { // Find the exact transaction (received one is the one with user[0] as user) const transaction = await Transaction.find({ - userId: user[0].id, - memo: 'unrepeatable memo', + where: { + userId: user[0].id, + memo: 'unrepeatable memo', + }, }) await expect(DbEvent.find()).resolves.toContainEqual( diff --git a/backend/src/graphql/resolver/UserResolver.test.ts b/backend/src/graphql/resolver/UserResolver.test.ts index 0384b64c5..bebaa912c 100644 --- a/backend/src/graphql/resolver/UserResolver.test.ts +++ b/backend/src/graphql/resolver/UserResolver.test.ts @@ -195,10 +195,12 @@ describe('UserResolver', () => { }) it('stores the USER_REGISTER event in the database', async () => { - const userConatct = await UserContact.findOneOrFail( - { email: 'peter@lustig.de' }, - { relations: ['user'] }, - ) + const userConatct = await UserContact.findOneOrFail({ + where: { + email: 'peter@lustig.de', + }, + relations: ['user'], + }) await expect(DbEvent.find()).resolves.toContainEqual( expect.objectContaining({ type: EventType.USER_REGISTER, @@ -271,10 +273,10 @@ describe('UserResolver', () => { }) it('stores the EMAIL_ACCOUNT_MULTIREGISTRATION event in the database', async () => { - const userConatct = await UserContact.findOneOrFail( - { email: 'peter@lustig.de' }, - { relations: ['user'] }, - ) + const userConatct = await UserContact.findOneOrFail({ + where: { email: 'peter@lustig.de' }, + relations: ['user'], + }) await expect(DbEvent.find()).resolves.toContainEqual( expect.objectContaining({ type: EventType.EMAIL_ACCOUNT_MULTIREGISTRATION, @@ -292,7 +294,7 @@ describe('UserResolver', () => { variables: { ...variables, email: 'bibi@bloxberg.de', language: 'it' }, }) await expect( - UserContact.findOne({ email: 'bibi@bloxberg.de' }, { relations: ['user'] }), + UserContact.findOne({ where: { email: 'bibi@bloxberg.de' }, relations: ['user'] }), ).resolves.toEqual( expect.objectContaining({ email: 'bibi@bloxberg.de', @@ -334,7 +336,7 @@ describe('UserResolver', () => { }) // make Peter Lustig Admin - const peter = await User.findOneOrFail({ id: user[0].id }) + const peter = await User.findOneOrFail({ where: { id: user[0].id } }) peter.isAdmin = new Date() await peter.save() @@ -365,7 +367,7 @@ describe('UserResolver', () => { it('sets the contribution link id', async () => { await expect( - UserContact.findOne({ email: 'ein@besucher.de' }, { relations: ['user'] }), + UserContact.findOne({ where: { email: 'ein@besucher.de' }, relations: ['user'] }), ).resolves.toEqual( expect.objectContaining({ user: expect.objectContaining({ @@ -445,7 +447,7 @@ describe('UserResolver', () => { memo: `testing transaction link`, }) - transactionLink = await TransactionLink.findOneOrFail() + transactionLink = await TransactionLink.findOneOrFail({}) resetToken() @@ -462,7 +464,7 @@ describe('UserResolver', () => { it('sets the referrer id to bob baumeister id', async () => { await expect( - UserContact.findOne({ email: 'which@ever.de' }, { relations: ['user'] }), + UserContact.findOne({ where: { email: 'which@ever.de' }, relations: ['user'] }), ).resolves.toEqual( expect.objectContaining({ user: expect.objectContaining({ referrerId: bob.data.login.id }), @@ -529,16 +531,18 @@ describe('UserResolver', () => { beforeAll(async () => { await mutate({ mutation: createUser, variables: createUserVariables }) - const emailContact = await UserContact.findOneOrFail({ email: createUserVariables.email }) + const emailContact = await UserContact.findOneOrFail({ + where: { email: createUserVariables.email }, + }) emailVerificationCode = emailContact.emailVerificationCode.toString() result = await mutate({ mutation: setPassword, variables: { code: emailVerificationCode, password: 'Aa12345_' }, }) - newUser = await User.findOneOrFail( - { id: emailContact.userId }, - { relations: ['emailContact'] }, - ) + newUser = await User.findOneOrFail({ + where: { id: emailContact.userId }, + relations: ['emailContact'], + }) }) afterAll(async () => { @@ -571,7 +575,9 @@ describe('UserResolver', () => { describe('no valid password', () => { beforeAll(async () => { await mutate({ mutation: createUser, variables: createUserVariables }) - const emailContact = await UserContact.findOneOrFail({ email: createUserVariables.email }) + const emailContact = await UserContact.findOneOrFail({ + where: { email: createUserVariables.email }, + }) emailVerificationCode = emailContact.emailVerificationCode.toString() }) @@ -697,10 +703,10 @@ describe('UserResolver', () => { }) it('stores the USER_LOGIN event in the database', async () => { - const userConatct = await UserContact.findOneOrFail( - { email: 'bibi@bloxberg.de' }, - { relations: ['user'] }, - ) + const userConatct = await UserContact.findOneOrFail({ + where: { email: 'bibi@bloxberg.de' }, + relations: ['user'], + }) await expect(DbEvent.find()).resolves.toContainEqual( expect.objectContaining({ type: EventType.USER_LOGIN, @@ -879,10 +885,10 @@ describe('UserResolver', () => { }) it('stores the USER_LOGOUT event in the database', async () => { - const userConatct = await UserContact.findOneOrFail( - { email: 'bibi@bloxberg.de' }, - { relations: ['user'] }, - ) + const userConatct = await UserContact.findOneOrFail({ + where: { email: 'bibi@bloxberg.de' }, + relations: ['user'], + }) await expect(DbEvent.find()).resolves.toContainEqual( expect.objectContaining({ type: EventType.USER_LOGOUT, @@ -1047,10 +1053,10 @@ describe('UserResolver', () => { }) it('stores the EMAIL_FORGOT_PASSWORD event in the database', async () => { - const userConatct = await UserContact.findOneOrFail( - { email: 'bibi@bloxberg.de' }, - { relations: ['user'] }, - ) + const userConatct = await UserContact.findOneOrFail({ + where: { email: 'bibi@bloxberg.de' }, + relations: ['user'], + }) await expect(DbEvent.find()).resolves.toContainEqual( expect.objectContaining({ type: EventType.EMAIL_FORGOT_PASSWORD, @@ -1083,7 +1089,7 @@ describe('UserResolver', () => { beforeAll(async () => { await userFactory(testEnv, bibiBloxberg) - emailContact = await UserContact.findOneOrFail({ email: bibiBloxberg.email }) + emailContact = await UserContact.findOneOrFail({ where: { email: bibiBloxberg.email } }) }) afterAll(async () => { @@ -1175,7 +1181,7 @@ describe('UserResolver', () => { locale: 'en', }, }) - await expect(User.findOne()).resolves.toEqual( + await expect(User.findOne({})).resolves.toEqual( expect.objectContaining({ firstName: 'Benjamin', lastName: 'Blümchen', @@ -1185,10 +1191,10 @@ describe('UserResolver', () => { }) it('stores the USER_INFO_UPDATE event in the database', async () => { - const userConatct = await UserContact.findOneOrFail( - { email: 'bibi@bloxberg.de' }, - { relations: ['user'] }, - ) + const userConatct = await UserContact.findOneOrFail({ + where: { email: 'bibi@bloxberg.de' }, + relations: ['user'], + }) await expect(DbEvent.find()).resolves.toContainEqual( expect.objectContaining({ type: EventType.USER_INFO_UPDATE, @@ -1212,7 +1218,7 @@ describe('UserResolver', () => { alias: 'bibi_Bloxberg', }, }) - await expect(User.findOne()).resolves.toEqual( + await expect(User.findOne({})).resolves.toEqual( expect.objectContaining({ alias: 'bibi_Bloxberg', }), @@ -1433,10 +1439,10 @@ describe('UserResolver', () => { let bibi: User beforeAll(async () => { - const usercontact = await UserContact.findOneOrFail( - { email: 'bibi@bloxberg.de' }, - { relations: ['user'] }, - ) + const usercontact = await UserContact.findOneOrFail({ + where: { email: 'bibi@bloxberg.de' }, + relations: ['user'], + }) bibi = usercontact.user bibi.passwordEncryptionType = PasswordEncryptionType.EMAIL bibi.password = SecretKeyCryptographyCreateKey( @@ -1450,10 +1456,10 @@ describe('UserResolver', () => { it('changes to gradidoID on login', async () => { await mutate({ mutation: login, variables }) - const usercontact = await UserContact.findOneOrFail( - { email: 'bibi@bloxberg.de' }, - { relations: ['user'] }, - ) + const usercontact = await UserContact.findOneOrFail({ + where: { email: 'bibi@bloxberg.de' }, + relations: ['user'], + }) bibi = usercontact.user expect(bibi).toEqual( @@ -1590,14 +1596,14 @@ describe('UserResolver', () => { }) it('stores the ADMIN_USER_ROLE_SET event in the database', async () => { - const userConatct = await UserContact.findOneOrFail( - { email: 'bibi@bloxberg.de' }, - { relations: ['user'] }, - ) - const adminConatct = await UserContact.findOneOrFail( - { email: 'peter@lustig.de' }, - { relations: ['user'] }, - ) + const userConatct = await UserContact.findOneOrFail({ + where: { email: 'bibi@bloxberg.de' }, + relations: ['user'], + }) + const adminConatct = await UserContact.findOneOrFail({ + where: { email: 'peter@lustig.de' }, + relations: ['user'], + }) await expect(DbEvent.find()).resolves.toContainEqual( expect.objectContaining({ type: EventType.ADMIN_USER_ROLE_SET, @@ -1792,14 +1798,15 @@ describe('UserResolver', () => { }) it('stores the ADMIN_USER_DELETE event in the database', async () => { - const userConatct = await UserContact.findOneOrFail( - { email: 'bibi@bloxberg.de' }, - { relations: ['user'], withDeleted: true }, - ) - const adminConatct = await UserContact.findOneOrFail( - { email: 'peter@lustig.de' }, - { relations: ['user'] }, - ) + const userConatct = await UserContact.findOneOrFail({ + where: { email: 'bibi@bloxberg.de' }, + relations: ['user'], + withDeleted: true, + }) + const adminConatct = await UserContact.findOneOrFail({ + where: { email: 'peter@lustig.de' }, + relations: ['user'], + }) await expect(DbEvent.find()).resolves.toContainEqual( expect.objectContaining({ type: EventType.ADMIN_USER_DELETE, @@ -1943,10 +1950,10 @@ describe('UserResolver', () => { }) it('sends an account activation email', async () => { - const userConatct = await UserContact.findOneOrFail( - { email: 'bibi@bloxberg.de' }, - { relations: ['user'] }, - ) + const userConatct = await UserContact.findOneOrFail({ + where: { email: 'bibi@bloxberg.de' }, + relations: ['user'], + }) const activationLink = CONFIG.EMAIL_LINK_VERIFICATION.replace( /{optin}/g, userConatct.emailVerificationCode.toString(), @@ -1965,10 +1972,10 @@ describe('UserResolver', () => { }) it('stores the EMAIL_ADMIN_CONFIRMATION event in the database', async () => { - const userConatct = await UserContact.findOneOrFail( - { email: 'bibi@bloxberg.de' }, - { relations: ['user'] }, - ) + const userConatct = await UserContact.findOneOrFail({ + where: { email: 'bibi@bloxberg.de' }, + relations: ['user'], + }) await expect(DbEvent.find()).resolves.toContainEqual( expect.objectContaining({ type: EventType.EMAIL_ADMIN_CONFIRMATION, @@ -2086,14 +2093,14 @@ describe('UserResolver', () => { }) it('stores the ADMIN_USER_UNDELETE event in the database', async () => { - const userConatct = await UserContact.findOneOrFail( - { email: 'bibi@bloxberg.de' }, - { relations: ['user'] }, - ) - const adminConatct = await UserContact.findOneOrFail( - { email: 'peter@lustig.de' }, - { relations: ['user'] }, - ) + const userConatct = await UserContact.findOneOrFail({ + where: { email: 'bibi@bloxberg.de' }, + relations: ['user'], + }) + const adminConatct = await UserContact.findOneOrFail({ + where: { email: 'peter@lustig.de' }, + relations: ['user'], + }) await expect(DbEvent.find()).resolves.toContainEqual( expect.objectContaining({ type: EventType.ADMIN_USER_UNDELETE, diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index 840bb43c9..214da858d 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -2,7 +2,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/restrict-template-expressions */ -import { getConnection, getCustomRepository, IsNull, Not, Equal } from '@dbTools/typeorm' +import { getConnection, getCustomRepository, IsNull, Not } from '@dbTools/typeorm' import { ContributionLink as DbContributionLink } from '@entity/ContributionLink' import { TransactionLink as DbTransactionLink } from '@entity/TransactionLink' import { User as DbUser } from '@entity/User' @@ -82,13 +82,13 @@ const newEmailContact = (email: string, userId: number): DbUserContact => { emailContact.type = UserContactType.USER_CONTACT_EMAIL emailContact.emailChecked = false emailContact.emailOptInTypeId = OptInType.EMAIL_OPT_IN_REGISTER - emailContact.emailVerificationCode = random(64) + emailContact.emailVerificationCode = random(64).toString() logger.debug('newEmailContact...successful', emailContact) return emailContact } // eslint-disable-next-line @typescript-eslint/ban-types -export const activationLink = (verificationCode: BigInt): string => { +export const activationLink = (verificationCode: string): string => { logger.debug(`activationLink(${verificationCode})...`) return CONFIG.EMAIL_LINK_SETPASSWORD.replace(/{optin}/g, verificationCode.toString()) } @@ -365,7 +365,7 @@ export class UserResolver { user.emailContact.updatedAt = new Date() user.emailContact.emailResendCount++ - user.emailContact.emailVerificationCode = random(64) + user.emailContact.emailVerificationCode = random(64).toString() user.emailContact.emailOptInTypeId = OptInType.EMAIL_OPT_IN_RESET_PASSWORD await user.emailContact.save().catch(() => { throw new LogError('Unable to save email verification code', user.emailContact) @@ -404,7 +404,7 @@ export class UserResolver { // load code const userContact = await DbUserContact.findOneOrFail({ - where: { emailVerificationCode: Equal(BigInt(code)) }, + where: { emailVerificationCode: code }, relations: ['user'], }).catch(() => { throw new LogError('Could not login with emailVerificationCode') @@ -475,7 +475,7 @@ export class UserResolver { async queryOptIn(@Arg('optIn') optIn: string): Promise { logger.info(`queryOptIn(${optIn})...`) const userContact = await DbUserContact.findOneOrFail({ - where: { emailVerificationCode: Equal(BigInt(optIn)) }, + where: { emailVerificationCode: optIn }, }) logger.debug('found optInCode', userContact) // Code is only valid for `CONFIG.EMAIL_CODE_VALID_TIME` minutes diff --git a/backend/src/seeds/factory/creation.ts b/backend/src/seeds/factory/creation.ts index 5b4c56c57..5ad1b2e4e 100644 --- a/backend/src/seeds/factory/creation.ts +++ b/backend/src/seeds/factory/creation.ts @@ -19,7 +19,10 @@ export const creationFactory = async ( creation: CreationInterface, ): Promise => { const { mutate } = client - await mutate({ mutation: login, variables: { email: creation.email, password: 'Aa12345_' } }) + await mutate({ + mutation: login, + variables: { email: creation.email, password: 'Aa12345_' }, + }) const { data: { createContribution: contribution }, @@ -30,7 +33,9 @@ export const creationFactory = async ( await mutate({ mutation: login, variables: { email: 'peter@lustig.de', password: 'Aa12345_' } }) await mutate({ mutation: confirmContribution, variables: { id: contribution.id } }) - const confirmedContribution = await Contribution.findOneOrFail({ id: contribution.id }) + const confirmedContribution = await Contribution.findOneOrFail({ + where: { id: contribution.id }, + }) if (creation.moveCreationDate) { const transaction = await Transaction.findOneOrFail({ diff --git a/backend/src/seeds/factory/transactionLink.ts b/backend/src/seeds/factory/transactionLink.ts index cab478c4b..b44fe349c 100644 --- a/backend/src/seeds/factory/transactionLink.ts +++ b/backend/src/seeds/factory/transactionLink.ts @@ -32,7 +32,7 @@ export const transactionLinkFactory = async ( } = await mutate({ mutation: createTransactionLink, variables }) if (transactionLink.createdAt || transactionLink.deletedAt) { - const dbTransactionLink = await TransactionLink.findOneOrFail({ id }) + const dbTransactionLink = await TransactionLink.findOneOrFail({ where: { id } }) if (transactionLink.createdAt) { dbTransactionLink.createdAt = transactionLink.createdAt diff --git a/backend/src/seeds/factory/user.ts b/backend/src/seeds/factory/user.ts index 13a274911..d40154e12 100644 --- a/backend/src/seeds/factory/user.ts +++ b/backend/src/seeds/factory/user.ts @@ -19,7 +19,7 @@ export const userFactory = async ( } = await mutate({ mutation: createUser, variables: user }) // console.log('creatUser:', { id }, { user }) // get user from database - let dbUser = await User.findOneOrFail({ id }, { relations: ['emailContact'] }) + let dbUser = await User.findOneOrFail({ where: { id }, relations: ['emailContact'] }) // console.log('dbUser:', dbUser) const emailContact = dbUser.emailContact @@ -33,7 +33,7 @@ export const userFactory = async ( } // get last changes of user from database - dbUser = await User.findOneOrFail({ id }) + dbUser = await User.findOneOrFail({ where: { id } }) if (user.createdAt || user.deletedAt || user.isAdmin) { if (user.createdAt) dbUser.createdAt = user.createdAt diff --git a/backend/src/seeds/index.ts b/backend/src/seeds/index.ts index 77fa51990..bc7950f26 100644 --- a/backend/src/seeds/index.ts +++ b/backend/src/seeds/index.ts @@ -1,3 +1,9 @@ +/* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable @typescript-eslint/no-explicit-any */ +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ +/* eslint-disable @typescript-eslint/no-unsafe-call */ +/* eslint-disable @typescript-eslint/no-unsafe-return */ + import { entities } from '@entity/index' import { createTestClient } from 'apollo-server-testing' import { name, internet, datatype } from 'faker' @@ -36,12 +42,10 @@ export const cleanDB = async () => { } } -const [entityTypes] = entities - -const resetEntity = async (entity: typeof entityTypes) => { +const resetEntity = async (entity: any) => { const items = await entity.find({ withDeleted: true }) if (items.length > 0) { - const ids = items.map((i) => i.id) + const ids = items.map((e: any) => e.id) await entity.delete(ids) } } diff --git a/backend/test/helpers.ts b/backend/test/helpers.ts index 7f55b3c70..ec9c14795 100644 --- a/backend/test/helpers.ts +++ b/backend/test/helpers.ts @@ -1,4 +1,10 @@ /* eslint-disable @typescript-eslint/unbound-method */ +/* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ +/* eslint-disable @typescript-eslint/no-explicit-any */ +/* eslint-disable @typescript-eslint/no-unsafe-call */ +/* eslint-disable @typescript-eslint/no-unsafe-return */ + import { entities } from '@entity/index' import { createTestClient } from 'apollo-server-testing' @@ -7,7 +13,6 @@ import { createServer } from '@/server/createServer' import { i18n, logger } from './testSetup' export const headerPushMock = jest.fn((t) => { - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access context.token = t.value }) @@ -21,7 +26,7 @@ const context = { } export const cleanDB = async () => { - // this only works as lond we do not have foreign key constraints + // this only works as long we do not have foreign key constraints for (const entity of entities) { await resetEntity(entity) } @@ -36,12 +41,10 @@ export const testEnvironment = async (testLogger = logger, testI18n = i18n) => { return { mutate, query, con } } -const [entityTypes] = entities - -export const resetEntity = async (entity: typeof entityTypes) => { +export const resetEntity = async (entity: anny) => { const items = await entity.find({ withDeleted: true }) if (items.length > 0) { - const ids = items.map((i) => i.id) + const ids = items.map((e: any) => e.id) await entity.delete(ids) } } diff --git a/database/entity/0057-clear_old_password_junk/UserContact.ts b/database/entity/0057-clear_old_password_junk/UserContact.ts index dd06d3bbc..6064a3ea3 100644 --- a/database/entity/0057-clear_old_password_junk/UserContact.ts +++ b/database/entity/0057-clear_old_password_junk/UserContact.ts @@ -32,7 +32,7 @@ export class UserContact extends BaseEntity { email: string @Column({ name: 'email_verification_code', type: 'bigint', unsigned: true, unique: true }) - emailVerificationCode: BigInt + emailVerificationCode: string @Column({ name: 'email_opt_in_type_id' }) emailOptInTypeId: number