diff --git a/packages/component-manuscript-manager/config/authsome-helpers.js b/packages/component-manuscript-manager/config/authsome-helpers.js index 30c00fdbe00f4f00c34324a81d363191da6d12a5..1add8d99b7fb8eca56a2abb7bf43088d599e5efc 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 762998f83e80d5e678595bb8bf7e57072607adbe..667879b274b86a59a28515ed3d595d97e6ad2808 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 7afbb2f22c26d8ae4d9f314989bc4a02189360f7..0a977816afd053a707521a8eea2d19f0af582857 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 0eb54780a931f66f1b611d9a4d51552908ece2c3..1a1a9fa2e0d3cde2c858ca1bf125045bda4206e2 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 f91654bf4ac541952f8fe69f3a70f07179aac0fc..ae58184781d567011673e31d45652af0db220b7f 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 fb2a14eb33ff92d6e39b4763a7ebe89f46028d5c..1c87e804343747e1dfa7132259bc044c9f39081e 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 8ac951e6a00bfa0a4be5d6584a0eca881560cda3..ae54144fab4e8aa3e1a76c765602c3f46769586a 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 ca11f8fa76ea5cd757abfd6710fc2482f9d33981..03a9efdc34c943d5ec10e4ad8c1dff9c01a865e9 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') + }) })