-
Sebastian Mihalache authoreda78b69da
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'
process.env.SUPPRESS_NO_CONFIG_WARNING = true
const fixtures = require('./../fixtures/fixtures')
const Chance = require('chance')
const Model = require('./../helpers/Model')
const cloneDeep = require('lodash/cloneDeep')
const requests = require('./../helpers/requests')
const chance = new Chance()
const reqBody = {
recommendation: 'accept',
comments: [
{
content: chance.paragraph(),
public: chance.bool(),
files: [
{
id: chance.guid(),
name: 'file.pdf',
size: chance.natural(),
},
],
},
],
recommendationType: 'review',
}
const path = '../../routes/fragmentsRecommendations/post'
const route = {
path: '/api/collections/:collectionId/fragments/:fragmentId/recommendations',
}
describe('Post fragments recommendations route handler', () => {
let testFixtures = {}
let body = {}
let models
beforeEach(() => {
testFixtures = cloneDeep(fixtures)
body = cloneDeep(reqBody)
models = Model.build(testFixtures)
})
it('should return an error when params are missing', async () => {
const { reviewer } = testFixtures.users
delete body.recommendationType
const res = await requests.sendRequest({
body,
userId: reviewer.id,
route,
models,
path,
})
expect(res.statusCode).toBe(400)
const data = JSON.parse(res._getData())
expect(data.error).toEqual('Recommendation type is required.')
})
it('should return success when the parameters are correct', async () => {
const { reviewer } = testFixtures.users
const { collection } = testFixtures.collections
const { fragment } = testFixtures.fragments
const res = await requests.sendRequest({
body,
userId: reviewer.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(reviewer.id)
})
it('should return an error when the fragmentId does not match the collectionId', async () => {
const { reviewer } = testFixtures.users
const { collection } = testFixtures.collections
const { fragment } = testFixtures.fragments
collection.fragments.length = 0
const res = await requests.sendRequest({
body,
userId: reviewer.id,
models,
route,
path,
params: {
collectionId: collection.id,
fragmentId: fragment.id,
},
})
expect(res.statusCode).toBe(400)
const data = JSON.parse(res._getData())
expect(data.error).toEqual('Collection and fragment do not match.')
})
it('should return an error when the collection does not exist', async () => {
const { reviewer } = testFixtures.users
const { fragment } = testFixtures.fragments
const res = await requests.sendRequest({
body,
userId: reviewer.id,
models,
route,
path,
params: {
collectionId: 'invalid-id',
fragmentId: fragment.id,
},
})
expect(res.statusCode).toBe(404)
const data = JSON.parse(res._getData())
expect(data.error).toEqual('Item not found')
})
it('should return an error when the request user is not a reviewer', async () => {
const { author } = testFixtures.users
const { collection } = testFixtures.collections
const { fragment } = testFixtures.fragments
const res = await requests.sendRequest({
body,
userId: author.id,
models,
route,
path,
params: {
collectionId: collection.id,
fragmentId: fragment.id,
},
})
expect(res.statusCode).toBe(403)
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')
})
})