| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- /*
- Copyright (C) 2017 Cloudbase Solutions SRL
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as
- published by the Free Software Foundation, either version 3 of the
- License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- // @flow
- import React from 'react'
- import { shallow } from 'enzyme'
- import sinon from 'sinon'
- import TW from '../../../utils/TestWrapper'
- import type { User } from '../../../types/User'
- import type { Project, Role } from '../../../types/Project'
- import ProjectMemberModal from '.'
- type Props = {
- loading: boolean,
- users: User[],
- projects: Project[],
- onRequestClose: () => void,
- onAddClick: (user: User, isNew: boolean, roles: Role[]) => void,
- roles: Role[],
- }
- const wrap = (props: Props) => new TW(shallow(<ProjectMemberModal {...props} />), 'pmModal')
- const users: User[] = [
- { id: 'user-1', name: 'User 1', email: '', project: { id: '', name: '' } },
- { id: 'user-2', name: 'User 2', email: '', project: { id: '', name: '' } },
- ]
- const projects: Project[] = [
- { id: 'project-1', name: 'Project 1' },
- { id: 'project-2', name: 'Project 2' },
- ]
- const roles: Role[] = [
- { id: 'role-1', name: 'Role 1' },
- { id: 'role-2', name: 'Role 2' },
- { id: 'role-3', name: 'Role 3' },
- ]
- describe('ProjectMemberModal Component', () => {
- it('renders existing user form', () => {
- let wrapper = wrap({
- loading: false,
- users,
- projects,
- roles,
- onRequestClose: () => { },
- onAddClick: () => { },
- })
- expect(wrapper.find('users').prop('items')[1].value).toBe(users[1].id)
- expect(wrapper.find('roles').prop('items')[1].value).toBe(roles[1].id)
- expect(wrapper.find('users').prop('highlight')).toBe(false)
- expect(wrapper.find('roles').prop('highlight')).toBe(false)
- expect(wrapper.find('users').prop('disabled')).toBe(false)
- expect(wrapper.find('roles').prop('disabled')).toBe(false)
- })
- it('highlights required fields in existing user form', () => {
- let wrapper = wrap({
- loading: false,
- users,
- projects,
- roles,
- onRequestClose: () => { },
- onAddClick: () => { },
- })
- expect(wrapper.find('users').length).toBe(1)
- wrapper.find('addButton').click()
- expect(wrapper.find('users').prop('highlight')).toBe(true)
- expect(wrapper.find('roles').prop('highlight')).toBe(true)
- })
- it('renders new user form and highlights required', () => {
- let wrapper = wrap({
- loading: false,
- users,
- projects,
- roles,
- onRequestClose: () => { },
- onAddClick: () => { },
- })
- wrapper.find('formToggle').simulate('change', { value: 'new' })
- expect(wrapper.find('users').length).toBe(0)
- expect(wrapper.find('field-username').prop('highlight')).toBe(false)
- expect(wrapper.find('field-description').prop('highlight')).toBe(false)
- expect(wrapper.find('field-Primary Project').prop('highlight')).toBe(false)
- expect(wrapper.find('roles').prop('highlight')).toBe(false)
- expect(wrapper.find('field-password').prop('highlight')).toBe(false)
- expect(wrapper.find('field-confirm_password').prop('highlight')).toBe(false)
- expect(wrapper.find('field-Email').prop('highlight')).toBe(false)
- wrapper.find('addButton').click()
- expect(wrapper.find('field-username').prop('highlight')).toBe(true)
- expect(wrapper.find('field-description').prop('highlight')).toBe(false)
- expect(wrapper.find('field-Primary Project').prop('highlight')).toBe(false)
- expect(wrapper.find('roles').prop('highlight')).toBe(true)
- expect(wrapper.find('field-password').prop('highlight')).toBe(true)
- expect(wrapper.find('field-confirm_password').prop('highlight')).toBe(false)
- expect(wrapper.find('field-Email').prop('highlight')).toBe(false)
- })
- it('dispatches add click with correct data', () => {
- let onAddClick = sinon.spy()
- let wrapper = wrap({
- loading: false,
- users,
- projects,
- roles,
- onRequestClose: () => { },
- onAddClick,
- })
- wrapper.find('formToggle').simulate('change', { value: 'new' })
- wrapper.find('field-username').simulate('change', 'new-username')
- wrapper.find('roles').simulate('change', 'role-2')
- wrapper.find('roles').simulate('change', 'role-1')
- wrapper.find('roles').simulate('change', 'role-2')
- wrapper.find('roles').simulate('change', 'role-3')
- wrapper.find('field-password').simulate('change', 'new-password')
- wrapper.find('field-confirm_password').simulate('change', 'new-password')
- wrapper.find('addButton').click()
- let userArg = onAddClick.args[0][0]
- let rolesArg: Role[] = onAddClick.args[0][2]
- expect(userArg.name).toBe('new-username')
- expect(userArg.password).toBe('new-password')
- expect(rolesArg.length).toBe(2)
- expect(rolesArg[0].id).toBe('role-1')
- expect(rolesArg[1].id).toBe('role-3')
- })
- it('disabled on loading', () => {
- let wrapper = wrap({
- loading: true,
- users,
- projects,
- roles,
- onRequestClose: () => { },
- onAddClick: () => { },
- })
- expect(wrapper.find('users').prop('disabled')).toBe(true)
- expect(wrapper.find('roles').prop('disabled')).toBe(true)
- })
- })
|