From a78b69da1931fd2edfa90f34e3e75cf7a2250854 Mon Sep 17 00:00:00 2001
From: Sebastian Mihalache <sebastian.mihalache@gmail.con>
Date: Thu, 17 May 2018 15:58:01 +0300
Subject: [PATCH] feat(component-manuscript-manager): update unit tests

---
 .../config/authsome-helpers.js                |  6 ++---
 .../config/authsome-mode.js                   |  4 +--
 .../config/default.js                         |  4 +++
 .../config/test.js                            |  4 +++
 .../routes/fragmentsRecommendations/post.js   |  2 +-
 .../src/tests/fixtures/teams.js               | 20 +++++++++++++--
 .../src/tests/fixtures/users.js               | 19 ++++++++++++--
 .../fragmentsRecommendations/post.test.js     | 25 +++++++++++++++++++
 8 files changed, 74 insertions(+), 10 deletions(-)

diff --git a/packages/component-manuscript-manager/config/authsome-helpers.js b/packages/component-manuscript-manager/config/authsome-helpers.js
index 30c00fdbe..1add8d99b 100644
--- a/packages/component-manuscript-manager/config/authsome-helpers.js
+++ b/packages/component-manuscript-manager/config/authsome-helpers.js
@@ -14,9 +14,9 @@ const parseAuthorsData = (coll, matchingCollPerm) => {
 
 const setPublicStatuses = (coll, matchingCollPerm) => {
   const status = get(coll, 'status') || 'draft'
-  coll.visibleStatus = statuses[status].public
-  if (!publicStatusesPermissions.includes(matchingCollPerm.permission)) {
-    coll.visibleStatus = statuses[coll.status].private
+  // coll.visibleStatus = statuses[status].public
+  if (publicStatusesPermissions.includes(matchingCollPerm.permission)) {
+    coll.visibleStatus = statuses[status].public
   }
 }
 
diff --git a/packages/component-manuscript-manager/config/authsome-mode.js b/packages/component-manuscript-manager/config/authsome-mode.js
index 762998f83..667879b27 100644
--- a/packages/component-manuscript-manager/config/authsome-mode.js
+++ b/packages/component-manuscript-manager/config/authsome-mode.js
@@ -170,7 +170,7 @@ async function authenticatedUser(user, operation, object, context) {
     return false
   }
 
-  // only allow a reviewer to submit and to modify a recommendation
+  // only allow a reviewer and an HE to submit and to modify a recommendation
   if (
     ['POST', 'PATCH'].includes(operation) &&
     get(object.collection, 'type') === 'collection' &&
@@ -181,7 +181,7 @@ async function authenticatedUser(user, operation, object, context) {
     )
     const teams = await helpers.getTeamsByPermissions(
       user.teams,
-      ['reviewer'],
+      ['reviewer', 'handlingEditor'],
       context.models.Team,
     )
     if (teams.length === 0) return false
diff --git a/packages/component-manuscript-manager/config/default.js b/packages/component-manuscript-manager/config/default.js
index 7afbb2f22..0a977816a 100644
--- a/packages/component-manuscript-manager/config/default.js
+++ b/packages/component-manuscript-manager/config/default.js
@@ -54,5 +54,9 @@ module.exports = {
       public: 'Under Review',
       private: 'Under Review',
     },
+    pendingApproval: {
+      public: 'Under Review',
+      private: 'Pending Approval',
+    },
   },
 }
diff --git a/packages/component-manuscript-manager/config/test.js b/packages/component-manuscript-manager/config/test.js
index 0eb54780a..1a1a9fa2e 100644
--- a/packages/component-manuscript-manager/config/test.js
+++ b/packages/component-manuscript-manager/config/test.js
@@ -55,5 +55,9 @@ module.exports = {
       public: 'Under Review',
       private: 'Under Review',
     },
+    pendingApproval: {
+      public: 'Under Review',
+      private: 'Pending Approval',
+    },
   },
 }
diff --git a/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js b/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
index f91654bf4..ae5818478 100644
--- a/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
+++ b/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
@@ -28,12 +28,12 @@ module.exports = models => async (req, res) => {
       error: notFoundError.message,
     })
   }
-
   const authsome = authsomeHelper.getAuthsome(models)
   const target = {
     collection,
     path: req.route.path,
   }
