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