Skip to content
Snippets Groups Projects
Commit a157387c authored by Alexandru Munteanu's avatar Alexandru Munteanu
Browse files

Merge branch 'master' of gitlab.coko.foundation:xpub/xpub-faraday

parents c2211be2 4f4d72eb
No related branches found
No related tags found
No related merge requests found
......@@ -76,10 +76,16 @@ module.exports = async (
)
await collHelper.addAssignedPeople(collection, user, role)
} else {
const matchingInvitation = inviteHelper.getMatchingInvitation(
user.invitations,
collectionId,
role,
// const matchingInvitation = inviteHelper.getMatchingInvitation(
// user.invitations,
// collectionId,
// role,
// )
const matchingInvitation = user.invitations.find(
invitation =>
invitation.collectionId === collectionId &&
invitation.role === role &&
invitation.hasAnswer === false,
)
if (matchingInvitation === undefined) {
user = await inviteHelper.setupInvitation(
......
......@@ -40,13 +40,12 @@ module.exports = models => async (req, res) => {
const matchingInvitation = matchingInvitations[0]
matchingInvitation.hasAnswer = true
const users = await models.User.all()
const eic = users.find(user => user.editorInChief === true)
if (accept === true) {
matchingInvitation.isAccepted = true
await collectionHelper.updateAssignedPeople(collection, user.email)
try {
const users = await models.User.all()
const eic = users.find(user => user.editorInChief === true)
await mailService.setupHandlingEditorAgreedEmail(
eic.email,
user,
......@@ -73,6 +72,18 @@ module.exports = models => async (req, res) => {
if (reason !== undefined) {
matchingInvitation.reason = reason
}
try {
await mailService.setupDeclineEmail(
eic.email,
user,
'handling-editor-declined',
collection.customId,
reason,
)
} catch (e) {
logger.error(e)
return res.status(500).json({ error: 'Mail could not be sent.' })
}
}
user = await user.save()
res.status(200).json(user)
......
......@@ -111,7 +111,7 @@ const users = {
},
],
teams: [heTeamID],
save: jest.fn(() => users.handlingEditor),
save: jest.fn(() => users.invitedHandlingEditor),
editorInChief: false,
},
}
......
......@@ -9,6 +9,7 @@ const models = Model.build()
jest.mock('pubsweet-component-mail-service', () => ({
setupAssignEmail: jest.fn(),
setupHandlingEditorAgreedEmail: jest.fn(),
setupDeclineEmail: jest.fn(),
}))
const notFoundError = new Error()
......
......@@ -14,6 +14,7 @@ const models = Model.build()
jest.mock('pubsweet-component-mail-service', () => ({
setupInviteEmail: jest.fn(),
setupAssignEmail: jest.fn(),
setupDeclineEmail: jest.fn(),
}))
const chance = new Chance()
const globalRoles = configRoles.global
......@@ -218,6 +219,26 @@ describe('Post invite route handler', () => {
const data = JSON.parse(res._getData())
expect(data.email).toEqual(body.email)
expect(data.invitations[0].collectionId).toEqual(req.params.collectionId)
expect(data.invitations).toHaveLength(1)
})
it('should return success when the EiC invites the a HE after he declined an invitation', async () => {
const body = {
email: invitedHandlingEditor.email,
role: 'handlingEditor',
}
const req = httpMocks.createRequest({
body,
})
req.user = editorInChief.id
req.params.collectionId = standardCollection.id
const initialSize = invitedHandlingEditor.invitations.length
const res = httpMocks.createResponse()
await require(postInvitePath)(models)(req, res)
expect(res.statusCode).toBe(200)
const data = JSON.parse(res._getData())
expect(data.email).toEqual(body.email)
expect(invitedHandlingEditor.invitations.length).toBeGreaterThan(
initialSize,
)
})
})
......@@ -104,6 +104,28 @@ module.exports = {
}
return Email.send(mailData)
},
setupDeclineEmail: async (toEmail, user, emailType, collectionId, reason) => {
let finalReason = ''
if (reason !== undefined) {
finalReason = `Reason: "${reason}"`
}
const replacements = {
finalReason,
name: `${user.firstName} ${user.lastName}`,
collectionId,
}
const { htmlBody, textBody } = getEmailBody(emailType, replacements)
const mailData = {
from: config.get('mailer.from'),
to: toEmail,
subject: 'Handling Editor Declined',
text: textBody,
html: htmlBody,
}
return Email.send(mailData)
},
}
const getEmailBody = (emailType, replacements) => {
......
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html data-editor-version="2" class="sg-campaigns" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1" />
<!--[if !mso]><!-->
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<!--<![endif]-->
<!--[if (gte mso 9)|(IE)]>
<xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
<o:PixelsPerInch>96</o:PixelsPerInch>
</o:OfficeDocumentSettings>
</xml>
<![endif]-->
<!--[if (gte mso 9)|(IE)]>
<style type="text/css">
body {width: 600px;margin: 0 auto;}
table {border-collapse: collapse;}
table, td {mso-table-lspace: 0pt;mso-table-rspace: 0pt;}
img {-ms-interpolation-mode: bicubic;}
</style>
<![endif]-->
<style type="text/css">
body,
p,
div {
font-family: helvetica, arial, sans-serif;
font-size: 14px;
}
body {
color: #626262;
}
body a {
color: #0D78F2;
text-decoration: none;
}
p {
margin: 0;
padding: 0;
}
table.wrapper {
width: 100% !important;
table-layout: fixed;
-webkit-font-smoothing: antialiased;
-webkit-text-size-adjust: 100%;
-moz-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
}
img.max-width {
max-width: 100% !important;
}
.column.of-2 {
width: 50%;
}
.column.of-3 {
width: 33.333%;
}
.column.of-4 {
width: 25%;
}
@media screen and (max-width:480px) {
.preheader .rightColumnContent,
.footer .rightColumnContent {
text-align: left !important;
}
.preheader .rightColumnContent div,
.preheader .rightColumnContent span,
.footer .rightColumnContent div,
.footer .rightColumnContent span {
text-align: left !important;
}
.preheader .rightColumnContent,
.preheader .leftColumnContent {
font-size: 80% !important;
padding: 5px 0;
}
table.wrapper-mobile {
width: 100% !important;
table-layout: fixed;
}
img.max-width {
height: auto !important;
max-width: 480px !important;
}
a.bulletproof-button {
display: block !important;
width: auto !important;
font-size: 80%;
padding-left: 0 !important;
padding-right: 0 !important;
}
.columns {
width: 100% !important;
}
.column {
display: block !important;
width: 100% !important;
padding-left: 0 !important;
padding-right: 0 !important;
margin-left: 0 !important;
margin-right: 0 !important;
}
}
</style>
<!--user entered Head Start-->
<!--End Head user entered-->
</head>
<body>
<center class="wrapper" data-link-color="#0D78F2" data-body-style="font-size: 14px; font-family: helvetica,arial,sans-serif; color: #626262; background-color: #F4F4F4;">
<div class="webkit">
<table cellpadding="0" cellspacing="0" border="0" width="100%" class="wrapper" bgcolor="#F4F4F4">
<tr>
<td valign="top" bgcolor="#F4F4F4" width="100%">
<table width="100%" role="content-container" class="outer" align="center" cellpadding="0" cellspacing="0" border="0">
<tr>
<td width="100%">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td>
<!--[if mso]>
<center>
<table><tr><td width="600">
<![endif]-->
<table width="100%" cellpadding="0" cellspacing="0" border="0" style="width: 100%; max-width:600px;" align="center">
<tr>
<td role="modules-container" style="padding: 0px 0px 0px 0px; color: #626262; text-align: left;" bgcolor="#F4F4F4" width="100%"
align="left">
<table class="module preheader preheader-hide" role="module" data-type="preheader" border="0" cellpadding="0" cellspacing="0"
width="100%" style="display: none !important; mso-hide: all; visibility: hidden; opacity: 0; color: transparent; height: 0; width: 0;">
<tr>
<td role="module-content">
<p>handling editor invitation declined</p>
</td>
</tr>
</table>
<table class="wrapper" role="module" data-type="image" border="0" cellpadding="0" cellspacing="0" width="100%" style="table-layout: fixed;">
<tr>
<td style="font-size:6px;line-height:10px;padding:20px 0px 20px 0px;" valign="top" align="center">
<img class="max-width" border="0" style="display:block;color:#000000;text-decoration:none;font-family:Helvetica, arial, sans-serif;font-size:16px;max-width:10% !important;width:10%;height:auto !important;"
src="https://marketing-image-production.s3.amazonaws.com/uploads/bb39b20cf15e52c1c0933676e25f2b2402737c6560b8098c204ad6932b84eb2058804376dbc4db138c7a21dcaed9325bde36185648afac5bc97e3d73d4e12718.png"
alt="" width="60">
</td>
</tr>
</table>
<table class="module" role="module" data-type="text" border="0" cellpadding="0" cellspacing="0" width="100%" style="table-layout: fixed;">
<tr>
<td style="padding:30px 23px 0px 23px;background-color:#ffffff;" height="100%" valign="top" bgcolor="#ffffff">
<h1 style="text-align: center;">Handling Editor Invitation Declined</h1>
<div style="text-align: center;">{{ name }} has declined to be Handling Editor on manuscript <span style="font-family:courier,monospace;">{{ collectionId }}</span>.</div>
<div style="text-align: center;">{{ finalReason }}</div>
<div style="text-align: center;">&nbsp;</div>
</td>
</tr>
</table>
<div data-role="module-unsubscribe" class="module unsubscribe-css__unsubscribe___2CDlR" role="module"
data-type="unsubscribe" style="color:#444444;font-size:12px;line-height:20px;padding:16px 16px 16px 16px;text-align:center">
<div class="Unsubscribe--addressLine">
<p class="Unsubscribe--senderName" style="font-family:Arial, Helvetica, sans-serif;font-size:12px;line-height:20px">Hindawi Publishing Corporation</p>
<p style="font-family:Arial, Helvetica, sans-serif;font-size:12px;line-height:20px">
<span class="Unsubscribe--senderAddress">315 Madison Ave, Third Floor, Suite 3070</span>,
<span class="Unsubscribe--senderCity">NEW YORK</span>,
<span class="Unsubscribe--senderState">NY</span>
<span class="Unsubscribe--senderZip">10017</span>
</p>
</div>
<p style="font-family:Arial, Helvetica, sans-serif;font-size:12px;line-height:20px">
<a class="Unsubscribe--unsubscribeLink" href="[Unsubscribe]">Unsubscribe</a>
</p>
</div>
</td>
</tr>
</table>
<!--[if mso]>
</td></tr></table>
</center>
<![endif]-->
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</center>
</body>
</html>
\ No newline at end of file
Handling Editor Invitation Declined
{{ name }} has declined to be Handling Editor on manuscript {{ collectionId }}.
{{ finalReason }}
Hindawi Publishing Corporation
315 Madison Ave, Third Floor, Suite 307
New York, NY 10017
\ No newline at end of file
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment