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