Skip to content
Snippets Groups Projects
Commit d0749fe9 authored by Sebastian Mihalache's avatar Sebastian Mihalache
Browse files

feat(component-user-manager): update remaining tests

parent cd0b9227
No related branches found
No related tags found
2 merge requests!13Sprint #14,!11Submit revision
Showing
with 141 additions and 53 deletions
......@@ -10,13 +10,6 @@ const collections = {
type: 'collection',
fragments: [fragment.id],
owners: [submittingAuthor.id],
authors: [
{
userId: submittingAuthor.id,
isSubmitting: true,
isCorresponding: false,
},
],
save: jest.fn(() => collections.standardCollection),
},
authorsCollection: {
......
const users = require('./users')
const collections = require('./collections')
const teams = require('./teams')
const fragments = require('./fragments')
module.exports = {
users,
collections,
teams,
fragments,
}
const Chance = require('chance')
const { submittingAuthor } = require('./userData')
const chance = new Chance()
const fragments = {
......@@ -9,6 +10,14 @@ const fragments = {
abstract: chance.paragraph(),
},
recommendations: [],
save: jest.fn(() => fragments.fragment),
authors: [
{
userId: submittingAuthor.id,
isSubmitting: true,
isCorresponding: false,
},
],
},
}
......
const users = require('./users')
const collections = require('./collections')
const fragments = require('./fragments')
const { authorTeamID } = require('./teamIDs')
const { standardCollection } = collections
const { fragment } = fragments
const { submittingAuthor } = users
const teams = {
authorTeam: {
......@@ -13,8 +13,8 @@ const teams = {
group: 'author',
name: 'author',
object: {
type: 'collection',
id: standardCollection.id,
type: 'fragment',
id: fragment.id,
},
members: [submittingAuthor.id],
save: jest.fn(() => teams.authorTeam),
......
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'
process.env.SUPPRESS_NO_CONFIG_WARNING = true
const cloneDeep = require('lodash/cloneDeep')
const httpMocks = require('node-mocks-http')
const fixtures = require('./../fixtures/fixtures')
const Model = require('./../helpers/Model')
const models = Model.build()
const { author, submittingAuthor } = fixtures.users
const { standardCollection } = fixtures.collections
const { authorTeam } = fixtures.teams
const deletePath = '../../routes/collectionsUsers/delete'
describe('Delete collections users route handler', () => {
const deletePath = '../../routes/fragmentsUsers/delete'
jest.mock('pubsweet-component-mail-service', () => ({
sendSimpleEmail: jest.fn(),
sendNotificationEmail: jest.fn(),
}))
describe('Delete fragments users route handler', () => {
let testFixtures = {}
let models
beforeEach(() => {
testFixtures = cloneDeep(fixtures)
models = Model.build(testFixtures)
})
it('should return success when an author is deleted', async () => {
const req = httpMocks.createRequest({})
req.user = submittingAuthor.id
req.params.collectionId = standardCollection.id
const [fragmentId] = standardCollection.fragments
req.params.fragmentId = fragmentId
req.params.userId = author.id
const res = httpMocks.createResponse()
await require(deletePath)(models)(req, res)
expect(res.statusCode).toBe(200)
expect(authorTeam.members).not.toContain(author.id)
expect(author.teams).not.toContain(authorTeam.id)
})
it('should return an error when the collection does not exist', async () => {
const req = httpMocks.createRequest({})
......@@ -41,6 +48,8 @@ describe('Delete collections users route handler', () => {
const req = httpMocks.createRequest({})
req.user = submittingAuthor.id
req.params.collectionId = standardCollection.id
const [fragmentId] = standardCollection.fragments
req.params.fragmentId = fragmentId
req.params.userId = 'invalid-id'
const res = httpMocks.createResponse()
await require(deletePath)(models)(req, res)
......@@ -49,4 +58,21 @@ describe('Delete collections users route handler', () => {
const data = JSON.parse(res._getData())
expect(data.error).toEqual('item not found')
})
it('should return an error when the fragment does not exist', async () => {
const req = httpMocks.createRequest()
req.user = submittingAuthor.id
req.params.collectionId = standardCollection.id
req.params.fragmentId = 'invalid-fragment-id'
req.params.userId = author.id
const res = httpMocks.createResponse()
await require(deletePath)(models)(req, res)
expect(res.statusCode).toBe(400)
const data = JSON.parse(res._getData())
expect(data.error).toEqual(
`Fragment invalid-fragment-id does not match collection ${
standardCollection.id
}`,
)
})
})
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'
process.env.SUPPRESS_NO_CONFIG_WARNING = true
const cloneDeep = require('lodash/cloneDeep')
const httpMocks = require('node-mocks-http')
const fixtures = require('./../fixtures/fixtures')
......@@ -8,14 +9,25 @@ const Model = require('./../helpers/Model')
const { standardCollection } = fixtures.collections
const { submittingAuthor } = fixtures.users
const getPath = '../../routes/collectionsUsers/get'
describe('Get collections users route handler', () => {
jest.mock('pubsweet-component-mail-service', () => ({
sendSimpleEmail: jest.fn(),
sendNotificationEmail: jest.fn(),
}))
const getPath = '../../routes/fragmentsUsers/get'
describe('Get fragments users route handler', () => {
let testFixtures = {}
let models
beforeEach(() => {
testFixtures = cloneDeep(fixtures)
models = Model.build(testFixtures)
})
it('should return success when the request data is correct', async () => {
const req = httpMocks.createRequest()
req.params.collectionId = standardCollection.id
const [fragmentId] = standardCollection.fragments
req.params.fragmentId = fragmentId
req.user = submittingAuthor.id
const res = httpMocks.createResponse()
const models = Model.build()
await require(getPath)(models)(req, res)
expect(res.statusCode).toBe(200)
......@@ -29,10 +41,25 @@ describe('Get collections users route handler', () => {
req.params.collectionId = 'invalid-id'
req.user = submittingAuthor.id
const res = httpMocks.createResponse()
const models = Model.build()
await require(getPath)(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 fragment does not exist', async () => {
const req = httpMocks.createRequest()
req.user = submittingAuthor.id
req.params.collectionId = standardCollection.id
req.params.fragmentId = 'invalid-fragment-id'
const res = httpMocks.createResponse()
await require(getPath)(models)(req, res)
expect(res.statusCode).toBe(400)
const data = JSON.parse(res._getData())
expect(data.error).toEqual(
`Fragment invalid-fragment-id does not match collection ${
standardCollection.id
}`,
)
})
})
......@@ -7,42 +7,44 @@ const Model = require('./../helpers/Model')
const Chance = require('chance')
const chance = new Chance()
const cloneDeep = require('lodash/cloneDeep')
const models = Model.build()
jest.mock('pubsweet-component-mail-service', () => ({
sendSimpleEmail: jest.fn(),
sendNotificationEmail: jest.fn(),
}))
const { author, submittingAuthor } = fixtures.users
const { standardCollection, authorsCollection } = fixtures.collections
const body = {
const { standardCollection } = fixtures.collections
const reqBody = {
isSubmitting: false,
isCorresponding: true,
firstName: chance.first(),
lastName: chance.last(),
affiliation: chance.company(),
}
const patchPath = '../../routes/collectionsUsers/patch'
describe('Patch collections users route handler', () => {
const patchPath = '../../routes/fragmentsUsers/patch'
describe('Patch fragments users route handler', () => {
let testFixtures = {}
let body = {}
let models
beforeEach(() => {
testFixtures = cloneDeep(fixtures)
body = cloneDeep(reqBody)
models = Model.build(testFixtures)
})
it('should return success when the request data is correct', async () => {
const req = httpMocks.createRequest({
body,
})
req.user = submittingAuthor.id
req.params.collectionId = standardCollection.id
const [fragmentId] = standardCollection.fragments
req.params.fragmentId = fragmentId
req.params.userId = submittingAuthor.id
const res = httpMocks.createResponse()
await require(patchPath)(models)(req, res)
const data = JSON.parse(res._getData())
expect(res.statusCode).toBe(200)
const matchingAuthor = data.authors.find(
author => author.userId === submittingAuthor.id,
)
expect(matchingAuthor.isSubmitting).toBe(body.isSubmitting)
expect(matchingAuthor.isCorresponding).toBe(body.isCorresponding)
expect(submittingAuthor.firstName).toBe(body.firstName)
expect(submittingAuthor.lastName).toBe(body.lastName)
})
it('should return an error when the params are missing', async () => {
delete body.isSubmitting
......@@ -51,6 +53,8 @@ describe('Patch collections users route handler', () => {
})
req.user = submittingAuthor.id
req.params.collectionId = standardCollection.id
const [fragmentId] = standardCollection.fragments
req.params.fragmentId = fragmentId
req.params.userId = submittingAuthor.id
const res = httpMocks.createResponse()
await require(patchPath)(models)(req, res)
......@@ -58,9 +62,8 @@ describe('Patch collections users route handler', () => {
expect(res.statusCode).toBe(400)
const data = JSON.parse(res._getData())
expect(data.error).toEqual('Missing parameters')
body.isSubmitting = false
})
it('should return an error if the collection does not exists', async () => {
it('should return an error if the fragments does not exists', async () => {
const req = httpMocks.createRequest({
body,
})
......@@ -80,6 +83,8 @@ describe('Patch collections users route handler', () => {
})
req.user = author.id
req.params.collectionId = standardCollection.id
const [fragmentId] = standardCollection.fragments
req.params.fragmentId = fragmentId
req.params.userId = 'invalid-id'
const res = httpMocks.createResponse()
await require(patchPath)(models)(req, res)
......@@ -88,32 +93,39 @@ describe('Patch collections users route handler', () => {
const data = JSON.parse(res._getData())
expect(data.error).toEqual('item not found')
})
it('should return an error when the collection does not have authors', async () => {
it('should return an error when the fragment and the user do not match', async () => {
const req = httpMocks.createRequest({
body,
})
req.user = submittingAuthor.id
req.params.collectionId = authorsCollection.id
req.params.userId = submittingAuthor.id
req.params.collectionId = standardCollection.id
const [fragmentId] = standardCollection.fragments
req.params.fragmentId = fragmentId
req.params.userId = author.id
const res = httpMocks.createResponse()
await require(patchPath)(models)(req, res)
expect(res.statusCode).toBe(400)
const data = JSON.parse(res._getData())
expect(data.error).toEqual('Collection does not have any authors')
expect(data.error).toEqual('Fragment and user do not match')
})
it('should return an error when the collection and the user do not match', async () => {
it('should return an error when the fragment does not exist', async () => {
const req = httpMocks.createRequest({
body,
})
req.user = submittingAuthor.id
req.params.collectionId = standardCollection.id
req.params.fragmentId = 'invalid-fragment-id'
req.params.userId = author.id
const res = httpMocks.createResponse()
await require(patchPath)(models)(req, res)
expect(res.statusCode).toBe(400)
const data = JSON.parse(res._getData())
expect(data.error).toEqual('Collection and user do not match')
expect(data.error).toEqual(
`Fragment invalid-fragment-id does not match collection ${
standardCollection.id
}`,
)
})
})
......@@ -131,4 +131,23 @@ describe('Post fragments users route handler', () => {
const data = JSON.parse(res._getData())
expect(data.error).toEqual('invalid-role is not defined')
})
it('should return an error when the fragment does not exist', async () => {
const req = httpMocks.createRequest({
body,
})
req.user = submittingAuthor.id
req.params.collectionId = standardCollection.id
req.params.fragmentId = 'invalid-fragment-id'
req.params.userId = author.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(
`Fragment invalid-fragment-id does not match collection ${
standardCollection.id
}`,
)
})
})
......@@ -14,6 +14,9 @@ const build = () => {
find: jest.fn(id => findMock(id, 'collections')),
},
Team: {},
Fragment: {
find: jest.fn(id => findMock(id, 'fragments', fixtures)),
},
}
UserMock.find = jest.fn(id => findMock(id, 'users'))
UserMock.findByEmail = jest.fn(email => findByEmailMock(email))
......
......@@ -11,7 +11,10 @@ const chance = new Chance()
const { author } = fixtures.users
const clonedAuthor = clone(author)
jest.mock('pubsweet-component-mail-service', () => ({
sendSimpleEmail: jest.fn(),
sendNotificationEmail: jest.fn(),
}))
const body = {
email: clonedAuthor.email,
firstName: clonedAuthor.firstName,
......
......@@ -72,13 +72,7 @@ module.exports = {
reviewers: Joi.array(),
lock: Joi.object(),
decision: Joi.object(),
authors: Joi.array().items(
Joi.object({
isSubmitting: Joi.boolean(),
isCorresponding: Joi.boolean(),
id: Joi.string().uuid(),
}),
),
authors: Joi.array(),
recommendations: Joi.array().items(
Joi.object({
id: Joi.string().required(),
......
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