From e5dda696d7305c941c911b001be81f60575ebc12 Mon Sep 17 00:00:00 2001 From: mabashian Date: Wed, 24 Apr 2019 10:09:17 -0400 Subject: [PATCH] Add new tests for rbac on some of the org pages --- .../OrganizationAccessList.test.jsx | 34 +++++++++++++++++++ .../Organization/Organization.test.jsx | 10 ++++++ .../Organization/OrganizationDetail.test.jsx | 24 +++++++++++++ .../screens/Organization/Organization.jsx | 21 ++++++------ 4 files changed, 78 insertions(+), 11 deletions(-) diff --git a/__tests__/pages/Organizations/components/OrganizationAccessList.test.jsx b/__tests__/pages/Organizations/components/OrganizationAccessList.test.jsx index 2cf1c3a24e..24473e3453 100644 --- a/__tests__/pages/Organizations/components/OrganizationAccessList.test.jsx +++ b/__tests__/pages/Organizations/components/OrganizationAccessList.test.jsx @@ -176,4 +176,38 @@ describe('', () => { done(); }); }); + + test('add role button visible for user that can edit org', () => { + const wrapper = mountWithContexts( + ({ data: { count: 1, results: mockData } })} + removeRole={() => {}} + api={api} + organization={organization} + /> + ).find('OrganizationAccessList'); + + setImmediate(() => { + const addRole = wrapper.update().find('DataListToolbar').find('PlusIcon'); + expect(addRole.length).toBe(1); + }); + }); + + test('add role button hidden for user that cannot edit org', () => { + const readOnlyOrg = { ...organization }; + readOnlyOrg.summary_fields.user_capabilities.edit = false; + const wrapper = mountWithContexts( + ({ data: { count: 1, results: mockData } })} + removeRole={() => {}} + api={api} + organization={readOnlyOrg} + /> + ).find('OrganizationAccessList'); + + setImmediate(() => { + const addRole = wrapper.update().find('DataListToolbar').find('PlusIcon'); + expect(addRole.length).toBe(0); + }); + }); }); diff --git a/__tests__/pages/Organizations/screens/Organization/Organization.test.jsx b/__tests__/pages/Organizations/screens/Organization/Organization.test.jsx index cd7e7a5dbc..21e69ac58f 100644 --- a/__tests__/pages/Organizations/screens/Organization/Organization.test.jsx +++ b/__tests__/pages/Organizations/screens/Organization/Organization.test.jsx @@ -10,4 +10,14 @@ describe('', () => { test('initially renders succesfully', () => { mountWithContexts(); }); + test('notifications tab shown/hidden based on permissions', () => { + const wrapper = mountWithContexts(); + expect(wrapper.find('.pf-c-tabs__item').length).toBe(3); + expect(wrapper.find('.pf-c-tabs__button[children="Notifications"]').length).toBe(0); + wrapper.find('Organization').setState({ + isNotifAdmin: true + }); + expect(wrapper.find('.pf-c-tabs__item').length).toBe(4); + expect(wrapper.find('.pf-c-tabs__button[children="Notifications"]').length).toBe(1); + }); }); diff --git a/__tests__/pages/Organizations/screens/Organization/OrganizationDetail.test.jsx b/__tests__/pages/Organizations/screens/Organization/OrganizationDetail.test.jsx index 8636e3bce9..3b7ddda352 100644 --- a/__tests__/pages/Organizations/screens/Organization/OrganizationDetail.test.jsx +++ b/__tests__/pages/Organizations/screens/Organization/OrganizationDetail.test.jsx @@ -88,4 +88,28 @@ describe('', () => { expect(modifiedDetail.find('h6').text()).toBe('Last Modified'); expect(modifiedDetail.find('p').text()).toBe('Boo'); }); + + test('should show edit button for users with edit permission', () => { + const wrapper = mountWithContexts( + + ).find('OrganizationDetail'); + + const editLink = wrapper.findWhere(node => node.props().to === '/organizations/undefined/edit'); + expect(editLink.length).toBe(1); + }); + + test('should hide edit button for users without edit permission', () => { + const readOnlyOrg = { ...mockDetails }; + readOnlyOrg.summary_fields.user_capabilities.edit = false; + const wrapper = mountWithContexts( + + ).find('OrganizationDetail'); + + const editLink = wrapper.findWhere(node => node.props().to === '/organizations/undefined/edit'); + expect(editLink.length).toBe(0); + }); }); diff --git a/src/pages/Organizations/screens/Organization/Organization.jsx b/src/pages/Organizations/screens/Organization/Organization.jsx index da0c526f25..e4d8a837ec 100644 --- a/src/pages/Organizations/screens/Organization/Organization.jsx +++ b/src/pages/Organizations/screens/Organization/Organization.jsx @@ -135,14 +135,18 @@ class Organization extends Component { || isAdminOfThisOrg ); - const tabElements = [ - { name: i18nMark('Details'), link: `${match.url}/details` }, - { name: i18nMark('Access'), link: `${match.url}/access` }, - { name: i18nMark('Teams'), link: `${match.url}/teams` } + const tabsArray = [ + { name: i18nMark('Details'), link: `${match.url}/details`, id: 0 }, + { name: i18nMark('Access'), link: `${match.url}/access`, id: 1 }, + { name: i18nMark('Teams'), link: `${match.url}/teams`, id: 2 } ]; if (canSeeNotificationsTab) { - tabElements.push({ name: i18nMark('Notifications'), link: `${match.url}/notifications` }); + tabsArray.push({ + name: i18nMark('Notifications'), + link: `${match.url}/notifications`, + id: 3 + }); } let cardHeader = ( @@ -158,12 +162,7 @@ class Organization extends Component { match={match} history={history} labeltext={i18n._(t`Organization detail tabs`)} - tabsArray={[ - { name: i18nMark('Details'), link: `${match.url}/details`, id: 0 }, - { name: i18nMark('Access'), link: `${match.url}/access`, id: 1 }, - { name: i18nMark('Teams'), link: `${match.url}/teams`, id: 2 }, - { name: i18nMark('Notifications'), link: `${match.url}/notifications`, id: 3 }, - ]} + tabsArray={tabsArray} />