This commit is contained in:
Ulf Gebhardt 2022-12-09 14:09:43 +01:00
parent 903fe56f60
commit 7638d29052
Signed by: ulfgebhardt
GPG Key ID: DA6B843E748679C9
4 changed files with 50 additions and 40 deletions

View File

@ -15,8 +15,7 @@ import Paginated from '@arg/Paginated'
import { backendLogger as logger } from '@/server/logger' import { backendLogger as logger } from '@/server/logger'
import { RIGHTS } from '@/auth/RIGHTS' import { RIGHTS } from '@/auth/RIGHTS'
import { Context, getUser } from '@/server/context' import { Context, getUser } from '@/server/context'
import { sendAddedContributionMessageEmail } from '@/mailer/sendAddedContributionMessageEmail' import { sendAddedContributionMessageEmail } from '@/emails/sendEmailVariants'
import CONFIG from '@/config'
@Resolver() @Resolver()
export class ContributionMessageResolver { export class ContributionMessageResolver {
@ -139,15 +138,13 @@ export class ContributionMessageResolver {
} }
await sendAddedContributionMessageEmail({ await sendAddedContributionMessageEmail({
firstName: contribution.user.firstName,
lastName: contribution.user.lastName,
email: contribution.user.emailContact.email,
language: contribution.user.language,
senderFirstName: user.firstName, senderFirstName: user.firstName,
senderLastName: user.lastName, senderLastName: user.lastName,
recipientFirstName: contribution.user.firstName,
recipientLastName: contribution.user.lastName,
recipientEmail: contribution.user.emailContact.email,
senderEmail: user.emailContact.email,
contributionMemo: contribution.memo, contributionMemo: contribution.memo,
message,
overviewURL: CONFIG.EMAIL_LINK_OVERVIEW,
}) })
await queryRunner.commitTransaction() await queryRunner.commitTransaction()
} catch (e) { } catch (e) {

View File

@ -21,7 +21,11 @@ import {
listContributions, listContributions,
listUnconfirmedContributions, listUnconfirmedContributions,
} from '@/seeds/graphql/queries' } from '@/seeds/graphql/queries'
import { sendContributionConfirmedEmail } from '@/mailer/sendContributionConfirmedEmail' import {
// sendAccountActivationEmail,
sendContributionConfirmedEmail,
// sendContributionRejectedEmail,
} from '@/emails/sendEmailVariants'
import { cleanDB, resetToken, testEnvironment, contributionDateFormatter } from '@test/helpers' import { cleanDB, resetToken, testEnvironment, contributionDateFormatter } from '@test/helpers'
import { GraphQLError } from 'graphql' import { GraphQLError } from 'graphql'
import { userFactory } from '@/seeds/factory/user' import { userFactory } from '@/seeds/factory/user'
@ -33,13 +37,22 @@ import { Contribution } from '@entity/Contribution'
import { Transaction as DbTransaction } from '@entity/Transaction' import { Transaction as DbTransaction } from '@entity/Transaction'
import { User } from '@entity/User' import { User } from '@entity/User'
import { EventProtocolType } from '@/event/EventProtocolType' import { EventProtocolType } from '@/event/EventProtocolType'
import { logger } from '@test/testSetup' import { logger, i18n as localization } from '@test/testSetup'
// mock account activation email to avoid console spam // mock account activation email to avoid console spam
jest.mock('@/mailer/sendContributionConfirmedEmail', () => { // mock account activation email to avoid console spam
jest.mock('@/emails/sendEmailVariants', () => {
const originalModule = jest.requireActual('@/emails/sendEmailVariants')
return { return {
__esModule: true, __esModule: true,
sendContributionConfirmedEmail: jest.fn(), ...originalModule,
// TODO: test the call of …
// sendAccountActivationEmail: jest.fn((a) => originalModule.sendAccountActivationEmail(a)),
sendContributionConfirmedEmail: jest.fn((a) =>
originalModule.sendContributionConfirmedEmail(a),
),
// TODO: test the call of …
// sendContributionRejectedEmail: jest.fn((a) => originalModule.sendContributionRejectedEmail(a)),
} }
}) })
@ -50,7 +63,7 @@ let admin: User
let result: any let result: any
beforeAll(async () => { beforeAll(async () => {
testEnv = await testEnvironment() testEnv = await testEnvironment(logger, localization)
mutate = testEnv.mutate mutate = testEnv.mutate
query = testEnv.query query = testEnv.query
con = testEnv.con con = testEnv.con
@ -1903,17 +1916,16 @@ describe('ContributionResolver', () => {
}) })
it('calls sendContributionConfirmedEmail', async () => { it('calls sendContributionConfirmedEmail', async () => {
expect(sendContributionConfirmedEmail).toBeCalledWith( expect(sendContributionConfirmedEmail).toBeCalledWith({
expect.objectContaining({ firstName: 'Bibi',
contributionMemo: 'Herzlich Willkommen bei Gradido liebe Bibi!', lastName: 'Bloxberg',
overviewURL: 'http://localhost/overview', email: 'bibi@bloxberg.de',
recipientEmail: 'bibi@bloxberg.de', language: 'de',
recipientFirstName: 'Bibi',
recipientLastName: 'Bloxberg',
senderFirstName: 'Peter', senderFirstName: 'Peter',
senderLastName: 'Lustig', senderLastName: 'Lustig',
}), contributionMemo: 'Herzlich Willkommen bei Gradido liebe Bibi!',
) contributionAmount: expect.decimalEqual(450),
})
}) })
it('stores the send confirmation email event in the database', async () => { it('stores the send confirmation email event in the database', async () => {

View File

@ -45,10 +45,11 @@ import {
EventAdminContributionUpdate, EventAdminContributionUpdate,
} from '@/event/Event' } from '@/event/Event'
import { eventProtocol } from '@/event/EventProtocolEmitter' import { eventProtocol } from '@/event/EventProtocolEmitter'
import CONFIG from '@/config'
import { sendContributionRejectedEmail } from '@/mailer/sendContributionRejectedEmail'
import { calculateDecay } from '@/util/decay' import { calculateDecay } from '@/util/decay'
import { sendContributionConfirmedEmail } from '@/mailer/sendContributionConfirmedEmail' import {
sendContributionConfirmedEmail,
sendContributionRejectedEmail,
} from '@/emails/sendEmailVariants'
@Resolver() @Resolver()
export class ContributionResolver { export class ContributionResolver {
@ -533,14 +534,13 @@ export class ContributionResolver {
event.setEventAdminContributionDelete(eventAdminContributionDelete), event.setEventAdminContributionDelete(eventAdminContributionDelete),
) )
sendContributionRejectedEmail({ sendContributionRejectedEmail({
firstName: user.firstName,
lastName: user.lastName,
email: user.emailContact.email,
language: user.language,
senderFirstName: moderator.firstName, senderFirstName: moderator.firstName,
senderLastName: moderator.lastName, senderLastName: moderator.lastName,
recipientEmail: user.emailContact.email,
recipientFirstName: user.firstName,
recipientLastName: user.lastName,
contributionMemo: contribution.memo, contributionMemo: contribution.memo,
contributionAmount: contribution.amount,
overviewURL: CONFIG.EMAIL_LINK_OVERVIEW,
}) })
return !!res return !!res
@ -628,14 +628,14 @@ export class ContributionResolver {
await queryRunner.commitTransaction() await queryRunner.commitTransaction()
logger.info('creation commited successfuly.') logger.info('creation commited successfuly.')
sendContributionConfirmedEmail({ sendContributionConfirmedEmail({
firstName: user.firstName,
lastName: user.lastName,
email: user.emailContact.email,
language: user.language,
senderFirstName: moderatorUser.firstName, senderFirstName: moderatorUser.firstName,
senderLastName: moderatorUser.lastName, senderLastName: moderatorUser.lastName,
recipientFirstName: user.firstName,
recipientLastName: user.lastName,
recipientEmail: user.emailContact.email,
contributionMemo: contribution.memo, contributionMemo: contribution.memo,
contributionAmount: contribution.amount, contributionAmount: contribution.amount,
overviewURL: CONFIG.EMAIL_LINK_OVERVIEW,
}) })
} catch (e) { } catch (e) {
await queryRunner.rollbackTransaction() await queryRunner.rollbackTransaction()

View File

@ -1051,17 +1051,18 @@ export class UserResolver {
} }
const emailContact = user.emailContact const emailContact = user.emailContact
if (emailContact.deletedAt) { if (emailContact.deletedAt) {
logger.error(`The emailContact: ${email} of htis User is deleted.`) logger.error(`The emailContact: ${email} of this User is deleted.`)
throw new Error(`The emailContact: ${email} of htis User is deleted.`) throw new Error(`The emailContact: ${email} of this User is deleted.`)
} }
// eslint-disable-next-line @typescript-eslint/no-unused-vars // eslint-disable-next-line @typescript-eslint/no-unused-vars
const emailSent = await sendAccountActivationEmail({ const emailSent = await sendAccountActivationEmail({
link: activationLink(emailContact.emailVerificationCode),
firstName: user.firstName, firstName: user.firstName,
lastName: user.lastName, lastName: user.lastName,
email, email,
duration: printTimeDuration(CONFIG.EMAIL_CODE_VALID_TIME), language: user.language,
activationLink: activationLink(emailContact.emailVerificationCode),
timeDurationObject: getTimeDurationObject(CONFIG.EMAIL_CODE_VALID_TIME),
}) })
// In case EMails are disabled log the activation link for the user // In case EMails are disabled log the activation link for the user