From e8d73babaf80b645fccc87639495d9d5bd97610f Mon Sep 17 00:00:00 2001 From: mabashian Date: Mon, 22 Apr 2019 17:15:32 -0400 Subject: [PATCH] Rebase and incorporates feedback --- __tests__/components/AddResourceRole.test.jsx | 124 ++++++++---------- __tests__/components/CheckboxCard.test.jsx | 5 +- .../components/SelectResourceStep.test.jsx | 120 ++++++++--------- __tests__/components/SelectRoleStep.test.jsx | 4 +- __tests__/components/SelectableCard.test.jsx | 6 +- src/components/AddRole/AddResourceRole.jsx | 23 +++- src/components/AddRole/SelectResourceStep.jsx | 39 +++--- src/components/AddRole/styles.scss | 2 +- src/components/SelectedList/SelectedList.jsx | 12 +- 9 files changed, 161 insertions(+), 174 deletions(-) diff --git a/__tests__/components/AddResourceRole.test.jsx b/__tests__/components/AddResourceRole.test.jsx index 68a3b03fad..f439a320d3 100644 --- a/__tests__/components/AddResourceRole.test.jsx +++ b/__tests__/components/AddResourceRole.test.jsx @@ -1,6 +1,6 @@ import React from 'react'; -import { mount } from 'enzyme'; -import { I18nProvider } from '@lingui/react'; +import { shallow } from 'enzyme'; +import { mountWithContexts } from '../enzymeHelpers'; import AddResourceRole from '../../src/components/AddRole/AddResourceRole'; describe('', () => { @@ -30,28 +30,24 @@ describe('', () => { } }; test('initially renders without crashing', () => { - mount( - - - + shallow( + {}} + onSave={() => {}} + roles={roles} + /> ); }); test('handleRoleCheckboxClick properly updates state', () => { - const wrapper = mount( - - - - ).find('AddResourceRole'); + const wrapper = shallow( + {}} + onSave={() => {}} + roles={roles} + /> + ); wrapper.setState({ selectedRoleRows: [ { @@ -79,16 +75,14 @@ describe('', () => { }]); }); test('handleResourceCheckboxClick properly updates state', () => { - const wrapper = mount( - - - - ).find('AddResourceRole'); + const wrapper = shallow( + {}} + onSave={() => {}} + roles={roles} + /> + ); wrapper.setState({ selectedResourceRows: [ { @@ -113,15 +107,13 @@ describe('', () => { }); test('clicking user/team cards updates state', () => { const spy = jest.spyOn(AddResourceRole.prototype, 'handleResourceSelect'); - const wrapper = mount( - - - + const wrapper = mountWithContexts( + {}} + onSave={() => {}} + api={api} + roles={roles} + /> ).find('AddResourceRole'); const selectableCardWrapper = wrapper.find('SelectableCard'); expect(selectableCardWrapper.length).toBe(2); @@ -133,16 +125,14 @@ describe('', () => { expect(wrapper.state('selectedResource')).toBe('teams'); }); test('readUsers and readTeams call out to corresponding api functions', () => { - const wrapper = mount( - - - - ).find('AddResourceRole'); + const wrapper = shallow( + {}} + onSave={() => {}} + roles={roles} + /> + ); wrapper.instance().readUsers({ foo: 'bar' }); @@ -158,16 +148,14 @@ describe('', () => { }); }); test('handleResourceSelect clears out selected lists and sets selectedResource', () => { - const wrapper = mount( - - - - ).find('AddResourceRole'); + const wrapper = shallow( + {}} + onSave={() => {}} + roles={roles} + /> + ); wrapper.setState({ selectedResource: 'teams', selectedResourceRows: [ @@ -199,15 +187,13 @@ describe('', () => { }); test('handleWizardSave makes correct api calls, calls onSave when done', async () => { const handleSave = jest.fn(); - const wrapper = mount( - - - + const wrapper = mountWithContexts( + {}} + onSave={handleSave} + roles={roles} + /> ).find('AddResourceRole'); wrapper.setState({ selectedResource: 'users', diff --git a/__tests__/components/CheckboxCard.test.jsx b/__tests__/components/CheckboxCard.test.jsx index de02dca288..7b689e0dd9 100644 --- a/__tests__/components/CheckboxCard.test.jsx +++ b/__tests__/components/CheckboxCard.test.jsx @@ -1,17 +1,16 @@ import React from 'react'; -import { mount } from 'enzyme'; +import { shallow } from 'enzyme'; import CheckboxCard from '../../src/components/AddRole/CheckboxCard'; describe('', () => { let wrapper; test('initially renders without crashing', () => { - wrapper = mount( + wrapper = shallow( ); expect(wrapper.length).toBe(1); - wrapper.unmount(); }); }); diff --git a/__tests__/components/SelectResourceStep.test.jsx b/__tests__/components/SelectResourceStep.test.jsx index 5097a5ce03..0c207b871e 100644 --- a/__tests__/components/SelectResourceStep.test.jsx +++ b/__tests__/components/SelectResourceStep.test.jsx @@ -1,6 +1,6 @@ import React from 'react'; -import { mount } from 'enzyme'; -import { I18nProvider } from '@lingui/react'; +import { shallow } from 'enzyme'; +import { mountWithContexts } from '../enzymeHelpers'; import SelectResourceStep from '../../src/components/AddRole/SelectResourceStep'; describe('', () => { @@ -11,16 +11,14 @@ describe('', () => { jest.restoreAllMocks(); }); test('initially renders without crashing', () => { - mount( - - - + shallow( + {}} + onSearch={() => {}} + sortedColumnKey="username" + /> ); }); test('fetches resources on mount', async () => { @@ -33,16 +31,14 @@ describe('', () => { ] } }); - mount( - - - + mountWithContexts( + {}} + onSearch={handleSearch} + sortedColumnKey="username" + /> ); expect(handleSearch).toHaveBeenCalledWith({ order_by: 'username', @@ -66,17 +62,15 @@ describe('', () => { ] } }); - const wrapper = await mount( - - - + const wrapper = await mountWithContexts( + {}} + onSearch={handleSearch} + selectedResourceRows={selectedResourceRows} + sortedColumnKey="username" + /> ).find('SelectResourceStep'); await wrapper.instance().readResourceList({ page: 1, @@ -93,17 +87,15 @@ describe('', () => { }); test('handleSetPage calls readResourceList with correct params', () => { const spy = jest.spyOn(SelectResourceStep.prototype, 'readResourceList'); - const wrapper = mount( - - - + const wrapper = mountWithContexts( + {}} + onSearch={() => {}} + selectedResourceRows={[]} + sortedColumnKey="username" + /> ).find('SelectResourceStep'); wrapper.setState({ sortOrder: 'descending' }); wrapper.instance().handleSetPage(2); @@ -114,17 +106,15 @@ describe('', () => { }); test('handleSort calls readResourceList with correct params', () => { const spy = jest.spyOn(SelectResourceStep.prototype, 'readResourceList'); - const wrapper = mount( - - - + const wrapper = mountWithContexts( + {}} + onSearch={() => {}} + selectedResourceRows={[]} + sortedColumnKey="username" + /> ).find('SelectResourceStep'); wrapper.instance().handleSort('username', 'descending'); expect(spy).toHaveBeenCalledWith({ page: 1, page_size: 5, order_by: '-username' }); @@ -133,17 +123,15 @@ describe('', () => { }); test('clicking on row fires callback with correct params', () => { const handleRowClick = jest.fn(); - const wrapper = mount( - - - + const wrapper = mountWithContexts( + {}} + selectedResourceRows={[]} + sortedColumnKey="username" + /> ); const selectResourceStepWrapper = wrapper.find('SelectResourceStep'); selectResourceStepWrapper.setState({ diff --git a/__tests__/components/SelectRoleStep.test.jsx b/__tests__/components/SelectRoleStep.test.jsx index 857ec0a9f6..6e323e2936 100644 --- a/__tests__/components/SelectRoleStep.test.jsx +++ b/__tests__/components/SelectRoleStep.test.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import { mount } from 'enzyme'; +import { mount, shallow } from 'enzyme'; import SelectRoleStep from '../../src/components/AddRole/SelectRoleStep'; describe('', () => { @@ -30,7 +30,7 @@ describe('', () => { } ]; test('initially renders without crashing', () => { - wrapper = mount( + wrapper = shallow( ', () => { let wrapper; const onClick = jest.fn(); test('initially renders without crashing when not selected', () => { - wrapper = mount( + wrapper = shallow( @@ -15,7 +15,7 @@ describe('', () => { wrapper.unmount(); }); test('initially renders without crashing when selected', () => { - wrapper = mount( + wrapper = shallow( )} {selectedResource === 'teams' && ( @@ -192,9 +204,8 @@ class AddResourceRole extends React.Component { emptyListTitle={i18n._(t`No Teams Found`)} onRowClick={this.handleResourceCheckboxClick} onSearch={this.readTeams} - selectedLabel={i18n._(t`Selected Teams`)} + selectedLabel={i18n._(t`Selected`)} selectedResourceRows={selectedResourceRows} - title={i18n._(t`Teams`)} /> )} @@ -212,7 +223,7 @@ class AddResourceRole extends React.Component { onRolesClick={this.handleRoleCheckboxClick} roles={roles} selectedListKey={selectedResource === 'users' ? 'username' : 'name'} - selectedListLabel={selectedResource === 'users' ? i18n._(t`Selected Users`) : i18n._(t`Selected Teams`)} + selectedListLabel={i18n._(t`Selected`)} selectedResourceRows={selectedResourceRows} selectedRoleRows={selectedRoleRows} /> @@ -234,7 +245,7 @@ class AddResourceRole extends React.Component { onClose={onClose} onSave={this.handleWizardSave} steps={steps} - title={i18n._(t`Add Roles`)} + title={wizardTitle} /> )} diff --git a/src/components/AddRole/SelectResourceStep.jsx b/src/components/AddRole/SelectResourceStep.jsx index 9f15478631..f921913005 100644 --- a/src/components/AddRole/SelectResourceStep.jsx +++ b/src/components/AddRole/SelectResourceStep.jsx @@ -17,6 +17,14 @@ import DataListToolbar from '../DataListToolbar'; import Pagination from '../Pagination'; import SelectedList from '../SelectedList'; +const paginationStyling = { + paddingLeft: '0', + justifyContent: 'flex-end', + borderRight: '1px solid #ebebeb', + borderBottom: '1px solid #ebebeb', + borderTop: '0' +}; + class SelectResourceStep extends React.Component { constructor (props) { super(props); @@ -119,8 +127,7 @@ class SelectResourceStep extends React.Component { emptyListTitle, onRowClick, selectedLabel, - selectedResourceRows, - title + selectedResourceRows } = this.props; return ( @@ -138,9 +145,15 @@ class SelectResourceStep extends React.Component { ) : ( - - {title} - + {selectedResourceRows.length > 0 && ( + + )} )} - {selectedResourceRows.length > 0 && ( - - )} { error ?
error
: '' } ); @@ -196,8 +201,7 @@ SelectResourceStep.propTypes = { onSearch: PropTypes.func.isRequired, selectedLabel: PropTypes.string, selectedResourceRows: PropTypes.arrayOf(PropTypes.object), - sortedColumnKey: PropTypes.string, - title: PropTypes.string + sortedColumnKey: PropTypes.string }; SelectResourceStep.defaultProps = { @@ -207,8 +211,7 @@ SelectResourceStep.defaultProps = { onRowClick: () => {}, selectedLabel: i18nMark('Selected Items'), selectedResourceRows: [], - sortedColumnKey: 'name', - title: '' + sortedColumnKey: 'name' }; export default SelectResourceStep; diff --git a/src/components/AddRole/styles.scss b/src/components/AddRole/styles.scss index 21a8a73989..6349d03421 100644 --- a/src/components/AddRole/styles.scss +++ b/src/components/AddRole/styles.scss @@ -8,7 +8,7 @@ .awx-selectableCard__indicator { display: flex; - flex: 0 0 10px; + flex: 0 0 5px; } .awx-selectableCard__label { diff --git a/src/components/SelectedList/SelectedList.jsx b/src/components/SelectedList/SelectedList.jsx index bf3b295d6d..485eaa615c 100644 --- a/src/components/SelectedList/SelectedList.jsx +++ b/src/components/SelectedList/SelectedList.jsx @@ -45,6 +45,7 @@ class SelectedList extends Component { isReadOnly } = this.props; const { showOverflow } = this.state; + const visibleItems = selected.slice(0, showOverflow ? selected.length : showOverflowAfter); return (
@@ -56,20 +57,19 @@ class SelectedList extends Component {
{isReadOnly ? ( - {selected - .slice(0, showOverflow ? selected.length : showOverflowAfter) + {visibleItems .map(selectedItem => ( + > + {selectedItem[displayKey]} + )) } ) : ( - {selected - .slice(0, showOverflow ? selected.length : showOverflowAfter) + {visibleItems .map(selectedItem => (