From afbdb0c3de0dcd67ca32345f16d5adc8e402efd2 Mon Sep 17 00:00:00 2001
From: Sebastian Mihalache <sebi.mihalache@gmail.com>
Date: Tue, 30 Oct 2018 09:46:44 +0200
Subject: [PATCH] fix(manuscript-manager): add check for EiC decision on older
 versions

---
 .../routes/fragmentsRecommendations/post.js   | 21 ++++++++-------
 .../fragmentsRecommendations/post.test.js     | 27 +++++++++++++++++++
 2 files changed, 38 insertions(+), 10 deletions(-)

diff --git a/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js b/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
index 28ef9ffcd..43206e0e1 100644
--- a/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
+++ b/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
@@ -70,25 +70,26 @@ module.exports = models => async (req, res) => {
     })
 
   if (
+    recommendationType === recommendations.type.editor &&
+    last(collection.fragments) !== fragmentId
+  ) {
+    return res
+      .status(400)
+      .json({ error: 'Cannot make a recommendation on an older version.' })
+  }
+
+  if (
+    recommendation === recommendations.publish &&
     recommendationType === recommendations.type.editor &&
     collection.handlingEditor &&
     collection.handlingEditor.id === req.user
   ) {
     const fragmentHelper = new Fragment({ fragment })
-    if (
-      recommendation === recommendations.publish &&
-      !fragmentHelper.hasReviewReport()
-    ) {
+    if (!fragmentHelper.hasReviewReport()) {
       return res
         .status(400)
         .json({ error: 'Cannot publish without at least one reviewer report.' })
     }
-
-    if (last(collection.fragments) !== fragmentId) {
-      return res
-        .status(400)
-        .json({ error: 'Cannot make a recommendation on an older version.' })
-    }
   }
 
   fragment.recommendations = fragment.recommendations || []
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 7ea43a34d..867d1ed0d 100644
--- a/packages/component-manuscript-manager/src/tests/fragmentsRecommendations/post.test.js
+++ b/packages/component-manuscript-manager/src/tests/fragmentsRecommendations/post.test.js
@@ -384,4 +384,31 @@ describe('Post fragments recommendations route handler', () => {
       'Cannot make a recommendation on an older version.',
     )
   })
+
+  it('should return an error when an EiC makes a decision on an older version of a manuscript', async () => {
+    const { editorInChief } = testFixtures.users
+    const { twoVersionsCollection } = testFixtures.collections
+    const { fragment } = testFixtures.fragments
+    body.recommendation = 'publish'
+    body.recommendationType = 'editorRecommendation'
+
+    const res = await requests.sendRequest({
+      body,
+      userId: editorInChief.id,
+      models,
+      route,
+      path,
+      params: {
+        collectionId: twoVersionsCollection.id,
+        fragmentId: fragment.id,
+      },
+    })
+
+    expect(res.statusCode).toBe(400)
+    const data = JSON.parse(res._getData())
+
+    expect(data.error).toEqual(
+      'Cannot make a recommendation on an older version.',
+    )
+  })
 })
-- 
GitLab