+
   const canPost = await authsome.can(req.user, 'POST', target)
   if (!canPost)
     return res.status(403).json({
diff --git a/packages/component-manuscript-manager/src/tests/fixtures/teams.js b/packages/component-manuscript-manager/src/tests/fixtures/teams.js
index fb2a14eb3..1c87e8043 100644
--- a/packages/component-manuscript-manager/src/tests/fixtures/teams.js
+++ b/packages/component-manuscript-manager/src/tests/fixtures/teams.js
@@ -1,9 +1,9 @@
 const users = require('./users')
 const collections = require('./collections')
-const { revTeamID } = require('./teamIDs')
+const { revTeamID, heTeamID } = require('./teamIDs')
 
 const { collection } = collections
-const { reviewer } = users
+const { reviewer, handlingEditor } = users
 const teams = {
   revTeam: {
     teamType: {
@@ -21,5 +21,21 @@ const teams = {
     updateProperties: jest.fn(() => teams.revTeam),
     id: revTeamID,
   },
+  heTeam: {
+    teamType: {
+      name: 'handlingEditor',
+      permissions: 'handlingEditor',
+    },
+    group: 'handlingEditor',
+    name: 'HandlingEditor',
+    object: {
+      type: 'collection',
+      id: collection.id,
+    },
+    members: [handlingEditor.id],
+    save: jest.fn(() => teams.heTeam),
+    updateProperties: jest.fn(() => teams.heTeam),
+    id: heTeamID,
+  },
 }
 module.exports = teams
diff --git a/packages/component-manuscript-manager/src/tests/fixtures/users.js b/packages/component-manuscript-manager/src/tests/fixtures/users.js
index 8ac951e6a..ae54144fa 100644
--- a/packages/component-manuscript-manager/src/tests/fixtures/users.js
+++ b/packages/component-manuscript-manager/src/tests/fixtures/users.js
@@ -1,5 +1,5 @@
-const { reviewer, author, recReviewer } = require('./userData')
-const { revTeamID } = require('./teamIDs')
+const { reviewer, author, recReviewer, handlingEditor } = require('./userData')
+const { revTeamID, heTeamID } = require('./teamIDs')
 
 const Chance = require('chance')
 
@@ -49,6 +49,21 @@ const users = {
     isConfirmed: true,
     teams: [revTeamID],
   },
+  handlingEditor: {
+    type: 'user',
+    username: chance.word(),
+    email: handlingEditor.email,
+    password: 'password',
+    admin: false,
+    id: handlingEditor.id,
+    firstName: handlingEditor.firstName,
+    lastName: handlingEditor.lastName,
+    teams: [heTeamID],
+    save: jest.fn(() => users.handlingEditor),
+    editorInChief: false,
+    handlingEditor: true,
+    title: 'Mr',
+  },
 }
 
 module.exports = users
diff --git a/packages/component-manuscript-manager/src/tests/fragmentsRecommendations/post.test.js b/packages/component-manuscript-manager/src/tests/fragmentsRecommendations/post.test.js
index ca11f8fa7..03a9efdc3 100644
--- a/packages/component-manuscript-manager/src/tests/fragmentsRecommendations/post.test.js
+++ b/packages/component-manuscript-manager/src/tests/fragmentsRecommendations/post.test.js
@@ -136,4 +136,29 @@ describe('Post fragments recommendations route handler', () => {
     const data = JSON.parse(res._getData())
     expect(data.error).toEqual('Unauthorized.')
   })
+  it('should return success when a HE recommends to reject', async () => {
+    const { handlingEditor } = testFixtures.users
+    const { collection } = testFixtures.collections
+    const { fragment } = testFixtures.fragments
+    body.recommendation = 'reject'
+    body.recommendationType = 'editorRecommendation'
+
+    const res = await requests.sendRequest({
+      body,
+      userId: handlingEditor.id,
+      models,
+      route,
+      path,
+      params: {
+        collectionId: collection.id,
+        fragmentId: fragment.id,
+      },
+    })
+
+    expect(res.statusCode).toBe(200)
+    const data = JSON.parse(res._getData())
+
+    expect(data.userId).toEqual(handlingEditor.id)
+    expect(data.recommendation).toBe('reject')
+  })
 })
-- 
GitLab