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

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

parents 827c2daa 62889dc5
No related branches found
No related tags found
No related merge requests found
Showing
with 73 additions and 37 deletions
...@@ -36,6 +36,7 @@ module.exports = async (body, models, res, url) => { ...@@ -36,6 +36,7 @@ module.exports = async (body, models, res, url) => {
models.User, models.User,
role, role,
) )
try { try {
await mailService.setupInviteEmail( await mailService.setupInviteEmail(
newUser.email, newUser.email,
...@@ -46,8 +47,7 @@ module.exports = async (body, models, res, url) => { ...@@ -46,8 +47,7 @@ module.exports = async (body, models, res, url) => {
return res.status(200).json(newUser) return res.status(200).json(newUser)
} catch (e) { } catch (e) {
logger.error(e) return res.status(500).json({ error: e.message })
return res.status(500).json({ error: 'Mailing could not be sent.' })
} }
} }
} }
...@@ -30,6 +30,13 @@ module.exports = models => async (req, res) => { ...@@ -30,6 +30,13 @@ module.exports = models => async (req, res) => {
models.Team, models.Team,
) )
if (members === undefined) {
res.status(400).json({
error: `The requested collection does not have a ${role} Team`,
})
return
}
const membersData = members.map(async member => { const membersData = members.map(async member => {
const user = await models.User.find(member) const user = await models.User.find(member)
const { timestamp, status } = teamHelper.getInviteData( const { timestamp, status } = teamHelper.getInviteData(
......
const Chance = require('chance')
const chance = new Chance()
module.exports = { module.exports = {
standardCollection: { standardCollection: {
id: '2c4fb766-a798-4c32-b857-c5d21a2ab331', id: chance.guid(),
title: 'Standard Collection', title: 'Standard Collection',
type: 'collection', type: 'collection',
fragments: [], fragments: [],
owners: [], owners: [],
save: jest.fn(), save: jest.fn(),
}, },
noTeamCollection: {
id: chance.guid(),
title: 'No Team Collection',
type: 'collection',
fragments: [],
owners: [],
save: jest.fn(),
},
} }
...@@ -5,7 +5,7 @@ const httpMocks = require('node-mocks-http') ...@@ -5,7 +5,7 @@ const httpMocks = require('node-mocks-http')
const fixtures = require('./fixtures/fixtures') const fixtures = require('./fixtures/fixtures')
const Model = require('./helpers/Model') const Model = require('./helpers/Model')
const { standardCollection } = fixtures.collections const { standardCollection, noTeamCollection } = fixtures.collections
const { editorInChief, admin } = fixtures.users const { editorInChief, admin } = fixtures.users
const query = { const query = {
role: 'handlingEditor', role: 'handlingEditor',
...@@ -76,4 +76,18 @@ describe('Get collection users route handler', () => { ...@@ -76,4 +76,18 @@ describe('Get collection users route handler', () => {
const data = JSON.parse(res._getData()) const data = JSON.parse(res._getData())
expect(data.error).toEqual('The request user must be Editor in Chief') expect(data.error).toEqual('The request user must be Editor in Chief')
}) })
it('should return an error when the collection does not have a the requested role team', async () => {
const req = httpMocks.createRequest()
req.query = query
req.params.collectionId = noTeamCollection.id
req.user = editorInChief.id
const res = httpMocks.createResponse()
const models = Model.build()
await require(getCollectionUsersPath)(models)(req, res)
expect(res.statusCode).toBe(400)
const data = JSON.parse(res._getData())
expect(data.error).toEqual(
`The requested collection does not have a ${query.role} Team`,
)
})
}) })
...@@ -26,8 +26,15 @@ module.exports = { ...@@ -26,8 +26,15 @@ module.exports = {
} }
const { htmlBody, textBody } = getEmailBody(emailType, replacements) const { htmlBody, textBody } = getEmailBody(emailType, replacements)
const mailData = {
from: config.get('mailer.from'),
to: email,
subject,
text: textBody,
html: htmlBody,
}
return Email.send(email, subject, textBody, htmlBody) return Email.send(mailData)
}, },
setupAssignEmail: async (email, emailType, dashBoardUrl) => { setupAssignEmail: async (email, emailType, dashBoardUrl) => {
let subject let subject
...@@ -45,8 +52,14 @@ module.exports = { ...@@ -45,8 +52,14 @@ module.exports = {
} }
const { htmlBody, textBody } = getEmailBody(emailType, replacements) const { htmlBody, textBody } = getEmailBody(emailType, replacements)
const mailData = {
return Email.send(email, subject, textBody, htmlBody) from: config.get('mailer.from'),
to: email,
subject,
text: textBody,
html: htmlBody,
}
return Email.send(mailData)
}, },
} }
......
const nodemailer = require('nodemailer') const nodemailer = require('nodemailer')
const config = require('config') const config = require('config')
const logger = require('@pubsweet/logger')
const mailerConfig = require(config.mailer.path) const mailerConfig = require(config.mailer.path)
module.exports = { module.exports = {
send: (toEmail, subject, textBody, htmlBody) => send: mailData => {
new Promise((resolve, reject) => { const transporter = nodemailer.createTransport(mailerConfig.transport)
const transporter = nodemailer.createTransport(mailerConfig.transport) return transporter.sendMail(mailData)
transporter.sendMail( },
{
from: mailerConfig.from,
to: toEmail,
subject,
text: textBody,
html: htmlBody,
},
(err, info) => {
if (err) {
logger.error(err)
return reject(err)
}
logger.info(`success message id: ${info.response}`)
return resolve(info.response)
},
)
}),
} }
...@@ -65,7 +65,10 @@ const FileSection = ({ ...@@ -65,7 +65,10 @@ const FileSection = ({
disabled={disabledFilepicker()} disabled={disabledFilepicker()}
onUpload={addFile} onUpload={addFile}
> >
<UploadButton disabled={disabledFilepicker()}> <UploadButton
data-test={`button-upload-${listId}`}
disabled={disabledFilepicker()}
>
<Icon <Icon
color={ color={
disabledFilepicker() disabledFilepicker()
......
{
"SES": {
"accessKey": "AWS_SES_ACCESS_KEY",
"secretKey": "AWS_SES_SECRET_KEY",
"region": "AWS_SES_REGION"
}
}
\ No newline at end of file
require('dotenv').config() require('dotenv').config()
const path = require('path') const path = require('path')
const components = require('./components.json') const components = require('./components.json')
const logger = require('winston') const logger = require('winston')
...@@ -66,7 +65,7 @@ module.exports = { ...@@ -66,7 +65,7 @@ module.exports = {
}, },
}, },
mailer: { mailer: {
from: process.env.EMAIL_SENDER || 'test_sender@domain.com', from: 'sebastian.mihalache@thinslices.com',
path: `${__dirname}/mailer`, path: `${__dirname}/mailer`,
}, },
publicKeys: [ publicKeys: [
......
const AWS = require('aws-sdk') const AWS = require('aws-sdk')
const config = require('config')
module.exports = { module.exports = {
from: process.env.EMAIL_SENDER,
transport: { transport: {
SES: new AWS.SES({ SES: new AWS.SES({
accessKeyId: process.env.AWS_SES_ACCESS_KEY, accessKeyId: config.SES.accessKey,
secretAccessKey: process.env.AWS_SES_SECRET_KEY, secretAccessKey: config.SES.secretKey,
region: process.env.AWS_SES_REGION, region: config.SES.region,
}), }),
}, },
} }
...@@ -78,7 +78,7 @@ ...@@ -78,7 +78,7 @@
"setupdb": "pubsweet setupdb ./", "setupdb": "pubsweet setupdb ./",
"reset": "pubsweet setupdb --clobber ./", "reset": "pubsweet setupdb --clobber ./",
"start": "pubsweet start", "start": "pubsweet start",
"start-now": "echo $secret > config/local-development.json && npm run reset --username admin --email admin@mailinator.com --password admin123 && npm run start", "start-now": "echo $secret > config/local-development.json && npm run start",
"build": "NODE_ENV=production pubsweet build" "build": "NODE_ENV=production pubsweet build"
} }
} }
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