From 6fc522320456a841b47145ec1970c257c80fd6f0 Mon Sep 17 00:00:00 2001 From: Sebastian <sebastian.mihalache@thinslices.com> Date: Wed, 21 Feb 2018 10:22:31 +0200 Subject: [PATCH] add create user test --- packages/component-invite/package.json | 12 ++- packages/component-invite/src/routes/post.js | 2 +- .../component-invite/src/tests/mocks/User.js | 6 ++ .../component-invite/src/tests/post.test.js | 84 ++++++++++++++++--- yarn.lock | 6 +- 5 files changed, 93 insertions(+), 17 deletions(-) diff --git a/packages/component-invite/package.json b/packages/component-invite/package.json index c76ac6873..8f82cd7d5 100644 --- a/packages/component-invite/package.json +++ b/packages/component-invite/package.json @@ -14,7 +14,8 @@ "url": "https://gitlab.coko.foundation/xpub/xpub" }, "dependencies": { - "body-parser": "^1.17.2" + "body-parser": "^1.17.2", + "chance": "^1.0.13" }, "peerDependencies": { "@pubsweet/logger": "^0.0.1", @@ -30,7 +31,12 @@ "moduleNameMapper": { "\\.s?css$": "identity-obj-proxy" }, - "transformIgnorePatterns": ["/node_modules/(?!@?pubsweet)"], - "testPathIgnorePatterns": ["/node_modules", "config/"] + "transformIgnorePatterns": [ + "/node_modules/(?!@?pubsweet)" + ], + "testPathIgnorePatterns": [ + "/node_modules", + "config/" + ] } } diff --git a/packages/component-invite/src/routes/post.js b/packages/component-invite/src/routes/post.js index e48f0a824..52d366519 100644 --- a/packages/component-invite/src/routes/post.js +++ b/packages/component-invite/src/routes/post.js @@ -14,7 +14,7 @@ module.exports = models => async (req, res) => { logger.error('some parameters are missing') return } - // console.log(req.body) + const collectionId = get(req, 'params.collectionId') const reqUser = await models.User.find(req.user) let collection diff --git a/packages/component-invite/src/tests/mocks/User.js b/packages/component-invite/src/tests/mocks/User.js index ae155c2ca..9a7459fc5 100644 --- a/packages/component-invite/src/tests/mocks/User.js +++ b/packages/component-invite/src/tests/mocks/User.js @@ -5,6 +5,12 @@ function User(properties) { this.email = properties.email this.username = properties.username this.password = properties.password + this.roles = properties.roles + this.title = properties.title + this.affiliation = properties.affiliation + this.firstName = properties.firstName + this.lastName = properties.lastName + this.admin = properties.admin } User.prototype.save = jest.fn(function saveUser() { diff --git a/packages/component-invite/src/tests/post.test.js b/packages/component-invite/src/tests/post.test.js index bb137ad5a..dc39ab175 100644 --- a/packages/component-invite/src/tests/post.test.js +++ b/packages/component-invite/src/tests/post.test.js @@ -5,8 +5,12 @@ const httpMocks = require('node-mocks-http') const random = require('lodash/random') const fixtures = require('./fixtures/fixtures') const UserMock = require('./mocks/User') +const Chance = require('chance') -const roles = ['editorInChief', 'author', 'admin'] +jest.mock('pubsweet-component-mail-service', () => ({ setupEmail: jest.fn() })) +const chance = new Chance() +const globalRoles = ['editorInChief', 'author', 'admin'] +const manuscriptRoles = ['handlingEditor', 'reviewer'] const buildModels = (collection, findUser, emailUser) => { const models = { User: {}, @@ -37,27 +41,83 @@ const buildModels = (collection, findUser, emailUser) => { return models } +const body = { + email: chance.email(), + role: globalRoles[random(0, globalRoles.length - 1)], + firstName: chance.first(), + lastName: chance.last(), + title: 'professor', + affiliation: 'MIT', +} +body.admin = body.role === 'admin' + +const getNotFoundError = () => { + const error = new Error() + error.name = 'NotFoundError' + error.status = 404 + + return error +} describe('Post invite route handler', () => { it('should return success when the admin invites an Editor in Chief, Author or Admin', async () => { - const body = { - email: 'sebi.mihalache@gmail.com', - role: roles[random(0, roles.length - 1)], - firstName: 'john', - lastName: 'smith', - title: 'professor', - affiliation: 'MIT', - } const req = httpMocks.createRequest({ body, }) req.user = fixtures.users.admin const res = httpMocks.createResponse() - const error = new Error() - error.name = 'NotFoundError' - error.status = 404 + const error = getNotFoundError() const models = buildModels(error, fixtures.users.admin, error) await require('../routes/post')(models)(req, res) + expect(res.statusCode).toBe(200) const data = JSON.parse(res._getData()) + expect(data.roles[0]).toEqual(body.role) + expect(data.firstName).toEqual(body.firstName) + expect(data.email).toEqual(body.email) + expect(data.admin).toEqual(body.admin) + }) + it('should return an error when the admin invites an user on a collection', async () => { + const req = httpMocks.createRequest({ + body, + }) + req.user = fixtures.users.admin + req.params.collectionId = '123' + const res = httpMocks.createResponse() + const error = getNotFoundError() + const models = buildModels(error, fixtures.users.admin) + await require('../routes/post')(models)(req, res) + expect(res.statusCode).toBe(403) + const data = JSON.parse(res._getData()) + expect(data.error).toEqual( + `admin cannot invite an ${body.role} to a collection`, + ) + }) + it('should return an error when the admin invites a manuscript role', async () => { + body.role = manuscriptRoles[random(0, manuscriptRoles.length - 1)] + const req = httpMocks.createRequest({ + body, + }) + req.user = fixtures.users.admin + const res = httpMocks.createResponse() + const error = getNotFoundError() + const models = buildModels(error, fixtures.users.admin) + await require('../routes/post')(models)(req, res) + expect(res.statusCode).toBe(403) + const data = JSON.parse(res._getData()) + expect(data.error).toEqual(`admin cannot invite a ${body.role}`) + }) + it('should return an error params are missing', async () => { + delete body.email + const req = httpMocks.createRequest({ + body, + }) + req.user = fixtures.users.admin + const res = httpMocks.createResponse() + const error = getNotFoundError() + const models = buildModels(error, fixtures.users.admin) + await require('../routes/post')(models)(req, res) + expect(res.statusCode).toBe(400) + const data = JSON.parse(res._getData()) + expect(data.error).toEqual(`Email and role are required`) }) }) diff --git a/yarn.lock b/yarn.lock index c0723efbc..64ea89118 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1948,6 +1948,10 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1: escape-string-regexp "^1.0.5" supports-color "^5.2.0" +chance@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/chance/-/chance-1.0.13.tgz#666bec2db42b3084456a3e4f4c28a82db5ccb7e6" + change-emitter@^0.1.2: version "0.1.6" resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515" @@ -8938,7 +8942,7 @@ prompt@^1.0.0: utile "0.3.x" winston "2.1.x" -"prompt@github:flatiron/prompt#1c95d1d8d333b5fbc13fa5f0619f3dcf0d514f87": +prompt@flatiron/prompt#1c95d1d8d333b5fbc13fa5f0619f3dcf0d514f87: version "1.0.0" resolved "https://codeload.github.com/flatiron/prompt/tar.gz/1c95d1d8d333b5fbc13fa5f0619f3dcf0d514f87" dependencies: -- GitLab