diff --git a/packages/component-invite/src/helpers/Invitation.js b/packages/component-invite/src/helpers/Invitation.js index c72fe3b0703802b7364b27cef7991d028089327e..0cf06c9acddedc3ba4ca93738ac790b8941de9ac 100644 --- a/packages/component-invite/src/helpers/Invitation.js +++ b/packages/component-invite/src/helpers/Invitation.js @@ -1,5 +1,4 @@ const uuid = require('uuid') -const mailService = require('pubsweet-component-mail-service') const getInvitationData = (invitations, userId, role) => { const matchingInvitation = invitations.find( @@ -31,7 +30,13 @@ const setupInvitation = async (userId, role, collection) => { return invitation } -const setupReviewerInvitation = async (req, models, collection, user) => { +const setupReviewerInvitation = async ( + req, + models, + collection, + user, + mailService, +) => { const baseUrl = `${req.protocol}://${req.get('host')}` const fragment = await models.Fragment.find(collection.fragments[0]) const submittingAuthorData = collection.authors.find( diff --git a/packages/component-invite/src/routes/collectionsInvitations/get.js b/packages/component-invite/src/routes/collectionsInvitations/get.js index 4dd66e7d5eaa6afb9225e4f0abb346d34f47ab5f..b4031f89fb221f93140e6f2a6eea6551629bc090 100644 --- a/packages/component-invite/src/routes/collectionsInvitations/get.js +++ b/packages/component-invite/src/routes/collectionsInvitations/get.js @@ -1,7 +1,7 @@ const helpers = require('../../helpers/helpers') const teamHelper = require('../../helpers/Team') const config = require('config') -const inviteHelper = require('../../helpers/Invitation') +const invitationHelper = require('../../helpers/Invitation') const configRoles = config.get('roles') module.exports = models => async (req, res) => { @@ -35,7 +35,7 @@ module.exports = models => async (req, res) => { // TO DO: handle case for when the invitationID is provided const membersData = members.map(async member => { const user = await models.User.find(member) - const { timestamp, status, id } = inviteHelper.getInvitationData( + const { timestamp, status, id } = invitationHelper.getInvitationData( collection.invitations, user.id, role, diff --git a/packages/component-invite/src/routes/collectionsInvitations/post.js b/packages/component-invite/src/routes/collectionsInvitations/post.js index ac55058784569078ce3b2c20c6ccaae9f1e98e25..1cdb4349ebfb7bd38312f0125b0b9d1a066c36f9 100644 --- a/packages/component-invite/src/routes/collectionsInvitations/post.js +++ b/packages/component-invite/src/routes/collectionsInvitations/post.js @@ -74,6 +74,7 @@ module.exports = models => async (req, res) => { models, collection, user, + mailService, ) } else { return res.status(500).json({ @@ -109,6 +110,7 @@ module.exports = models => async (req, res) => { models, collection, newUser, + mailService, ) return res.status(200).json(newUser) } diff --git a/packages/component-invite/src/tests/collectionsInvitations/post.test.js b/packages/component-invite/src/tests/collectionsInvitations/post.test.js index 2483df57e200d5601c52533c063db19b58ba00a1..14573ae7393e4f03910742ce25e2fc2975f024ba 100644 --- a/packages/component-invite/src/tests/collectionsInvitations/post.test.js +++ b/packages/component-invite/src/tests/collectionsInvitations/post.test.js @@ -16,6 +16,7 @@ jest.mock('pubsweet-component-mail-service', () => ({ setupInviteEmail: jest.fn(), setupAssignEmail: jest.fn(), setupDeclineEmail: jest.fn(), + setupReviewerInvitationEmail: jest.fn(), })) const chance = new Chance() const roles = configRoles.collection @@ -69,6 +70,25 @@ describe('Post collections invitations route handler', () => { const data = JSON.parse(res._getData()) expect(data.email).toEqual(body.email) }) + it('should return success when the a reviewer is invited', async () => { + const { user, editorInChief } = testFixtures.users + const { collection } = testFixtures.collections + body = { + email: user.email, + role: 'reviewer', + } + const req = httpMocks.createRequest({ + body, + }) + req.user = editorInChief.id + req.params.collectionId = collection.id + const res = httpMocks.createResponse() + await require(postPath)(models)(req, res) + + expect(res.statusCode).toBe(200) + const data = JSON.parse(res._getData()) + expect(data.email).toEqual(body.email) + }) it('should return an error when inviting his self', async () => { const { editorInChief } = testFixtures.users body.role = roles[random(0, roles.length - 1)] diff --git a/packages/component-invite/src/tests/fixtures/collections.js b/packages/component-invite/src/tests/fixtures/collections.js index f2074be3a097e8d3e8987f6cd1164631cfd17113..b0dba9b453dfd87051819890335cd5e82f0b1e8a 100644 --- a/packages/component-invite/src/tests/fixtures/collections.js +++ b/packages/component-invite/src/tests/fixtures/collections.js @@ -1,5 +1,6 @@ const Chance = require('chance') -const { user, handlingEditor } = require('./userData') +const { user, handlingEditor, author } = require('./userData') +const { fragment } = require('./fragments') const chance = new Chance() const collections = { @@ -7,9 +8,16 @@ const collections = { id: chance.guid(), title: chance.sentence(), type: 'collection', - fragments: [], + fragments: [fragment.id], owners: [user.id], save: jest.fn(), + authors: [ + { + userId: author.id, + isSubmitting: true, + isCorresponding: false, + }, + ], invitations: [ { id: chance.guid(), diff --git a/packages/component-invite/src/tests/fixtures/fixtures.js b/packages/component-invite/src/tests/fixtures/fixtures.js index 0ea29e85ac3a373a20a0e82377e0b6f3dfeef51e..c6a428848717e0d80dabef22d18d5ad531ad841a 100644 --- a/packages/component-invite/src/tests/fixtures/fixtures.js +++ b/packages/component-invite/src/tests/fixtures/fixtures.js @@ -1,9 +1,11 @@ const users = require('./users') const collections = require('./collections') const teams = require('./teams') +const fragments = require('./fragments') module.exports = { users, collections, teams, + fragments, } diff --git a/packages/component-invite/src/tests/fixtures/fragments.js b/packages/component-invite/src/tests/fixtures/fragments.js new file mode 100644 index 0000000000000000000000000000000000000000..32379359150362143172390427a5113121ad9233 --- /dev/null +++ b/packages/component-invite/src/tests/fixtures/fragments.js @@ -0,0 +1,14 @@ +const Chance = require('chance') + +const chance = new Chance() +const fragments = { + fragment: { + id: chance.guid(), + metadata: { + title: chance.sentence(), + abstract: chance.paragraph(), + }, + }, +} + +module.exports = fragments diff --git a/packages/component-invite/src/tests/fixtures/userData.js b/packages/component-invite/src/tests/fixtures/userData.js index 525dda182e4541250e3938da503ff4d5b748f298..de7459c0deabe1dc45b725d355bb609394fef0fc 100644 --- a/packages/component-invite/src/tests/fixtures/userData.js +++ b/packages/component-invite/src/tests/fixtures/userData.js @@ -1,7 +1,6 @@ const Chance = require('chance') const chance = new Chance() - module.exports = { handlingEditor: { id: chance.guid(), @@ -19,4 +18,10 @@ module.exports = { id: chance.guid(), email: chance.email(), }, + author: { + id: chance.guid(), + email: chance.email(), + firstName: chance.first(), + lastName: chance.last(), + }, } diff --git a/packages/component-invite/src/tests/fixtures/users.js b/packages/component-invite/src/tests/fixtures/users.js index fc944b5221b8144032d74409aa1d39501164529d..c36f0a74c4b33715e771c53c2798f3614b06fe99 100644 --- a/packages/component-invite/src/tests/fixtures/users.js +++ b/packages/component-invite/src/tests/fixtures/users.js @@ -1,5 +1,5 @@ const { heTeamID } = require('./teamIDs') -const { handlingEditor, user, admin } = require('./userData') +const { handlingEditor, user, admin, author } = require('./userData') const Chance = require('chance') const chance = new Chance() @@ -57,6 +57,20 @@ const users = { save: jest.fn(() => users.user), isConfirmed: false, }, + author: { + type: 'user', + username: chance.word(), + email: author.email, + password: 'password', + admin: false, + id: author.id, + firstName: author.firstName, + lastName: author.lastName, + affiliation: chance.company(), + title: 'Mr', + save: jest.fn(() => users.author), + isConfirmed: true, + }, } module.exports = users diff --git a/packages/component-invite/src/tests/helpers/Model.js b/packages/component-invite/src/tests/helpers/Model.js index 420cc704e1cfb10eaeb4e346648c192054f7b0dc..c1ded2c8e9866d90df89faa05d681b49dd207311 100644 --- a/packages/component-invite/src/tests/helpers/Model.js +++ b/packages/component-invite/src/tests/helpers/Model.js @@ -14,6 +14,9 @@ const build = () => { find: jest.fn(id => findMock(id, 'collections')), }, Team: {}, + Fragment: { + find: jest.fn(id => findMock(id, 'fragments')), + }, } UserMock.find = jest.fn(id => findMock(id, 'users')) UserMock.findByEmail = jest.fn(email => findByEmailMock(email)) diff --git a/yarn.lock b/yarn.lock index 82e1587a0f8257cfb3709b0d35d5672b81c150b4..4c936b3659f976b7ce67df94e35e43d9d6d12fa5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7521,7 +7521,7 @@ pubsweet-sse@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/pubsweet-sse/-/pubsweet-sse-0.1.4.tgz#1ff38a230143cbd487a8d44afb28a6c4746ee464" -pubsweet@^2.1.3: +pubsweet@2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/pubsweet/-/pubsweet-2.1.3.tgz#bbf7b748a356f9685cf09f14f10ad89ebc0c5a1e" dependencies: