From 591733c52ae25eeb47d8c9b54b26f5088a1b5e23 Mon Sep 17 00:00:00 2001
From: Bogdan Cochior <bogdan.cochior@thinslices.com>
Date: Fri, 6 Jul 2018 11:39:09 +0300
Subject: [PATCH] fix(author-details): show reports for previous versions

---
 packages/xpub-faraday/config/authsome-helpers.js     | 7 ++++---
 packages/xpub-faraday/config/authsome-mode.js        | 7 +++++--
 packages/xpub-faraday/tests/authsome-helpers.test.js | 2 ++
 3 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/packages/xpub-faraday/config/authsome-helpers.js b/packages/xpub-faraday/config/authsome-helpers.js
index 56f1495a3..49d976c4c 100644
--- a/packages/xpub-faraday/config/authsome-helpers.js
+++ b/packages/xpub-faraday/config/authsome-helpers.js
@@ -126,9 +126,9 @@ const hasFragmentInDraft = async ({ object, Fragment }) => {
   return isInDraft(fragment)
 }
 
-const filterAuthorRecommendations = (recommendations, status) => {
+const filterAuthorRecommendations = (recommendations, status, isLast) => {
   const canViewRecommendations = authorAllowedStatuses.includes(status)
-  if (canViewRecommendations) {
+  if (canViewRecommendations || !isLast) {
     return recommendations.map(r => ({
       ...r,
       comments: r.comments ? r.comments.filter(c => c.public) : [],
@@ -160,6 +160,7 @@ const stripeFragmentByRole = ({
   role = '',
   status = 'draft',
   user = {},
+  isLast = false,
 }) => {
   const { recommendations, files, authors } = fragment
   switch (role) {
@@ -167,7 +168,7 @@ const stripeFragmentByRole = ({
       return {
         ...fragment,
         recommendations: recommendations
-          ? filterAuthorRecommendations(recommendations, status)
+          ? filterAuthorRecommendations(recommendations, status, isLast)
           : [],
       }
     case 'reviewer':
diff --git a/packages/xpub-faraday/config/authsome-mode.js b/packages/xpub-faraday/config/authsome-mode.js
index 9b444f970..143c49ac2 100644
--- a/packages/xpub-faraday/config/authsome-mode.js
+++ b/packages/xpub-faraday/config/authsome-mode.js
@@ -1,5 +1,5 @@
 const config = require('config')
-const { get, pickBy } = require('lodash')
+const { get, pickBy, last } = require('lodash')
 
 const statuses = config.get('statuses')
 const helpers = require('./authsome-helpers')
@@ -133,7 +133,9 @@ async function applyAuthenticatedUserPolicy(user, operation, object, context) {
       if (!permission) return false
 
       const collectionId = get(object, 'collectionId')
-      const { status } = await context.models.Collection.find(collectionId)
+      const { status, fragments } = await context.models.Collection.find(
+        collectionId,
+      )
 
       return {
         filter: fragment =>
@@ -142,6 +144,7 @@ async function applyAuthenticatedUserPolicy(user, operation, object, context) {
             role: permission.role,
             status,
             user,
+            isLast: last(fragments) === fragment.id,
           }),
       }
     }
diff --git a/packages/xpub-faraday/tests/authsome-helpers.test.js b/packages/xpub-faraday/tests/authsome-helpers.test.js
index cdc942b01..0be47181d 100644
--- a/packages/xpub-faraday/tests/authsome-helpers.test.js
+++ b/packages/xpub-faraday/tests/authsome-helpers.test.js
@@ -129,10 +129,12 @@ describe('Authsome Helpers', () => {
         ],
       },
     ]
+
     const { recommendations } = ah.stripeFragmentByRole({
       fragment,
       role: 'author',
       status: 'underReview',
+      isLast: true,
     })
     expect(recommendations).toHaveLength(0)
   })
-- 
GitLab