From f14ec250de00c6311d77c4c906f458457f8d3ad9 Mon Sep 17 00:00:00 2001 From: Bogdan Cochior <bogdan.cochior@thinslices.com> Date: Fri, 29 Jun 2018 10:48:31 +0300 Subject: [PATCH] feat(authsome): enhance authsome to hide editorial comments until decision --- .../xpub-faraday/config/authsome-helpers.js | 22 ++++++++++------- packages/xpub-faraday/config/authsome-mode.js | 5 +++- .../tests/authsome-helpers.test.js | 24 +++++++++++++++++++ 3 files changed, 42 insertions(+), 9 deletions(-) diff --git a/packages/xpub-faraday/config/authsome-helpers.js b/packages/xpub-faraday/config/authsome-helpers.js index 8b5a135a3..349e8aba0 100644 --- a/packages/xpub-faraday/config/authsome-helpers.js +++ b/packages/xpub-faraday/config/authsome-helpers.js @@ -126,12 +126,13 @@ const hasFragmentInDraft = async ({ object, Fragment }) => { return isInDraft(fragment) } -const filterAuthorRecommendationData = recommendation => { - const { comments } = recommendation - return { - ...recommendation, - comments: comments ? comments.filter(c => c.public) : [], - } +const filterAuthorRecommendationData = (recommendations, status) => { + const canViewComments = authorAllowedStatuses.includes(status) + return recommendations.map(r => ({ + ...r, + comments: + r.comments && canViewComments ? r.comments.filter(c => c.public) : [], + })) } const stripeCollectionByRole = (coll = {}, role = '') => { @@ -151,14 +152,19 @@ const stripeCollectionByRole = (coll = {}, role = '') => { return coll } -const stripeFragmentByRole = (fragment = {}, role = '', user = {}) => { +const stripeFragmentByRole = ( + fragment = {}, + role = '', + status = '', + user = {}, +) => { const { recommendations, files, authors } = fragment switch (role) { case 'author': return { ...fragment, recommendations: recommendations - ? recommendations.map(filterAuthorRecommendationData) + ? filterAuthorRecommendationData(recommendations, status) : [], } case 'reviewer': diff --git a/packages/xpub-faraday/config/authsome-mode.js b/packages/xpub-faraday/config/authsome-mode.js index 2aada0e12..35c8382fd 100644 --- a/packages/xpub-faraday/config/authsome-mode.js +++ b/packages/xpub-faraday/config/authsome-mode.js @@ -132,9 +132,12 @@ async function applyAuthenticatedUserPolicy(user, operation, object, context) { if (!permission) return false + const collectionId = get(object, 'fragment.collectionId') + const { status } = await context.models.Collection.find(collectionId) + return { filter: fragment => - helpers.stripeFragmentByRole(fragment, permission.role, user), + helpers.stripeFragmentByRole(fragment, permission.role, user, status), } } diff --git a/packages/xpub-faraday/tests/authsome-helpers.test.js b/packages/xpub-faraday/tests/authsome-helpers.test.js index 8999b892b..1f0823f0d 100644 --- a/packages/xpub-faraday/tests/authsome-helpers.test.js +++ b/packages/xpub-faraday/tests/authsome-helpers.test.js @@ -112,6 +112,30 @@ describe('Authsome Helpers', () => { ] const result = ah.stripeFragmentByRole(fragment, 'author') const privateComments = get(result, 'recommendations[0].comments') + expect(privateComments).toHaveLength(0) + }) + it('stripeFragment - author should see comments only if recommendation has been made', () => { + const { fragment } = testFixtures.fragments + fragment.recommendations = [ + { + comments: [ + { + content: 'private', + public: false, + }, + { + content: 'public', + public: true, + }, + ], + }, + ] + const result = ah.stripeFragmentByRole( + fragment, + 'author', + 'revisionRequested', + ) + const privateComments = get(result, 'recommendations[0].comments') expect(privateComments).toHaveLength(1) }) }) -- GitLab