diff --git a/packages/component-invite/config/default.js b/packages/component-invite/config/default.js index 82c160f4b764977fa2baa4c19875e29ba3e56f6b..27fee757472f0eb6c28960974e260631de59a933 100644 --- a/packages/component-invite/config/default.js +++ b/packages/component-invite/config/default.js @@ -9,7 +9,7 @@ module.exports = { }, roles: { global: ['admin', 'editorInChief', 'author', 'handlingEditor'], - collection: ['handlingEditor', 'reviewer'], + collection: ['handlingEditor', 'reviewer', 'author'], inviteRights: { admin: ['admin', 'editorInChief', 'author'], editorInChief: ['handlingEditor'], diff --git a/packages/component-invite/src/tests/collectionsInvitations/decline.test.js b/packages/component-invite/src/tests/collectionsInvitations/decline.test.js index f6669635c403147d6cfbc21c8183b49d529838ea..2d99412824cda19609aa57e0ab969cf4ce7fa9c5 100644 --- a/packages/component-invite/src/tests/collectionsInvitations/decline.test.js +++ b/packages/component-invite/src/tests/collectionsInvitations/decline.test.js @@ -26,7 +26,6 @@ describe('Patch collections invitations route handler', () => { it('should return success when the reviewer declines work on a collection', async () => { const { reviewer } = testFixtures.users const { collection } = testFixtures.collections - body.isAccepted = false const req = httpMocks.createRequest({ body, }) @@ -38,17 +37,16 @@ describe('Patch collections invitations route handler', () => { req.params.invitationId = inv.id const res = httpMocks.createResponse() await require(patchPath)(models)(req, res) - expect(res.statusCode).toBe(200) }) it('should return an error params are missing', async () => { - const { handlingEditor } = testFixtures.users + const { reviewer } = testFixtures.users const { collection } = testFixtures.collections - delete body.isAccepted + delete body.invitationToken const req = httpMocks.createRequest({ body, }) - req.user = handlingEditor.id + req.user = reviewer.id req.params.collectionId = collection.id req.params.invitationId = collection.invitations[0].id const res = httpMocks.createResponse() @@ -56,21 +54,21 @@ 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('Token is required') }) it('should return an error if the collection does not exists', async () => { - const { handlingEditor } = testFixtures.users + const { reviewer } = testFixtures.users const req = httpMocks.createRequest({ body, }) - req.user = handlingEditor.id + req.user = reviewer.id req.params.collectionId = 'invalid-id' const res = httpMocks.createResponse() await require(patchPath)(models)(req, res) expect(res.statusCode).toBe(404) const data = JSON.parse(res._getData()) - expect(data.error).toEqual('collection not found') + expect(data.error).toEqual('item not found') }) it('should return an error when the invitation does not exist', async () => { const { user } = testFixtures.users @@ -88,33 +86,32 @@ describe('Patch collections invitations route handler', () => { const data = JSON.parse(res._getData()) expect(data.error).toEqual('Invitation invalid-id not found') }) - it("should return an error when a user tries to patch another user's invitation", async () => { + it('should return an error when the token is invalid', async () => { const { reviewer } = testFixtures.users const { collection } = testFixtures.collections + body.invitationToken = 'invalid-token' const req = httpMocks.createRequest({ body, }) req.user = reviewer.id req.params.collectionId = collection.id const inv = collection.invitations.find( - inv => inv.role === 'handlingEditor' && inv.hasAnswer === false, + inv => inv.role === 'reviewer' && inv.hasAnswer === false, ) req.params.invitationId = inv.id const res = httpMocks.createResponse() await require(patchPath)(models)(req, res) - expect(res.statusCode).toBe(403) + expect(res.statusCode).toBe(404) 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('item not found') }) it('should return an error when the invitation is already answered', async () => { - const { handlingEditor } = testFixtures.users + const { reviewer } = testFixtures.users const { collection } = testFixtures.collections const req = httpMocks.createRequest({ body, }) - req.user = handlingEditor.id + req.user = reviewer.id req.params.collectionId = collection.id const inv = collection.invitations.find(inv => inv.hasAnswer) req.params.invitationId = inv.id diff --git a/packages/component-invite/src/tests/helpers/Model.js b/packages/component-invite/src/tests/helpers/Model.js index 7337e1aa65d689787330b3996571b22c5c39504c..df543155a679c4c7e2bb91a8304835c458e38d44 100644 --- a/packages/component-invite/src/tests/helpers/Model.js +++ b/packages/component-invite/src/tests/helpers/Model.js @@ -21,6 +21,9 @@ const build = fixtures => { UserMock.find = jest.fn(id => findMock(id, 'users', fixtures)) UserMock.findByEmail = jest.fn(email => findByEmailMock(email, fixtures)) UserMock.all = jest.fn(() => Object.values(fixtures.users)) + UserMock.findOneByField = jest.fn((field, value) => + findOneByFieldMock(field, value, 'users', fixtures), + ) TeamMock.find = jest.fn(id => findMock(id, 'teams', fixtures)) TeamMock.updateProperties = jest.fn(team => updatePropertiesMock(team, 'teams', fixtures), @@ -58,4 +61,12 @@ const updatePropertiesMock = (obj, type, fixtures) => { if (foundObj === undefined) return Promise.reject(notFoundError) return Promise.resolve(foundObj) } + +const findOneByFieldMock = (field, value, type, fixtures) => { + const foundObj = Object.values(fixtures[type]).find( + fixtureObj => fixtureObj[field] === value, + ) + if (foundObj === undefined) return Promise.reject(notFoundError) + return Promise.resolve(foundObj) +} module.exports = { build }