diff --git a/frontend/pages/Admin/UserManagementPage/UserManagementPage.jsx b/frontend/pages/Admin/UserManagementPage/UserManagementPage.jsx index 970a901d78..3f48e0899e 100644 --- a/frontend/pages/Admin/UserManagementPage/UserManagementPage.jsx +++ b/frontend/pages/Admin/UserManagementPage/UserManagementPage.jsx @@ -1,5 +1,6 @@ import React, { Component, PropTypes } from 'react'; import { connect } from 'react-redux'; +import { first, isEqual, size } from 'lodash'; import entityGetter from '../../../redux/utilities/entityGetter'; import Button from '../../../components/buttons/Button'; @@ -29,9 +30,10 @@ class UserManagementPage extends Component { } componentWillMount () { - const { dispatch, invites, users } = this.props; + const { currentUser, dispatch, invites, users } = this.props; - if (!users.length) { + if (!size(users) || + (size(users) === 1 && isEqual(first(users), currentUser))) { dispatch(userActions.loadAll()); } diff --git a/frontend/pages/Admin/UserManagementPage/UserManagementPage.tests.jsx b/frontend/pages/Admin/UserManagementPage/UserManagementPage.tests.jsx index 7fcd842ed3..4882e8ea23 100644 --- a/frontend/pages/Admin/UserManagementPage/UserManagementPage.tests.jsx +++ b/frontend/pages/Admin/UserManagementPage/UserManagementPage.tests.jsx @@ -12,6 +12,7 @@ const currentUser = { position: 'Head of Gnar', username: 'gnardog', }; +const loadUsersAction = { type: 'users_LOAD_REQUEST' }; const store = { auth: { user: { @@ -54,4 +55,49 @@ describe('UserManagementPage - component', () => { expect(page.text()).toInclude('Listing 2 users'); }); + + it('gets all users if there are no users in state', () => { + const mockStore = reduxMockStore({ + ...store, + entities: { + ...store.entities, + users: { + ...store.entities.users, + data: {}, + }, + }, + }); + + mount(connectedComponent(UserManagementPage, { mockStore })); + + expect(mockStore.getActions()).toInclude(loadUsersAction); + }); + + it('gets all users if the only user in state is the current user', () => { + const mockStore = reduxMockStore(store); + + mount(connectedComponent(UserManagementPage, { mockStore })); + + expect(mockStore.getActions()).toInclude(loadUsersAction); + }); + + it('does not get users if users are already loaded', () => { + const mockStore = reduxMockStore({ + ...store, + entities: { + ...store.entities, + users: { + ...store.entities.users, + data: { + 1: { ...currentUser }, + 2: { id: 2, email: 'hi@gnar.dog', full_name: 'GnarDog' }, + }, + }, + }, + }); + + mount(connectedComponent(UserManagementPage, { mockStore })); + + expect(mockStore.getActions()).toNotInclude(loadUsersAction); + }); });