From b63d478520376973b45225799248a8b2d2c606f0 Mon Sep 17 00:00:00 2001 From: Sebastian <sebastian.mihalache@thinslices.com> Date: Fri, 13 Apr 2018 11:02:56 +0300 Subject: [PATCH] feat(component-invite): fix get tests, add reviewer test --- .../src/helpers/Invitation.js | 9 +++++++-- .../src/routes/collectionsInvitations/get.js | 4 ++-- .../src/routes/collectionsInvitations/post.js | 2 ++ .../tests/collectionsInvitations/post.test.js | 20 +++++++++++++++++++ .../src/tests/fixtures/collections.js | 12 +++++++++-- .../src/tests/fixtures/fixtures.js | 2 ++ .../src/tests/fixtures/fragments.js | 14 +++++++++++++ .../src/tests/fixtures/userData.js | 7 ++++++- .../src/tests/fixtures/users.js | 16 ++++++++++++++- .../src/tests/helpers/Model.js | 3 +++ yarn.lock | 2 +- 11 files changed, 82 insertions(+), 9 deletions(-) create mode 100644 packages/component-invite/src/tests/fixtures/fragments.js diff --git a/packages/component-invite/src/helpers/Invitation.js b/packages/component-invite/src/helpers/Invitation.js index c72fe3b07..0cf06c9ac 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 4dd66e7d5..b4031f89f 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 ac5505878..1cdb4349e 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 2483df57e..14573ae73 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 f2074be3a..b0dba9b45 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 0ea29e85a..c6a428848 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 000000000..323793591 --- /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 525dda182..de7459c0d 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 fc944b522..c36f0a74c 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 420cc704e..c1ded2c8e 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 82e1587a0..4c936b365 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: -- GitLab