Merge branch 'master' into ui_updates_linked_transaction

This commit is contained in:
einhornimmond 2025-11-19 19:56:57 +01:00 committed by GitHub
commit a8c49e3142
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 36 additions and 31 deletions

View File

@ -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({

View File

@ -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({

View File

@ -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()
}
}

View File

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

View File

@ -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',

View File

@ -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),
}