From 7bc4da2f65d7832c15529443d086489c19bd2ecd Mon Sep 17 00:00:00 2001 From: Sebastian <sebastian.mihalache@thinslices.com> Date: Wed, 25 Apr 2018 15:24:21 +0300 Subject: [PATCH] feat(component-invite): fix bugs on resend --- .../src/helpers/Invitation.js | 5 +--- .../routes/collectionsInvitations/patch.js | 12 ++++----- .../src/routes/collectionsInvitations/post.js | 2 +- .../collectionsInvitations/patch.test.js | 10 +++----- .../tests/collectionsInvitations/post.test.js | 20 +++++++++++++++ .../src/tests/fixtures/collections.js | 12 ++++++--- .../src/tests/fixtures/userData.js | 1 + .../src/tests/fixtures/users.js | 25 ++++++++++++++++++- 8 files changed, 65 insertions(+), 22 deletions(-) diff --git a/packages/component-invite/src/helpers/Invitation.js b/packages/component-invite/src/helpers/Invitation.js index b7ae10f4f..fe4efdc0f 100644 --- a/packages/component-invite/src/helpers/Invitation.js +++ b/packages/component-invite/src/helpers/Invitation.js @@ -80,10 +80,7 @@ const setupReviewerInvitation = async ({ const getInvitation = (invitations = [], userId, role) => invitations.find( - invitation => - invitation.userId === userId && - invitation.role === role && - invitation.hasAnswer === false, + invitation => invitation.userId === userId && invitation.role === role, ) module.exports = { diff --git a/packages/component-invite/src/routes/collectionsInvitations/patch.js b/packages/component-invite/src/routes/collectionsInvitations/patch.js index ecf43d5f6..cf2c13292 100644 --- a/packages/component-invite/src/routes/collectionsInvitations/patch.js +++ b/packages/component-invite/src/routes/collectionsInvitations/patch.js @@ -10,7 +10,7 @@ module.exports = models => async (req, res) => { const { isAccepted, reason } = req.body if (!helpers.checkForUndefinedParams(isAccepted)) { - res.status(400).json({ error: 'Missing parameters' }) + res.status(400).json({ error: 'Missing parameters.' }) logger.error('some parameters are missing') return } @@ -23,17 +23,15 @@ module.exports = models => async (req, res) => { ) if (invitation === undefined) return res.status(404).json({ - error: `Invitation ${invitationId} not found`, + error: 'Invitation not found.', }) if (invitation.hasAnswer) return res .status(400) - .json({ error: `${invitation.id} has already been answered` }) + .json({ error: 'Invitation has already been answered.' }) if (invitation.userId !== user.id) return res.status(403).json({ - error: `User ${user.email} is not allowed to modify invitation ${ - invitation.id - }`, + error: `User is not allowed to modify this invitation.`, }) const params = { @@ -104,7 +102,7 @@ module.exports = models => async (req, res) => { ) } else if (invitation.role === 'reviewer') { await collectionHelper.updateReviewerCollectionStatus(collection) - return await userHelper.setupReviewerDecisionEmailData({ + await userHelper.setupReviewerDecisionEmailData({ ...params, agree: false, }) diff --git a/packages/component-invite/src/routes/collectionsInvitations/post.js b/packages/component-invite/src/routes/collectionsInvitations/post.js index 1792789ce..b8f52aa68 100644 --- a/packages/component-invite/src/routes/collectionsInvitations/post.js +++ b/packages/component-invite/src/routes/collectionsInvitations/post.js @@ -65,7 +65,7 @@ module.exports = models => async (req, res) => { if (invitation.hasAnswer) return res .status(400) - .json({ error: `${invitation.id} has already been answered` }) + .json({ error: 'User has already replied to a previous invitation.' }) invitation.timestamp = Date.now() await collection.save() resend = true diff --git a/packages/component-invite/src/tests/collectionsInvitations/patch.test.js b/packages/component-invite/src/tests/collectionsInvitations/patch.test.js index fba9ffbe3..6aba43fb3 100644 --- a/packages/component-invite/src/tests/collectionsInvitations/patch.test.js +++ b/packages/component-invite/src/tests/collectionsInvitations/patch.test.js @@ -109,7 +109,7 @@ describe('Patch collections invitations route handler', () => { expect(res.statusCode).toBe(400) const data = JSON.parse(res._getData()) - expect(data.error).toEqual('Missing parameters') + expect(data.error).toEqual('Missing parameters.') }) it('should return an error if the collection does not exists', async () => { const { handlingEditor } = testFixtures.users @@ -139,7 +139,7 @@ describe('Patch collections invitations route handler', () => { expect(res.statusCode).toBe(404) const data = JSON.parse(res._getData()) - expect(data.error).toEqual('Invitation invalid-id not found') + expect(data.error).toEqual('Invitation not found.') }) it("should return an error when a user tries to patch another user's invitation", async () => { const { reviewer } = testFixtures.users @@ -157,9 +157,7 @@ describe('Patch collections invitations route handler', () => { await require(patchPath)(models)(req, res) expect(res.statusCode).toBe(403) const data = JSON.parse(res._getData()) - expect(data.error).toEqual( - `User ${reviewer.email} is not allowed to modify invitation ${inv.id}`, - ) + expect(data.error).toEqual(`User is not allowed to modify this invitation.`) }) it('should return an error when the invitation is already answered', async () => { const { handlingEditor } = testFixtures.users @@ -175,6 +173,6 @@ describe('Patch collections invitations route handler', () => { await require(patchPath)(models)(req, res) expect(res.statusCode).toBe(400) const data = JSON.parse(res._getData()) - expect(data.error).toEqual(`${inv.id} has already been answered`) + expect(data.error).toEqual(`Invitation has already been answered.`) }) }) diff --git a/packages/component-invite/src/tests/collectionsInvitations/post.test.js b/packages/component-invite/src/tests/collectionsInvitations/post.test.js index d72bd114d..f15832969 100644 --- a/packages/component-invite/src/tests/collectionsInvitations/post.test.js +++ b/packages/component-invite/src/tests/collectionsInvitations/post.test.js @@ -136,4 +136,24 @@ describe('Post collections invitations route handler', () => { const data = JSON.parse(res._getData()) expect(data.role).toEqual(body.role) }) + it('should return an error when the invitation is already answered', async () => { + const { answerReviewer, handlingEditor } = testFixtures.users + const { collection } = testFixtures.collections + body = { + email: answerReviewer.email, + role: 'reviewer', + } + const req = httpMocks.createRequest({ + body, + }) + req.user = handlingEditor.id + req.params.collectionId = collection.id + const res = httpMocks.createResponse() + await require(postPath)(models)(req, res) + expect(res.statusCode).toBe(400) + const data = JSON.parse(res._getData()) + expect(data.error).toEqual( + `User has already replied to a previous invitation.`, + ) + }) }) diff --git a/packages/component-invite/src/tests/fixtures/collections.js b/packages/component-invite/src/tests/fixtures/collections.js index 9331af1e1..66e4e0f60 100644 --- a/packages/component-invite/src/tests/fixtures/collections.js +++ b/packages/component-invite/src/tests/fixtures/collections.js @@ -1,5 +1,11 @@ const Chance = require('chance') -const { user, handlingEditor, author, reviewer } = require('./userData') +const { + user, + handlingEditor, + author, + reviewer, + answerReviewer, +} = require('./userData') const { fragment } = require('./fragments') const chance = new Chance() @@ -37,10 +43,10 @@ const collections = { }, { id: chance.guid(), - role: 'handlingEditor', + role: 'reviewer', hasAnswer: true, isAccepted: false, - userId: handlingEditor.id, + userId: answerReviewer.id, timestamp: chance.timestamp(), }, ], diff --git a/packages/component-invite/src/tests/fixtures/userData.js b/packages/component-invite/src/tests/fixtures/userData.js index a7046079c..546e2d867 100644 --- a/packages/component-invite/src/tests/fixtures/userData.js +++ b/packages/component-invite/src/tests/fixtures/userData.js @@ -14,4 +14,5 @@ module.exports = { admin: generateUserData(), author: generateUserData(), reviewer: generateUserData(), + answerReviewer: generateUserData(), } diff --git a/packages/component-invite/src/tests/fixtures/users.js b/packages/component-invite/src/tests/fixtures/users.js index 26de18e4d..c5f0a5e41 100644 --- a/packages/component-invite/src/tests/fixtures/users.js +++ b/packages/component-invite/src/tests/fixtures/users.js @@ -1,5 +1,12 @@ const { heTeamID, revTeamID } = require('./teamIDs') -const { handlingEditor, user, admin, author, reviewer } = require('./userData') +const { + handlingEditor, + user, + admin, + author, + reviewer, + answerReviewer, +} = require('./userData') const Chance = require('chance') const chance = new Chance() @@ -89,6 +96,22 @@ const users = { teams: [revTeamID], invitationToken: 'inv-token-123', }, + answerReviewer: { + type: 'user', + username: chance.word(), + email: answerReviewer.email, + password: 'password', + admin: false, + id: answerReviewer.id, + firstName: answerReviewer.firstName, + lastName: answerReviewer.lastName, + affiliation: chance.company(), + title: 'Dr', + save: jest.fn(() => users.answerReviewer), + isConfirmed: true, + teams: [revTeamID], + invitationToken: 'inv-token-123', + }, } module.exports = users -- GitLab