From 836d3f404767c22f7673ac8afdff26c68d768c5d Mon Sep 17 00:00:00 2001 From: Austin Pinkerton <115492521+apinkert@users.noreply.github.com> Date: Tue, 14 Jan 2025 05:19:02 -0500 Subject: [PATCH] Add settings bundle and remove application_services for MyUserAccess (#1741) * feat(MyUserAccess): add settings bundle and remove application_services * test(MyUserAccess): add e2e test to verify Settings card --- cypress/e2e/my-user-access.cy.ts | 16 ++++++++-- src/hooks/useBundleApps.js | 2 +- .../myUserAccess/bundles.js | 22 ++++++++------ .../myUserAccess/MUAContent.js | 16 ++++------ src/smart-components/myUserAccess/MUAHome.js | 1 - .../bundles/application_services.js | 30 ------------------- .../myUserAccess/bundles/settings.js | 1 + src/test/hooks/useBundleApps.test.js | 2 +- 8 files changed, 36 insertions(+), 54 deletions(-) delete mode 100644 src/smart-components/myUserAccess/bundles/application_services.js create mode 100644 src/smart-components/myUserAccess/bundles/settings.js diff --git a/cypress/e2e/my-user-access.cy.ts b/cypress/e2e/my-user-access.cy.ts index 2d5dd037c..feee6477d 100644 --- a/cypress/e2e/my-user-access.cy.ts +++ b/cypress/e2e/my-user-access.cy.ts @@ -1,11 +1,23 @@ describe('My User Access Landing page', () => { - it('Visit My User Access Landing page', () => { + beforeEach(() => { cy.login(); - cy.visit('/iam/my-user-access'); cy.wait(4000); + }); + it('Visit My User Access Landing page', () => { // check if My User Access heading exists on the page cy.contains('My User Access').should('exist'); }); + + describe('Settings and User Access roles', () => { + it('Select the Settings and User Access roles card', () => { + // scroll to bottom of card list to make the settings card visible + cy.get('.rbac-l-myUserAccess-section__cards').scrollTo('bottom'); + cy.contains('Settings and User Access').should('exist'); + cy.contains('Settings and User Access').click(); + // verify the card was selected + cy.contains('Your Settings and User Access roles').should('exist'); + }); + }); }); diff --git a/src/hooks/useBundleApps.js b/src/hooks/useBundleApps.js index c9defedec..c6aafb47c 100644 --- a/src/hooks/useBundleApps.js +++ b/src/hooks/useBundleApps.js @@ -5,7 +5,7 @@ import { DEFAULT_MUA_BUNDLE } from '../utilities/constants'; const useBundleApps = (bundle) => { const { pathname } = useLocation(); const navigate = useNavigate(); - if (typeof bundle !== 'string' || bundle.length === 0 || !['application_services', 'openshift', 'rhel', 'ansible'].includes(bundle)) { + if (typeof bundle !== 'string' || bundle.length === 0 || !['openshift', 'rhel', 'ansible', 'settings'].includes(bundle)) { bundle = DEFAULT_MUA_BUNDLE; navigate({ to: pathname, search: `bundle=${bundle}` }, { replace: true }); return []; diff --git a/src/presentational-components/myUserAccess/bundles.js b/src/presentational-components/myUserAccess/bundles.js index 1c1e9d852..982a57e45 100644 --- a/src/presentational-components/myUserAccess/bundles.js +++ b/src/presentational-components/myUserAccess/bundles.js @@ -1,13 +1,4 @@ export const bundleData = [ - { - entitlement: 'application_services', - title: 'Application Services', - apps: { - 'Streams for Apache Kafka (beta)': '/', - 'API Management (beta)': '/', - 'Data Science (private beta)': '/', - }, - }, { entitlement: 'openshift', title: 'OpenShift', @@ -35,6 +26,8 @@ export const bundleData = [ repositories: '/content', provisioning: '/provisioning', tasks: '/tasks', + ros: '/ros', + 'malware detection': '/malware-detection', }, appsIds: [ 'dashboard', @@ -52,6 +45,8 @@ export const bundleData = [ 'content-sources', 'provisioning', 'tasks', + 'ros', + 'malware-detection', ], }, { @@ -64,4 +59,13 @@ export const bundleData = [ }, appsIds: ['catalog', 'approval', 'automation-analytics', 'automation-hub'], }, + { + entitlement: 'settings', + title: 'Settings and User Access', + apps: { + rbac: '/rbac', + sources: '/sources', + }, + appsIds: ['rbac', 'sources'], + }, ]; diff --git a/src/smart-components/myUserAccess/MUAContent.js b/src/smart-components/myUserAccess/MUAContent.js index 4cb1f264d..d97f5e155 100644 --- a/src/smart-components/myUserAccess/MUAContent.js +++ b/src/smart-components/myUserAccess/MUAContent.js @@ -15,9 +15,7 @@ import messages from '../../Messages'; const MUAContent = ({ entitlements, isOrgAdmin, isUserAccessAdmin }) => { const intl = useIntl(); - const entitledBundles = Object.entries(entitlements).filter( - ([entitlement, { is_entitled }]) => is_entitled && entitlement !== 'application_services' - ); + const entitledBundles = Object.entries(entitlements).filter(([, { is_entitled }]) => is_entitled); const { bundle } = useSearchParams('bundle'); const hasAdminAccess = isOrgAdmin || isUserAccessAdmin; @@ -32,13 +30,11 @@ const MUAContent = ({ entitlements, isOrgAdmin, isUserAccessAdmin }) => { - {bundle !== 'application_services' && ( - - {intl.formatMessage(hasAdminAccess ? messages.yourRoles : messages.yourPermissions, { - name: bundleData.find(({ entitlement }) => entitlement === bundle)?.title, - })} - - )} + + {intl.formatMessage(hasAdminAccess ? messages.yourRoles : messages.yourPermissions, { + name: bundleData.find(({ entitlement }) => entitlement === bundle)?.title, + })} + diff --git a/src/smart-components/myUserAccess/MUAHome.js b/src/smart-components/myUserAccess/MUAHome.js index 34e7bb0ac..dd97018d3 100644 --- a/src/smart-components/myUserAccess/MUAHome.js +++ b/src/smart-components/myUserAccess/MUAHome.js @@ -27,7 +27,6 @@ const MyUserAccess = () => { }, []); const enhancedEntitlements = { ...user.entitlements, - application_services: { is_entitled: true, is_trial: false }, }; const entitledBundles = Object.entries(enhancedEntitlements).filter(([, { is_entitled }]) => is_entitled); diff --git a/src/smart-components/myUserAccess/bundles/application_services.js b/src/smart-components/myUserAccess/bundles/application_services.js deleted file mode 100644 index cee3843a1..000000000 --- a/src/smart-components/myUserAccess/bundles/application_services.js +++ /dev/null @@ -1,30 +0,0 @@ -import React from 'react'; -import { EmptyState, EmptyStateBody, EmptyStateIcon, List, ListItem, EmptyStateHeader } from '@patternfly/react-core'; -import { CogsIcon } from '@patternfly/react-icons'; -import { useIntl } from 'react-intl'; -import messages from '../../../Messages'; -// import RhelBundle from './rhel'; - -import './MUABundles.scss'; - -// eslint-disable-next-line no-unused-vars -const ApplicationServices = () => { - const intl = useIntl(); - return ( - - {intl.formatMessage(messages.appServicesNotManaged)}} - icon={} - headingLevel="h4" - /> - - - {intl.formatMessage(messages.allUsersViewEverything)} - {intl.formatMessage(messages.actionsOnClustersPermissions)} - - - - ); -}; - -export default ApplicationServices; diff --git a/src/smart-components/myUserAccess/bundles/settings.js b/src/smart-components/myUserAccess/bundles/settings.js new file mode 100644 index 000000000..7dc017243 --- /dev/null +++ b/src/smart-components/myUserAccess/bundles/settings.js @@ -0,0 +1 @@ +export { default } from './rhel'; diff --git a/src/test/hooks/useBundleApps.test.js b/src/test/hooks/useBundleApps.test.js index 20d123fd7..ca5c1cd2d 100644 --- a/src/test/hooks/useBundleApps.test.js +++ b/src/test/hooks/useBundleApps.test.js @@ -16,7 +16,7 @@ describe('useBundleApps', () => { const { result } = renderHook(() => useBundleApps('rhel'), { wrapper: MemoryRouter, }); - expect(result.current).toEqual(bundleData[2].appsIds); + expect(result.current).toEqual(bundleData[1].appsIds); }); it('should retrieve an empty array apps from incorrect bundle', () => {