Skip to content
Snippets Groups Projects
Commit 1271d96e authored by Alexandru Munteanu's avatar Alexandru Munteanu
Browse files

Merge branch 'develop' of gitlab.coko.foundation:xpub/xpub-faraday into develop

parents dfa8675c 52f6e20b
No related branches found
No related tags found
1 merge request!6Agree/Decline to work on a manuscript
......@@ -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'],
......
......@@ -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
......
......@@ -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 }
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment