Skip to content

Commit

Permalink
adjust tests to match new implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
eokoneyo committed Oct 15, 2024
1 parent 2f9dea7 commit 4635c4a
Show file tree
Hide file tree
Showing 9 changed files with 92 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,13 @@ import {
import { __IntlProvider as IntlProvider } from '@kbn/i18n-react';

import { EditSpaceContentTab } from './edit_space_content_tab';
import { EditSpaceProvider } from './provider';
import { EditSpaceProviderRoot } from './provider';
import type { Space } from '../../../common';
import { spacesManagerMock } from '../../spaces_manager/spaces_manager.mock';
import type { SpaceContentTypeSummaryItem } from '../../types';
import { getPrivilegeAPIClientMock } from '../privilege_api_client.mock';
import { getRolesAPIClientMock } from '../roles_api_client.mock';
import { getSecurityLicenseMock } from '../security_license.mock';

const getUrlForApp = (appId: string) => appId;
const navigateToUrl = jest.fn();
Expand All @@ -42,7 +43,7 @@ const logger = loggingSystemMock.createLogger();
const TestComponent: React.FC<React.PropsWithChildren> = ({ children }) => {
return (
<IntlProvider locale="en">
<EditSpaceProvider
<EditSpaceProviderRoot
capabilities={{
navLinks: {},
management: {},
Expand All @@ -58,12 +59,13 @@ const TestComponent: React.FC<React.PropsWithChildren> = ({ children }) => {
notifications={notifications}
overlays={overlays}
getPrivilegesAPIClient={getPrivilegeAPIClient}
getSecurityLicense={getSecurityLicenseMock}
theme={theme}
i18n={i18n}
logger={logger}
>
{children}
</EditSpaceProvider>
</EditSpaceProviderRoot>
</IntlProvider>
);
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import { SOLUTION_VIEW_CLASSIC } from '../../../common/constants';
import { spacesManagerMock } from '../../spaces_manager/spaces_manager.mock';
import { getPrivilegeAPIClientMock } from '../privilege_api_client.mock';
import { getRolesAPIClientMock } from '../roles_api_client.mock';
import { getSecurityLicenseMock } from '../security_license.mock';

const space = { id: 'default', name: 'Default', disabledFeatures: [], _reserved: true };
const history = scopedHistoryMock.create();
Expand Down Expand Up @@ -80,6 +81,7 @@ describe('EditSpaceSettings', () => {
notifications={notifications}
overlays={overlays}
getPrivilegesAPIClient={getPrivilegeAPIClient}
getSecurityLicense={getSecurityLicenseMock}
theme={theme}
i18n={i18n}
logger={logger}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,11 @@ import {
import { __IntlProvider as IntlProvider } from '@kbn/i18n-react';

import { EditSpaceAssignedRolesTab } from './edit_space_roles_tab';
import { EditSpaceProvider } from './provider';
import { EditSpaceProviderRoot } from './provider';
import { spacesManagerMock } from '../../spaces_manager/spaces_manager.mock';
import { getPrivilegeAPIClientMock } from '../privilege_api_client.mock';
import { getRolesAPIClientMock } from '../roles_api_client.mock';
import { getSecurityLicenseMock } from '../security_license.mock';

const getUrlForApp = (appId: string) => appId;
const navigateToUrl = jest.fn();
Expand Down Expand Up @@ -51,7 +52,7 @@ describe('EditSpaceAssignedRolesTab', () => {
const TestComponent: React.FC<React.PropsWithChildren> = ({ children }) => {
return (
<IntlProvider locale="en">
<EditSpaceProvider
<EditSpaceProviderRoot
capabilities={{
navLinks: {},
management: {},
Expand All @@ -67,12 +68,13 @@ describe('EditSpaceAssignedRolesTab', () => {
notifications={notifications}
overlays={overlays}
getPrivilegesAPIClient={getPrivilegeAPIClient}
getSecurityLicense={getSecurityLicenseMock}
theme={theme}
i18n={i18n}
logger={logger}
>
{children}
</EditSpaceProvider>
</EditSpaceProviderRoot>
</IntlProvider>
);
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import {
import { spacesManagerMock } from '../../../spaces_manager/spaces_manager.mock';
import { getPrivilegeAPIClientMock } from '../../privilege_api_client.mock';
import { getRolesAPIClientMock } from '../../roles_api_client.mock';
import { getSecurityLicenseMock } from '../../security_license.mock';

const http = httpServiceMock.createStartContract();
const notifications = notificationServiceMock.createStartContract();
Expand Down Expand Up @@ -62,6 +63,7 @@ const SUTProvider = ({
getUrlForApp: (_) => _,
getRolesAPIClient: getRolesAPIClientMock,
getPrivilegesAPIClient: getPrivilegeAPIClientMock,
getSecurityLicense: getSecurityLicenseMock,
navigateToUrl: jest.fn(),
capabilities,
}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import {
themeServiceMock,
} from '@kbn/core/public/mocks';
import { __IntlProvider as IntlProvider } from '@kbn/i18n-react';
import type { Role } from '@kbn/security-plugin-types-common';
import type { Role, SecurityLicense } from '@kbn/security-plugin-types-common';
import {
createRawKibanaPrivileges,
kibanaFeatures,
Expand Down Expand Up @@ -74,6 +74,9 @@ const spacesClientsInvocatorMock = jest.fn((fn) =>
const dispatchMock = jest.fn();
const onSaveCompleted = jest.fn();
const closeFlyout = jest.fn();
const licenseMock = {
getFeatures: jest.fn(() => ({})),
} as unknown as SecurityLicense;

const renderPrivilegeRolesForm = ({
preSelectedRoles,
Expand All @@ -96,12 +99,19 @@ const renderPrivilegeRolesForm = ({
getRolesAPIClient: getRolesAPIClientMock,
getPrivilegesAPIClient: getPrivilegeAPIClientMock,
navigateToUrl: jest.fn(),
license: licenseMock,
capabilities: {
navLinks: {},
management: {},
catalogue: {},
spaces: { manage: true },
},
dispatch: dispatchMock,
state: {
roles: new Map(),
fetchRolesError: false,
},
invokeClient: spacesClientsInvocatorMock,
}}
>
<PrivilegesRolesForm
Expand All @@ -111,9 +121,6 @@ const renderPrivilegeRolesForm = ({
closeFlyout,
defaultSelected: preSelectedRoles,
onSaveCompleted,
storeDispatch: dispatchMock,
spacesClientsInvocator: spacesClientsInvocatorMock,
getUrlForApp: jest.fn((_) => _),
}}
/>
</EditSpaceProvider>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ import {
FEATURE_PRIVILEGES_CUSTOM,
FEATURE_PRIVILEGES_READ,
} from '../../../../../common/constants';
import { type EditSpaceServices, type EditSpaceStore, useEditSpaceServices } from '../../provider';
import { useEditSpaceServices, useEditSpaceStore } from '../../provider';

type KibanaRolePrivilege =
| keyof NonNullable<KibanaFeatureConfig['privileges']>
Expand All @@ -62,9 +62,6 @@ interface PrivilegesRolesFormProps {
* this is useful when the form is opened in edit mode
*/
defaultSelected?: Role[];
storeDispatch: EditSpaceStore['dispatch'];
spacesClientsInvocator: EditSpaceServices['invokeClient'];
getUrlForApp: EditSpaceServices['getUrlForApp'];
}

const createRolesComboBoxOptions = (roles: Role[]): Array<EuiComboBoxOptionOption<Role>> =>
Expand All @@ -74,17 +71,9 @@ const createRolesComboBoxOptions = (roles: Role[]): Array<EuiComboBoxOptionOptio
}));

export const PrivilegesRolesForm: FC<PrivilegesRolesFormProps> = (props) => {
const {
space,
onSaveCompleted,
closeFlyout,
features,
defaultSelected = [],
spacesClientsInvocator,
storeDispatch,
getUrlForApp,
} = props;
const { logger, notifications, license } = useEditSpaceServices();
const { space, onSaveCompleted, closeFlyout, features, defaultSelected = [] } = props;
const { logger, notifications, license, invokeClient, getUrlForApp } = useEditSpaceServices();
const { dispatch: storeDispatch } = useEditSpaceStore();
const [assigningToRole, setAssigningToRole] = useState(false);
const [fetchingDataDeps, setFetchingDataDeps] = useState(false);
const [kibanaPrivileges, setKibanaPrivileges] = useState<RawKibanaPrivileges | null>(null);
Expand All @@ -98,7 +87,7 @@ export const PrivilegesRolesForm: FC<PrivilegesRolesFormProps> = (props) => {
async function fetchRequiredData(spaceId: string) {
setFetchingDataDeps(true);

const [systemRoles, _kibanaPrivileges] = await spacesClientsInvocator((clients) =>
const [systemRoles, _kibanaPrivileges] = await invokeClient((clients) =>
Promise.all([
clients.rolesClient.getRoles(),
clients.privilegesClient.getAll({ includeActions: true, respectLicenseLevel: false }),
Expand All @@ -123,7 +112,7 @@ export const PrivilegesRolesForm: FC<PrivilegesRolesFormProps> = (props) => {
}

fetchRequiredData(space.id!).finally(() => setFetchingDataDeps(false));
}, [space.id, spacesClientsInvocator]);
}, [invokeClient, space.id]);

const selectedRolesCombinedPrivileges = useMemo(() => {
const combinedPrivilege = new Set(
Expand Down Expand Up @@ -315,7 +304,7 @@ export const PrivilegesRolesForm: FC<PrivilegesRolesFormProps> = (props) => {
return selectedRole.value!;
});

await spacesClientsInvocator((clients) =>
await invokeClient((clients) =>
clients.rolesClient.bulkUpdateRoles({ rolesUpdate: updatedRoles }).then((response) => {
setAssigningToRole(false);
onSaveCompleted(response);
Expand All @@ -338,13 +327,14 @@ export const PrivilegesRolesForm: FC<PrivilegesRolesFormProps> = (props) => {
});
}
}, [
roleSpacePrivilege,
roleCustomizationAnchor.value?.kibana,
roleCustomizationAnchor.privilegeIndex,
selectedRoles,
spacesClientsInvocator,
invokeClient,
storeDispatch,
onSaveCompleted,
space.id,
roleSpacePrivilege,
roleCustomizationAnchor,
onSaveCompleted,
logger,
notifications.toasts,
]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import { managementPluginMock } from '@kbn/management-plugin/public/mocks';

import { ManagementService } from './management_service';
import { getRolesAPIClientMock } from './roles_api_client.mock';
import { getSecurityLicenseMock } from './security_license.mock';
import { EventTracker } from '../analytics';
import type { ConfigType } from '../config';
import type { PluginsStart } from '../plugin';
Expand Down Expand Up @@ -49,6 +50,7 @@ describe('ManagementService', () => {
logger,
getRolesAPIClient: getRolesAPIClientMock,
getPrivilegesAPIClient: jest.fn(),
getSecurityLicense: getSecurityLicenseMock,
eventTracker,
isServerless: false,
});
Expand All @@ -73,6 +75,7 @@ describe('ManagementService', () => {
logger,
getRolesAPIClient: getRolesAPIClientMock,
getPrivilegesAPIClient: jest.fn(),
getSecurityLicense: getSecurityLicenseMock,
eventTracker,
isServerless: false,
});
Expand All @@ -98,6 +101,7 @@ describe('ManagementService', () => {
logger,
getRolesAPIClient: jest.fn(),
getPrivilegesAPIClient: jest.fn(),
getSecurityLicense: getSecurityLicenseMock,
eventTracker,
isServerless: false,
});
Expand Down
49 changes: 49 additions & 0 deletions x-pack/plugins/spaces/public/management/security_license.mock.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/

import { BehaviorSubject, type Observable } from 'rxjs';

import type { SecurityLicense } from '@kbn/security-plugin-types-public';

type SecurityLicenseFeatures = SecurityLicense['features$'] extends Observable<infer P> ? P : never;

export const createSecurityLicenseMock = ({
securityFeaturesConfig,
}: {
securityFeaturesConfig: SecurityLicenseFeatures;
}): SecurityLicense => {
return {
isLicenseAvailable: jest.fn(),
isEnabled: jest.fn(),
getFeatures: jest.fn(),
getUnavailableReason: jest.fn(),
hasAtLeast: jest.fn(),
getLicenseType: jest.fn(),
features$: new BehaviorSubject<SecurityLicenseFeatures>(securityFeaturesConfig),
};
};

export const getSecurityLicenseMock = jest.fn().mockResolvedValue(
createSecurityLicenseMock({
securityFeaturesConfig: {
showLinks: true,
showLogin: true,
allowLogin: true,
allowRbac: true,
allowFips: true,
showRoleMappingsManagement: true,
allowAccessAgreement: true,
allowAuditLogging: true,
allowSubFeaturePrivileges: true,
allowRoleFieldLevelSecurity: true,
allowRoleDocumentLevelSecurity: true,
allowRoleRemoteIndexPrivileges: true,
allowRemoteClusterPrivileges: true,
allowUserProfileCollaboration: true,
},
})
);
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ async function mountApp(basePath: string, pathname: string, spaceId?: string) {
logger,
getRolesAPIClient: jest.fn(),
getPrivilegesAPIClient: jest.fn(),
getSecurityLicense: jest.fn(),
eventTracker,
isServerless: false,
})
Expand All @@ -102,6 +103,7 @@ describe('spacesManagementApp', () => {
logger,
getRolesAPIClient: jest.fn(),
getPrivilegesAPIClient: jest.fn(),
getSecurityLicense: jest.fn(),
eventTracker,
isServerless: false,
})
Expand Down

0 comments on commit 4635c4a

Please sign in to comment.