From 9bd5b1371b6725c59e18147df4190be0e9778c87 Mon Sep 17 00:00:00 2001 From: Sebastian <sebastian.mihalache@thinslices.com> Date: Wed, 28 Feb 2018 16:11:43 +0000 Subject: [PATCH] test(component-invite): add multiple assignations to a user --- .../src/controllers/assignCollectionRole.js | 3 ++- .../src/routes/postAssignation.js | 24 +++++++++++-------- .../src/tests/fixtures/users.js | 12 ++++++---- .../src/tests/postAssignation.test.js | 10 ++++---- .../src/tests/postInvite.test.js | 4 ++-- packages/xpub-faraday/config/validations.js | 2 +- 6 files changed, 31 insertions(+), 24 deletions(-) diff --git a/packages/component-invite/src/controllers/assignCollectionRole.js b/packages/component-invite/src/controllers/assignCollectionRole.js index cccf36662..aa1943241 100644 --- a/packages/component-invite/src/controllers/assignCollectionRole.js +++ b/packages/component-invite/src/controllers/assignCollectionRole.js @@ -47,7 +47,8 @@ module.exports = async ( isAccepted: false, collectionId, } - user.assignation = assignation + user.assignations = [] + user.assignations.push(assignation) user = await user.save() await mailService.setupAssignEmail( user.email, diff --git a/packages/component-invite/src/routes/postAssignation.js b/packages/component-invite/src/routes/postAssignation.js index 17f841bbb..5829a21ed 100644 --- a/packages/component-invite/src/routes/postAssignation.js +++ b/packages/component-invite/src/routes/postAssignation.js @@ -11,31 +11,35 @@ module.exports = models => async (req, res) => { } const user = await models.User.find(req.user) - if (!user.assignation) { + if (!user.assignations) { res.status(400).json({ error: 'The user has no assignation' }) logger.error('The request user does not have any assignation') return } const { collectionId } = req.params - if (collectionId !== user.assignation.collectionId) { + const assignations = user.assignations.filter( + assignation => assignation.collectionId === collectionId, + ) + + if (assignations.length === 0) { res.status(400).json({ - error: 'User collection and provided collection do not match', + error: `Collection ${collectionId} does not match any user assignation`, }) logger.error( - `Param ${collectionId} does not match user collection: ${ - user.assignation.collectionId - }`, + `Collection ${collectionId} does not match any user assignation`, ) return } - if (type !== user.assignation.type) { + const matchingAssignation = assignations[0] + + if (type !== matchingAssignation.type) { res.status(400).json({ error: 'User assignation type and provided type do not match', }) logger.error( `Param ${type} does not match user assignation type: ${ - user.assignation.type + matchingAssignation.type }`, ) return @@ -44,9 +48,9 @@ module.exports = models => async (req, res) => { try { await models.Collection.find(collectionId) // TODO: create a team and add the team id to the user's teams array - user.assignation.hasAnswer = true + matchingAssignation.hasAnswer = true if (accept === true) { - user.assignation.isAccepted = true + matchingAssignation.isAccepted = true } await user.save() res.status(204).json() diff --git a/packages/component-invite/src/tests/fixtures/users.js b/packages/component-invite/src/tests/fixtures/users.js index 012d67453..b918c91c6 100644 --- a/packages/component-invite/src/tests/fixtures/users.js +++ b/packages/component-invite/src/tests/fixtures/users.js @@ -31,11 +31,13 @@ const users = { admin: false, id: 'handling123', roles: ['handlingEditor'], - assignation: { - type: 'handlingEditor', - hasAnswer: false, - isAccepted: false, - }, + assignations: [ + { + type: 'handlingEditor', + hasAnswer: false, + isAccepted: false, + }, + ], save: jest.fn(() => users.handlingEditor), }, author: { diff --git a/packages/component-invite/src/tests/postAssignation.test.js b/packages/component-invite/src/tests/postAssignation.test.js index 5610f418c..a2e4dbd9b 100644 --- a/packages/component-invite/src/tests/postAssignation.test.js +++ b/packages/component-invite/src/tests/postAssignation.test.js @@ -53,8 +53,8 @@ describe('Post assignation route handler', () => { await require(postAssignationPath)(models)(req, res) expect(res.statusCode).toBe(204) - expect(acceptingHE.assignation.hasAnswer).toBeTruthy() - expect(acceptingHE.assignation.isAccepted).toBeTruthy() + expect(acceptingHE.assignations[0].hasAnswer).toBeTruthy() + expect(acceptingHE.assignations[0].isAccepted).toBeTruthy() }) it('should return success when the handling editor refuses work on a collection', async () => { const refusingHE = cloneDeep(handlingEditor) @@ -71,8 +71,8 @@ describe('Post assignation route handler', () => { await require(postAssignationPath)(models)(req, res) expect(res.statusCode).toBe(204) - expect(refusingHE.assignation.hasAnswer).toBeTruthy() - expect(refusingHE.assignation.isAccepted).toBeFalsy() + expect(refusingHE.assignations[0].hasAnswer).toBeTruthy() + expect(refusingHE.assignations[0].isAccepted).toBeFalsy() }) it('should return an error params are missing', async () => { const body = { @@ -116,7 +116,7 @@ describe('Post assignation route handler', () => { const req = httpMocks.createRequest({ body, }) - delete noAssignationEditor.assignation + delete noAssignationEditor.assignations req.user = noAssignationEditor const res = httpMocks.createResponse() const models = buildModels(standardCollection, noAssignationEditor) diff --git a/packages/component-invite/src/tests/postInvite.test.js b/packages/component-invite/src/tests/postInvite.test.js index d03f3ebc8..5a3bdc423 100644 --- a/packages/component-invite/src/tests/postInvite.test.js +++ b/packages/component-invite/src/tests/postInvite.test.js @@ -208,7 +208,7 @@ describe('Post invite route handler', () => { const data = JSON.parse(res._getData()) expect(data.roles).toContain(body.role) expect(data.email).toEqual(body.email) - expect(data.assignation.collectionId).toEqual(req.params.collectionId) + expect(data.assignations[0].collectionId).toEqual(req.params.collectionId) }) it('should return success when the handlingEditor invites a reviewer with a collection', async () => { const body = { @@ -228,6 +228,6 @@ describe('Post invite route handler', () => { const data = JSON.parse(res._getData()) expect(data.roles).toContain(body.role) expect(data.email).toEqual(body.email) - expect(data.assignation.collectionId).toEqual(req.params.collectionId) + expect(data.assignations[0].collectionId).toEqual(req.params.collectionId) }) }) diff --git a/packages/xpub-faraday/config/validations.js b/packages/xpub-faraday/config/validations.js index 4a7535172..49323a02f 100644 --- a/packages/xpub-faraday/config/validations.js +++ b/packages/xpub-faraday/config/validations.js @@ -93,7 +93,7 @@ module.exports = { lastName: Joi.string().allow(''), affiliation: Joi.string().allow(''), title: Joi.string().allow(''), - assignation: Joi.object(), + assignations: Joi.array(), }, team: { group: Joi.string(), -- GitLab