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', () => {