diff --git a/backend/src/graphql/resolver/TransactionLinkResolver.test.ts b/backend/src/graphql/resolver/TransactionLinkResolver.test.ts index b6abcb0b2..95aa03993 100644 --- a/backend/src/graphql/resolver/TransactionLinkResolver.test.ts +++ b/backend/src/graphql/resolver/TransactionLinkResolver.test.ts @@ -947,7 +947,7 @@ describe('TransactionLinkResolver', () => { }) describe('without any filters', () => { - it('finds 6 open transaction links and no deleted or redeemed', async () => { + it('finds 7 open transaction links and no deleted or redeemed', async () => { await expect( query({ query: listTransactionLinksAdmin, @@ -957,14 +957,14 @@ describe('TransactionLinkResolver', () => { expect.objectContaining({ data: { listTransactionLinksAdmin: { - count: 6, + count: 7, links: expect.not.arrayContaining([ expect.objectContaining({ - memo: 'Leider wollte niemand meine Gradidos zum Neujahr haben :(', + memo: 'Leider wollte niemand meine Gradidos haben :(', createdAt: expect.any(String), }), expect.objectContaining({ - memo: 'Da habe ich mich wohl etwas übernommen.', + memo: "Kein Trick, keine Zauberrei,\n bei Gradidio sei dabei!", deletedAt: expect.any(String), }), ]), @@ -976,7 +976,7 @@ describe('TransactionLinkResolver', () => { }) describe('all filters are null', () => { - it('finds 6 open transaction links and no deleted or redeemed', async () => { + it('finds 7 open transaction links and no deleted or redeemed', async () => { await expect( query({ query: listTransactionLinksAdmin, @@ -993,10 +993,10 @@ describe('TransactionLinkResolver', () => { expect.objectContaining({ data: { listTransactionLinksAdmin: { - count: 6, + count: 7, links: expect.not.arrayContaining([ expect.objectContaining({ - memo: 'Leider wollte niemand meine Gradidos zum Neujahr haben :(', + memo: 'Leider wollte niemand meine Gradidos haben :(', createdAt: expect.any(String), }), expect.objectContaining({ @@ -1012,7 +1012,7 @@ describe('TransactionLinkResolver', () => { }) describe('filter with deleted', () => { - it('finds 6 open transaction links, 1 deleted, and no redeemed', async () => { + it('finds 7 open transaction links, 1 deleted, and no redeemed', async () => { await expect( query({ query: listTransactionLinksAdmin, @@ -1027,10 +1027,10 @@ describe('TransactionLinkResolver', () => { expect.objectContaining({ data: { listTransactionLinksAdmin: { - count: 7, + count: 8, links: expect.arrayContaining([ expect.not.objectContaining({ - memo: 'Leider wollte niemand meine Gradidos zum Neujahr haben :(', + memo: 'Leider wollte niemand meine Gradidos haben :(', createdAt: expect.any(String), }), expect.objectContaining({ @@ -1046,7 +1046,7 @@ describe('TransactionLinkResolver', () => { }) describe('filter by expired', () => { - it('finds 5 open transaction links, 1 expired, and no redeemed', async () => { + it('finds 6 open transaction links, 1 expired, and no redeemed', async () => { await expect( query({ query: listTransactionLinksAdmin, @@ -1064,7 +1064,7 @@ describe('TransactionLinkResolver', () => { count: 7, links: expect.arrayContaining([ expect.objectContaining({ - memo: 'Leider wollte niemand meine Gradidos zum Neujahr haben :(', + memo: 'Leider wollte niemand meine Gradidos haben :(', createdAt: expect.any(String), }), expect.not.objectContaining({ @@ -1082,7 +1082,7 @@ describe('TransactionLinkResolver', () => { // TODO: works not as expected, because 'redeemedAt' and 'redeemedBy' have to be added to the transaktion link factory describe.skip('filter by redeemed', () => { - it('finds 6 open transaction links, 1 deleted, and no redeemed', async () => { + it('finds 7 open transaction links, 1 deleted, and no redeemed', async () => { await expect( query({ query: listTransactionLinksAdmin, @@ -1099,10 +1099,10 @@ describe('TransactionLinkResolver', () => { expect.objectContaining({ data: { listTransactionLinksAdmin: { - count: 6, + count: 7, links: expect.arrayContaining([ expect.not.objectContaining({ - memo: 'Leider wollte niemand meine Gradidos zum Neujahr haben :(', + memo: 'Leider wollte niemand meine Gradidos haben :(', createdAt: expect.any(String), }), expect.objectContaining({ diff --git a/backend/src/graphql/resolver/UserResolver.test.ts b/backend/src/graphql/resolver/UserResolver.test.ts index cee570c94..8b4faa443 100644 --- a/backend/src/graphql/resolver/UserResolver.test.ts +++ b/backend/src/graphql/resolver/UserResolver.test.ts @@ -1040,7 +1040,7 @@ describe('UserResolver', () => { describe('user exists in DB', () => { beforeAll(async () => { - await userFactory(testEnv, bibiBloxberg) + await userFactory(testEnv, bobBaumeister) }) afterAll(async () => { @@ -1050,7 +1050,7 @@ describe('UserResolver', () => { describe('duration not expired', () => { it('throws an error', async () => { - await expect(mutate({ mutation: forgotPassword, variables })).resolves.toEqual( + await expect(mutate({ mutation: forgotPassword, variables: { email: 'bob@baumeister.de' } })).resolves.toEqual( expect.objectContaining({ errors: [ new GraphQLError( @@ -1067,7 +1067,7 @@ describe('UserResolver', () => { describe('duration reset to 0', () => { it('returns true', async () => { CONFIG.EMAIL_CODE_REQUEST_TIME = 0 - await expect(mutate({ mutation: forgotPassword, variables })).resolves.toEqual( + await expect(mutate({ mutation: forgotPassword, variables: { email: 'bob@baumeister.de' } })).resolves.toEqual( expect.objectContaining({ data: { forgotPassword: true, @@ -1078,9 +1078,9 @@ describe('UserResolver', () => { it('sends reset password email', () => { expect(sendResetPasswordEmail).toBeCalledWith({ - firstName: 'Bibi', - lastName: 'Bloxberg', - email: 'bibi@bloxberg.de', + firstName: 'Bob', + lastName: 'der Baumeister', + email: 'bob@baumeister.de', language: 'de', resetLink: expect.any(String), timeDurationObject: expect.objectContaining({ @@ -1092,7 +1092,7 @@ describe('UserResolver', () => { it('stores the EMAIL_FORGOT_PASSWORD event in the database', async () => { const userConatct = await UserContact.findOneOrFail({ - where: { email: 'bibi@bloxberg.de' }, + where: { email: 'bob@baumeister.de' }, relations: ['user'], }) await expect(DbEvent.find()).resolves.toContainEqual( @@ -1108,7 +1108,7 @@ describe('UserResolver', () => { describe('request reset password again', () => { it('throws an error', async () => { CONFIG.EMAIL_CODE_REQUEST_TIME = emailCodeRequestTime - await expect(mutate({ mutation: forgotPassword, variables })).resolves.toEqual( + await expect(mutate({ mutation: forgotPassword, variables: { email: 'bob@baumeister.de' } })).resolves.toEqual( expect.objectContaining({ errors: [new GraphQLError('Email already sent less than 10 minutes ago')], }), @@ -1128,8 +1128,8 @@ describe('UserResolver', () => { let emailContact: UserContact beforeAll(async () => { - await userFactory(testEnv, bibiBloxberg) - emailContact = await UserContact.findOneOrFail({ where: { email: bibiBloxberg.email } }) + await userFactory(testEnv, bobBaumeister) + emailContact = await UserContact.findOneOrFail({ where: { email: bobBaumeister.email } }) }) afterAll(async () => { @@ -1140,7 +1140,7 @@ describe('UserResolver', () => { it('throws an error', async () => { jest.clearAllMocks() await expect( - query({ query: queryOptIn, variables: { optIn: 'not-valid' } }), + query({ query: queryOptIn, variables: { email: 'bob@baumeister.de', optIn: 'not-valid' } }), ).resolves.toEqual( expect.objectContaining({ errors: [ @@ -1161,7 +1161,7 @@ describe('UserResolver', () => { await expect( query({ query: queryOptIn, - variables: { optIn: emailContact.emailVerificationCode.toString() }, + variables: { email: 'bob@baumeister.de', optIn: emailContact.emailVerificationCode.toString() }, }), ).resolves.toEqual( expect.objectContaining({ diff --git a/backend/src/seeds/factory/transactionLink.ts b/backend/src/seeds/factory/transactionLink.ts index a71a20955..80384025f 100644 --- a/backend/src/seeds/factory/transactionLink.ts +++ b/backend/src/seeds/factory/transactionLink.ts @@ -39,7 +39,7 @@ export const transactionLinkFactory = async ( } if (transactionLink.deletedAt) { - dbTransactionLink.deletedAt = new Date() + dbTransactionLink.deletedAt = new Date(dbTransactionLink.createdAt.getTime() + 1000) await dbTransactionLink.save() } } diff --git a/backend/src/seeds/factory/user.ts b/backend/src/seeds/factory/user.ts index 3cae22f71..44db02c8f 100644 --- a/backend/src/seeds/factory/user.ts +++ b/backend/src/seeds/factory/user.ts @@ -40,11 +40,15 @@ export const userFactory = async ( } // get last changes of user from database - dbUser = await User.findOneOrFail({ where: { id }, relations: ['userRoles'] }) + dbUser = await User.findOneOrFail({ where: { id }, relations: { userRoles: true, emailContact: true } }) if (user.createdAt || user.deletedAt || user.role) { if (user.createdAt) { dbUser.createdAt = user.createdAt + // make sure emailContact is also updated for e2e test, prevent failing when time between seeding and test run is < 1 minute + dbUser.emailContact.createdAt = user.createdAt + dbUser.emailContact.updatedAt = user.createdAt + await dbUser.emailContact.save() } if (user.deletedAt) { dbUser.deletedAt = user.deletedAt diff --git a/backend/src/seeds/transactionLink/index.ts b/backend/src/seeds/transactionLink/index.ts index c3245c2b6..17683b580 100644 --- a/backend/src/seeds/transactionLink/index.ts +++ b/backend/src/seeds/transactionLink/index.ts @@ -4,8 +4,7 @@ export const transactionLinks: TransactionLinkInterface[] = [ { email: 'bibi@bloxberg.de', amount: 19.99, - memo: 'Leider wollte niemand meine Gradidos zum Neujahr haben :(', - createdAt: new Date(2022, 0, 1), + memo: 'Leider wollte niemand meine Gradidos haben :(', }, { email: 'bibi@bloxberg.de', diff --git a/backend/src/seeds/users/bibi-bloxberg.ts b/backend/src/seeds/users/bibi-bloxberg.ts index 9a40e922b..f78a3af1c 100644 --- a/backend/src/seeds/users/bibi-bloxberg.ts +++ b/backend/src/seeds/users/bibi-bloxberg.ts @@ -9,4 +9,6 @@ export const bibiBloxberg: UserInterface = { emailChecked: true, language: 'de', publisherId: 1234, + // move user createdAt before transaction link + createdAt: new Date(2021, 9, 17), }