From cc42d9d4d365f595bc2ea08c2eb58ec5b8ade7c5 Mon Sep 17 00:00:00 2001 From: malexsan <alexandru.munt@gmail.com> Date: Fri, 14 Dec 2018 12:02:43 +0200 Subject: [PATCH] test(add tests for component user use cases): --- .../src/modals/OpenModal.js | 5 -- .../src/helpers/Model.js | 3 + .../app/components/OpenUserForm.js | 2 +- .../server/tests/activateUser.test.js | 27 +++++++- .../server/tests/createUserAsAdmin.test.js | 64 +++++++++++++++++++ .../server/tests/deactivateUser.test.js | 28 ++++++++ .../server/tests/editUser.test.js | 30 +++++++++ .../server/use-cases/activateUser.js | 2 +- .../server/use-cases/deactivateUser.js | 2 +- 9 files changed, 153 insertions(+), 10 deletions(-) create mode 100644 packages/component-user/server/tests/createUserAsAdmin.test.js create mode 100644 packages/component-user/server/tests/deactivateUser.test.js create mode 100644 packages/component-user/server/tests/editUser.test.js diff --git a/packages/component-faraday-ui/src/modals/OpenModal.js b/packages/component-faraday-ui/src/modals/OpenModal.js index e713ea392..6e5bc43d2 100644 --- a/packages/component-faraday-ui/src/modals/OpenModal.js +++ b/packages/component-faraday-ui/src/modals/OpenModal.js @@ -24,11 +24,6 @@ const selectModalComponent = props => { modalComponent: props.component, } } - if (props.single) { - return { - modalComponent: props.component, - } - } if (props.single) { return { modalComponent: SingleActionModal, diff --git a/packages/component-fixture-manager/src/helpers/Model.js b/packages/component-fixture-manager/src/helpers/Model.js index b59599b91..1f292351b 100644 --- a/packages/component-fixture-manager/src/helpers/Model.js +++ b/packages/component-fixture-manager/src/helpers/Model.js @@ -26,6 +26,9 @@ const build = fixtures => { UserMock.updateProperties = jest.fn(user => updatePropertiesMock(user, 'users'), ) + UserMock.update = jest.fn((id, input) => input) + UserMock.fetchOne = jest.fn(user => user) + UserMock.create = jest.fn(input => input) TeamMock.find = jest.fn(id => findMock(id, 'teams', fixtures)) TeamMock.updateProperties = jest.fn(team => diff --git a/packages/component-user/app/components/OpenUserForm.js b/packages/component-user/app/components/OpenUserForm.js index 481a3b503..985c02360 100644 --- a/packages/component-user/app/components/OpenUserForm.js +++ b/packages/component-user/app/components/OpenUserForm.js @@ -20,9 +20,9 @@ const OpenUserForm = ({ edit, user, onSubmit, modalKey }) => ( edit ? ( <IconButton fontIcon="editIcon" - paddingBottom={1.5} iconSize={2} onClick={showModal} + paddingBottom={1.5} pt={1 / 2} /> ) : ( diff --git a/packages/component-user/server/tests/activateUser.test.js b/packages/component-user/server/tests/activateUser.test.js index 20d542400..864b65f69 100644 --- a/packages/component-user/server/tests/activateUser.test.js +++ b/packages/component-user/server/tests/activateUser.test.js @@ -1,5 +1,28 @@ +const { cloneDeep } = require('lodash') +const { Model, fixtures } = require('pubsweet-component-fixture-service') + +const { activateUser } = require('../use-cases') + describe('activate use case', () => { - it('should work', () => { - expect(true).toBeFalsy() + let testFixtures = {} + let models + const invalidPrefix = 'invalid***' + + beforeEach(() => { + testFixtures = cloneDeep(fixtures) + models = Model.build(testFixtures) + }) + + it('activate an user', async () => { + const { user } = testFixtures.users + user.username = `${invalidPrefix}${user.username}` + user.isActive = false + + const result = await activateUser + .initialize({ User: models.User }) + .execute({ id: user.id, input: user }) + + expect(result.isActive).toBeTruthy() + expect(result.username.indexOf(invalidPrefix)).toBeLessThan(0) }) }) diff --git a/packages/component-user/server/tests/createUserAsAdmin.test.js b/packages/component-user/server/tests/createUserAsAdmin.test.js new file mode 100644 index 000000000..80c3155a6 --- /dev/null +++ b/packages/component-user/server/tests/createUserAsAdmin.test.js @@ -0,0 +1,64 @@ +const { cloneDeep } = require('lodash') +const { Model, fixtures } = require('pubsweet-component-fixture-service') + +const { createUserAsAdmin } = require('../use-cases') + +class MockNotification { + constructor(user) { + this.user = user + } + + async notifyUserAddedByAdmin(role) { + jest.fn(() => this) + } +} + +describe('create user', () => { + let testFixtures = {} + let models + + beforeEach(() => { + testFixtures = cloneDeep(fixtures) + models = Model.build(testFixtures) + }) + + it('edit an user as admin', async () => { + const input = { + email: 'alexandrescu@gmail.com', + username: 'alexandrescu@gmail.com', + } + const ctx = { + user: { + admin: true, + }, + } + + const result = await createUserAsAdmin + .initialize({ User: models.User, Notification: MockNotification, ctx }) + .execute({ + input, + }) + + expect(result).toMatchObject(input) + }) + + it('does not allow non admins to create user', async (...props) => { + const ctx = { + user: { + admin: false, + }, + } + + try { + await createUserAsAdmin + .initialize({ + User: models.User, + Notification: MockNotification, + ctx, + }) + .execute({}) + } catch (e) { + expect(e.message).toBe('Unauthorized') + } + }) +}) diff --git a/packages/component-user/server/tests/deactivateUser.test.js b/packages/component-user/server/tests/deactivateUser.test.js new file mode 100644 index 000000000..46a335ffa --- /dev/null +++ b/packages/component-user/server/tests/deactivateUser.test.js @@ -0,0 +1,28 @@ +const { cloneDeep } = require('lodash') +const { Model, fixtures } = require('pubsweet-component-fixture-service') + +const { deactivateUser } = require('../use-cases') + +describe('deactivate use case', () => { + let testFixtures = {} + let models + const invalidPrefix = 'invalid***' + + beforeEach(() => { + testFixtures = cloneDeep(fixtures) + models = Model.build(testFixtures) + }) + + it('deactivate an user', async () => { + const { user } = testFixtures.users + user.isActive = false + + const result = await deactivateUser + .initialize({ User: models.User }) + .execute({ id: user.id, input: user }) + + expect(result.isActive).toBeFalsy() + // invalid prefix should be present in the username + expect(result.username.indexOf(invalidPrefix)).toBeGreaterThanOrEqual(0) + }) +}) diff --git a/packages/component-user/server/tests/editUser.test.js b/packages/component-user/server/tests/editUser.test.js new file mode 100644 index 000000000..baf29782f --- /dev/null +++ b/packages/component-user/server/tests/editUser.test.js @@ -0,0 +1,30 @@ +const { cloneDeep } = require('lodash') +const { Model, fixtures } = require('pubsweet-component-fixture-service') + +const { editUser } = require('../use-cases') + +describe('edit user as admin', () => { + let testFixtures = {} + let models + + beforeEach(() => { + testFixtures = cloneDeep(fixtures) + models = Model.build(testFixtures) + }) + + it('edit an user', async () => { + const { user } = testFixtures.users + const input = { + ...user, + affiliation: 'TSD', + firstName: 'Sebibastian', + } + + const result = await editUser.initialize({ User: models.User }).execute({ + id: input.id, + input, + }) + + expect(result).toMatchObject(input) + }) +}) diff --git a/packages/component-user/server/use-cases/activateUser.js b/packages/component-user/server/use-cases/activateUser.js index 74256c6c9..7572f52fc 100644 --- a/packages/component-user/server/use-cases/activateUser.js +++ b/packages/component-user/server/use-cases/activateUser.js @@ -1,6 +1,6 @@ module.exports.initialize = ({ User, ctx }) => ({ execute: async ({ id, input }) => { const username = input.username.replace('invalid***', '') - return User.update(id, { ...input, username }, ctx) + return User.update(id, { ...input, username, isActive: true }, ctx) }, }) diff --git a/packages/component-user/server/use-cases/deactivateUser.js b/packages/component-user/server/use-cases/deactivateUser.js index 02747935d..6c1703b63 100644 --- a/packages/component-user/server/use-cases/deactivateUser.js +++ b/packages/component-user/server/use-cases/deactivateUser.js @@ -2,6 +2,6 @@ module.exports.initialize = ({ User, ctx }) => ({ execute: async ({ id, input }) => { const username = `invalid***${input.username}` - return User.update(id, { ...input, username }, ctx) + return User.update(id, { ...input, username, isActive: false }, ctx) }, }) -- GitLab