From 3e470812f0b5efdc7ca287d813a2446ca117c092 Mon Sep 17 00:00:00 2001 From: Derek Ho Date: Tue, 30 Jan 2024 11:12:22 -0500 Subject: [PATCH] Disable tenancy pop-ups when disabled or default tenant set (#1759) Signed-off-by: Derek Ho Co-authored-by: Darshit Chanpura <35282393+DarshitChanpura@users.noreply.github.com> (cherry picked from commit b1e986cbd5e5706182be0324550a4e1d238276d2) --- public/apps/account/account-app.tsx | 11 ++- public/apps/account/account-nav-button.tsx | 2 +- public/apps/account/test/account-app.test.tsx | 68 ++++++++++++++++--- .../account/test/account-nav-button.test.tsx | 11 +-- 4 files changed, 73 insertions(+), 19 deletions(-) diff --git a/public/apps/account/account-app.tsx b/public/apps/account/account-app.tsx index ebcd15d5a..879eb5a93 100644 --- a/public/apps/account/account-app.tsx +++ b/public/apps/account/account-app.tsx @@ -28,6 +28,7 @@ import { } from '../../utils/storage-utils'; import { constructErrorMessageAndLog } from '../error-utils'; import { fetchCurrentAuthType } from '../../utils/logout-utils'; +import { getDashboardsInfoSafe } from '../../utils/dashboards-info-utils'; function tenantSpecifiedInUrl() { return ( @@ -71,7 +72,15 @@ export async function setupTopNavButton(coreStart: CoreStart, config: ClientConf let shouldShowTenantPopup = true; - if (tenantSpecifiedInUrl() || getShouldShowTenantPopup() === false) { + const dashboardsInfo = await getDashboardsInfoSafe(coreStart.http); + const multitenancyEnabled = dashboardsInfo?.multitenancy_enabled && config.multitenancy.enabled; + const defaultTenantSet = dashboardsInfo?.default_tenant !== ''; + if ( + tenantSpecifiedInUrl() || + getShouldShowTenantPopup() === false || + !multitenancyEnabled || + defaultTenantSet + ) { shouldShowTenantPopup = false; } else { // Switch to previous tenant based on localStorage, it may fail due to diff --git a/public/apps/account/account-nav-button.tsx b/public/apps/account/account-nav-button.tsx index 02e04f3af..486316695 100644 --- a/public/apps/account/account-nav-button.tsx +++ b/public/apps/account/account-nav-button.tsx @@ -85,7 +85,7 @@ export function AccountNavButton(props: { }, [props.coreStart.http]); // Check if the tenant modal should be shown on load - if (isMultiTenancyEnabled && getShouldShowTenantPopup() && props.config.multitenancy.enabled) { + if (getShouldShowTenantPopup()) { setShouldShowTenantPopup(false); showTenantSwitchPanel(); } diff --git a/public/apps/account/test/account-app.test.tsx b/public/apps/account/test/account-app.test.tsx index 21e61d375..3c7e1a744 100644 --- a/public/apps/account/test/account-app.test.tsx +++ b/public/apps/account/test/account-app.test.tsx @@ -13,17 +13,12 @@ * permissions and limitations under the License. */ -import { shallow } from 'enzyme'; -import React from 'react'; import { setupTopNavButton } from '../account-app'; -import { - getShouldShowTenantPopup, - setShouldShowTenantPopup, - getSavedTenant, -} from '../../../utils/storage-utils'; +import { setShouldShowTenantPopup, getSavedTenant } from '../../../utils/storage-utils'; import { fetchAccountInfoSafe } from '../utils'; import { fetchCurrentAuthType } from '../../../utils/logout-utils'; -import { fetchCurrentTenant, selectTenant } from '../../configuration/utils/tenant-utils'; +import { fetchCurrentTenant } from '../../configuration/utils/tenant-utils'; +import { getDashboardsInfoSafe } from '../../../utils/dashboards-info-utils'; jest.mock('../../../utils/storage-utils', () => ({ getShouldShowTenantPopup: jest.fn(), @@ -35,6 +30,10 @@ jest.mock('../utils', () => ({ fetchAccountInfoSafe: jest.fn(), })); +jest.mock('../../../utils/dashboards-info-utils.tsx', () => ({ + getDashboardsInfoSafe: jest.fn(), +})); + jest.mock('../../../utils/logout-utils', () => ({ fetchCurrentAuthType: jest.fn(), })); @@ -56,6 +55,7 @@ describe('Account app', () => { const mockConfig = { multitenancy: { enable_aggregation_view: true, + enabled: true, }, }; @@ -67,12 +67,18 @@ describe('Account app', () => { }, }; + const mockDashboardsInfo = { + default_tenant: '', + multitenancy_enabled: true, + }; + const mockTenant = 'test1'; beforeAll(() => { (fetchAccountInfoSafe as jest.Mock).mockResolvedValue(mockAccountInfo); (fetchCurrentAuthType as jest.Mock).mockResolvedValue('dummy'); (fetchCurrentTenant as jest.Mock).mockResolvedValue(mockTenant); + (getDashboardsInfoSafe as jest.Mock).mockResolvedValue(mockDashboardsInfo); }); it('Should skip if auto swich if securitytenant in url', (done) => { @@ -116,4 +122,50 @@ describe('Account app', () => { done(); }); }); + + it('Should not show tenant selection popup when multitenancy is disabled from security index', (done) => { + (getDashboardsInfoSafe as jest.Mock).mockResolvedValueOnce({ + default_tenant: '', + multitenancy_enabled: false, + }); + + setupTopNavButton(mockCoreStart, mockConfig as any); + + process.nextTick(() => { + expect(getSavedTenant).toBeCalledTimes(0); + expect(setShouldShowTenantPopup).toBeCalledWith(false); + done(); + }); + }); + + it('Should not show tenant selection popup when multitenancy is disabled dynamically', (done) => { + const multiTenancyDisabledConfig = { + multitenancy: { + enable_aggregation_view: true, + enabled: false, + }, + }; + setupTopNavButton(mockCoreStart, multiTenancyDisabledConfig as any); + + process.nextTick(() => { + expect(getSavedTenant).toBeCalledTimes(0); + expect(setShouldShowTenantPopup).toBeCalledWith(false); + done(); + }); + }); + + it('Should not show tenant selection popup when default tenant is set from security index', (done) => { + (getDashboardsInfoSafe as jest.Mock).mockResolvedValueOnce({ + default_tenant: 'Global', + multitenancy_enabled: true, + }); + + setupTopNavButton(mockCoreStart, mockConfig as any); + + process.nextTick(() => { + expect(getSavedTenant).toBeCalledTimes(0); + expect(setShouldShowTenantPopup).toBeCalledWith(false); + done(); + }); + }); }); diff --git a/public/apps/account/test/account-nav-button.test.tsx b/public/apps/account/test/account-nav-button.test.tsx index ff20b0f25..c6d3aab40 100644 --- a/public/apps/account/test/account-nav-button.test.tsx +++ b/public/apps/account/test/account-nav-button.test.tsx @@ -153,15 +153,8 @@ describe('Account navigation button, multitenancy disabled', () => { jest.clearAllMocks(); }); - it('should not set modal when show popup is true', () => { - (getDashboardsInfo as jest.Mock).mockImplementation(() => { - return { - multitenancy_enabled: false, - private_tenant_enabled: false, - default_tenant: '', - }; - }); - (getShouldShowTenantPopup as jest.Mock).mockReturnValueOnce(true); + it('should not set modal when getShouldShowTenantPopup is false', () => { + (getShouldShowTenantPopup as jest.Mock).mockReturnValueOnce(false); shallow(