From eaadaee0e603e438a5ca3e066d127cbb05a15b2c Mon Sep 17 00:00:00 2001
From: Tania Fecheta <tania.fecheta@thinslices.com>
Date: Tue, 20 Nov 2018 09:21:21 +0200
Subject: [PATCH] fix(fragmentsRecommendations): allow eic to make multiple
 decisions

---
 .../src/fixtures/fragments.js                 | 67 ++++++++++++++++++-
 .../routes/fragmentsRecommendations/post.js   | 10 ++-
 .../src/tests/collections/get.test.js         |  2 +-
 3 files changed, 73 insertions(+), 6 deletions(-)

diff --git a/packages/component-fixture-manager/src/fixtures/fragments.js b/packages/component-fixture-manager/src/fixtures/fragments.js
index 48e7b41ce..15e4cb3fa 100644
--- a/packages/component-fixture-manager/src/fixtures/fragments.js
+++ b/packages/component-fixture-manager/src/fixtures/fragments.js
@@ -99,6 +99,69 @@ const fragments = {
         createdOn: chance.timestamp(),
         updatedOn: chance.timestamp(),
       },
+      {
+        recommendation: 'publish',
+        recommendationType: 'editorRecommendation',
+        comments: [
+          {
+            content: chance.paragraph(),
+            public: true,
+            files: [
+              {
+                id: chance.guid(),
+                name: 'file.pdf',
+                size: chance.natural(),
+              },
+            ],
+          },
+        ],
+        id: chance.guid(),
+        userId: handlingEditor.id,
+        createdOn: 1542361074012,
+        updatedOn: chance.timestamp(),
+      },
+      {
+        recommendation: 'return-to-handling-editor',
+        recommendationType: 'editorRecommendation',
+        comments: [
+          {
+            content: chance.paragraph(),
+            public: true,
+            files: [
+              {
+                id: chance.guid(),
+                name: 'file.pdf',
+                size: chance.natural(),
+              },
+            ],
+          },
+        ],
+        id: chance.guid(),
+        userId: admin.id,
+        createdOn: 1542361115749,
+        updatedOn: chance.timestamp(),
+      },
+      {
+        recommendation: 'publish',
+        recommendationType: 'editorRecommendation',
+        comments: [
+          {
+            content: chance.paragraph(),
+            public: chance.bool(),
+            files: [
+              {
+                id: chance.guid(),
+                name: 'file.pdf',
+                size: chance.natural(),
+              },
+            ],
+          },
+        ],
+        id: chance.guid(),
+        userId: handlingEditor.id,
+        createdOn: 1542361115750,
+        updatedOn: chance.timestamp(),
+      },
       {
         recommendation: 'publish',
         recommendationType: 'editorRecommendation',
@@ -117,7 +180,7 @@ const fragments = {
         ],
         id: chance.guid(),
         userId: admin.id,
-        createdOn: chance.timestamp(),
+        createdOn: 1542361115751,
         updatedOn: chance.timestamp(),
       },
     ],
@@ -495,7 +558,7 @@ const fragments = {
           },
         ],
         id: chance.guid(),
-        userId: handlingEditor.id,
+        userId: admin.id,
         createdOn: 1542361115749,
         updatedOn: chance.timestamp(),
       },
diff --git a/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js b/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
index 41cf22755..b47234c1f 100644
--- a/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
+++ b/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
@@ -1,5 +1,5 @@
 const uuid = require('uuid')
-const { pick, get, set, has, isEmpty, last } = require('lodash')
+const { pick, get, set, has, isEmpty, last, chain } = require('lodash')
 const config = require('config')
 const { v4 } = require('uuid')
 const logger = require('@pubsweet/logger')
@@ -60,6 +60,11 @@ module.exports = models => async (req, res) => {
     [],
   ).filter(r => r.userId === req.user)
 
+  const lastFragmentRecommendation = chain(fragment)
+    .get('recommendations', [])
+    .last()
+    .value()
+
   const authsome = authsomeHelper.getAuthsome(models)
   const target = {
     fragment,
@@ -111,8 +116,7 @@ module.exports = models => async (req, res) => {
       recommendationType === recommendations.type.editor &&
       isEditorInChief &&
       recommendation !== recommendations.reject &&
-      last(currentUserRecommendations).recommendation ===
-        'return-to-handling-editor'
+      lastFragmentRecommendation.recommendation === 'return-to-handling-editor'
     ) {
       return res.status(400).json({
         error: 'Cannot make another recommendation on this version.',
diff --git a/packages/component-manuscript-manager/src/tests/collections/get.test.js b/packages/component-manuscript-manager/src/tests/collections/get.test.js
index fb88e5658..aa4a1cfec 100644
--- a/packages/component-manuscript-manager/src/tests/collections/get.test.js
+++ b/packages/component-manuscript-manager/src/tests/collections/get.test.js
@@ -61,7 +61,7 @@ describe('Get collections route handler', () => {
 
     expect(data).toHaveLength(2)
     expect(data[0].type).toEqual('collection')
-    expect(data[0].currentVersion.recommendations).toHaveLength(3)
+    expect(data[0].currentVersion.recommendations).toHaveLength(6)
     expect(data[0].currentVersion.authors[0]).not.toHaveProperty('email')
   })
 
-- 
GitLab