Skip to content

Commit

Permalink
[Security Solution][Admin][Policy] Clean up Policy list (#129139) (#1…
Browse files Browse the repository at this point in the history
…29492)

(cherry picked from commit a9e6f0a)

Co-authored-by: Candace Park <56409205+parkiino@users.noreply.github.com>
  • Loading branch information
kibanamachine and parkiino authored Apr 5, 2022
1 parent f76836c commit 9283159
Show file tree
Hide file tree
Showing 33 changed files with 88 additions and 57 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import {
} from '@elastic/eui';
import { i18n } from '@kbn/i18n';
import { FormattedMessage } from '@kbn/i18n-react';
import styled from 'styled-components';
import onboardingLogo from '../images/security_administration_onboarding.svg';
import { useKibana } from '../../common/lib/kibana';

Expand All @@ -41,10 +40,6 @@ interface ManagementStep {
children: JSX.Element;
}

const StyledDiv = styled.div`
padding-left: 20%;
`;

const PolicyEmptyState = React.memo<{
loading: boolean;
onActionClick: (event: MouseEvent<HTMLAnchorElement | HTMLButtonElement>) => void;
Expand All @@ -53,7 +48,7 @@ const PolicyEmptyState = React.memo<{
}>(({ loading, onActionClick, actionDisabled, policyEntryPoint = false }) => {
const docLinks = useKibana().services.docLinks;
return (
<StyledDiv data-test-subj="emptyPolicyTable">
<div data-test-subj="emptyPolicyTable">
{loading ? (
<EuiFlexGroup alignItems="center" justifyContent="center">
<EuiFlexItem grow={false}>
Expand Down Expand Up @@ -128,7 +123,7 @@ const PolicyEmptyState = React.memo<{
</EuiFlexItem>
</EuiFlexGroup>
)}
</StyledDiv>
</div>
);
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import {
getFakeListDefinition,
getFakeHttpService,
renderMutation,
} from './test_utils';
} from '../test_utils';
import { getExceptionListItemSchemaMock } from '../../../../../lists/common/schemas/response/exception_list_item_schema.mock';
import { act } from '@testing-library/react-hooks';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import {
getFakeListDefinition,
getFakeHttpService,
renderMutation,
} from './test_utils';
} from '../test_utils';
import { getExceptionListItemSchemaMock } from '../../../../../lists/common/schemas/response/exception_list_item_schema.mock';
import { act } from '@testing-library/react-hooks';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import {
getFakeListDefinition,
getFakeHttpService,
renderMutation,
} from './test_utils';
} from '../test_utils';
import { getExceptionListItemSchemaMock } from '../../../../../lists/common/schemas/response/exception_list_item_schema.mock';
import { act } from '@testing-library/react-hooks';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import {
getFakeListDefinition,
getFakeHttpService,
renderMutation,
} from './test_utils';
} from '../test_utils';
import { getExceptionListItemSchemaMock } from '../../../../../lists/common/schemas/response/exception_list_item_schema.mock';
import { act } from '@testing-library/react-hooks';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import {
getFakeListDefinition,
getFakeHttpService,
renderQuery,
} from './test_utils';
} from '../test_utils';
import { getExceptionListItemSchemaMock } from '../../../../../lists/common/schemas/response/exception_list_item_schema.mock';

describe('Get artifact hook', () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import {
getFakeListDefinition,
getFakeHttpService,
renderQuery,
} from './test_utils';
} from '../test_utils';

describe('List artifact hook', () => {
let result: ReturnType<typeof useListArtifact>;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import {
getFakeListDefinition,
getFakeHttpService,
renderQuery,
} from './test_utils';
} from '../test_utils';

describe('Summary artifact hook', () => {
let result: ReturnType<typeof useSummaryArtifact>;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import {
getFakeListDefinition,
getFakeHttpService,
renderMutation,
} from './test_utils';
} from '../test_utils';
import { getExceptionListItemSchemaMock } from '../../../../../lists/common/schemas/response/exception_list_item_schema.mock';
import { act } from '@testing-library/react-hooks';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import React from 'react';
import { renderHook } from '@testing-library/react-hooks';
import { HttpSetup } from 'kibana/public';
import { CreateExceptionListSchema } from '@kbn/securitysolution-io-ts-list-types';
import { coreMock } from '../../../../../../../src/core/public/mocks';
import { ReactQueryClientProvider } from '../../../common/containers/query_client/query_client_provider';
import { coreMock } from '../../../../../../src/core/public/mocks';
import { ReactQueryClientProvider } from '../../common/containers/query_client/query_client_provider';

export const getFakeListId: () => string = () => 'FAKE_LIST_ID';
export const getFakeListDefinition: () => CreateExceptionListSchema = () => ({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import {
import { getEndpointListPath } from '../../../common/routing';
import { HOST_METADATA_LIST_ROUTE } from '../../../../../common/endpoint/constants';

jest.mock('../../policy/store/services/ingest', () => ({
jest.mock('../../../services/policies/ingest', () => ({
sendGetAgentPolicyList: () => Promise.resolve({ items: [] }),
sendGetEndpointSecurityPackage: () => Promise.resolve({}),
}));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ import {
HOST_METADATA_LIST_ROUTE,
} from '../../../../../common/endpoint/constants';

jest.mock('../../policy/store/services/ingest', () => ({
jest.mock('../../../services/policies/ingest', () => ({
sendGetAgentConfigList: () => Promise.resolve({ items: [] }),
sendGetAgentPolicyList: () => Promise.resolve({ items: [] }),
sendGetEndpointSecurityPackage: () => Promise.resolve({ version: '1.1.1' }),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ import {
sendGetAgentPolicyList,
sendGetEndpointSecurityPackage,
sendGetFleetAgentsWithEndpoint,
} from '../../policy/store/services/ingest';
} from '../../../services/policies/ingest';
import { GetPolicyListResponse } from '../../policy/types';
import {
AgentIdsPendingActions,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import {
INGEST_API_EPM_PACKAGES,
INGEST_API_PACKAGE_POLICIES,
INGEST_API_FLEET_AGENTS,
} from '../../policy/store/services/ingest';
} from '../../../services/policies/ingest';
import {
GetAgentPoliciesResponse,
GetAgentPoliciesResponseItem,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,8 @@ jest.mock('@kbn/i18n-react', () => {
};
});
jest.mock('../../../../common/components/link_to');
jest.mock('../../policy/store/services/ingest', () => {
const originalModule = jest.requireActual('../../policy/store/services/ingest');
jest.mock('../../../services/policies/ingest', () => {
const originalModule = jest.requireActual('../../../services/policies/ingest');
return {
...originalModule,
sendGetEndpointSecurityPackage: () => Promise.resolve({}),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ import {
BackToExternalAppButtonProps,
} from '../../../components/back_to_external_app_button/back_to_external_app_button';
import { DevConsole } from './dev_console';
import { ManagementEmptyStateWrapper } from '../../../components/management_empty_state_wrapper';

const MAX_PAGINATED_ITEM = 9999;
const TRANSFORM_URL = '/data/transform';
Expand Down Expand Up @@ -551,7 +552,9 @@ export const EndpointList = () => {
);
} else {
return (
<PolicyEmptyState loading={policyItemsLoading} onActionClick={handleCreatePolicyClick} />
<ManagementEmptyStateWrapper>
<PolicyEmptyState loading={policyItemsLoading} onActionClick={handleCreatePolicyClick} />
</ManagementEmptyStateWrapper>
);
}
}, [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import {
} from '../../../../../../common/mock/endpoint';
import { MiddlewareActionSpyHelper } from '../../../../../../common/store/test_utils';
import { sendGetEndpointSpecificPackagePolicies } from '../../../../../services/policies/policies';
import { sendGetEndpointSpecificPackagePoliciesMock } from '../../../../../services/policies/test_mock_utilts';
import { sendGetEndpointSpecificPackagePoliciesMock } from '../../../../../services/policies/test_mock_utils';
import type {
CreateExceptionListItemSchema,
ExceptionListItemSchema,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import {
createAppRootMockRenderer,
} from '../../../../../../common/mock/endpoint';
import { EventFiltersListPageState } from '../../../types';
import { sendGetEndpointSpecificPackagePoliciesMock } from '../../../../../services/policies/test_mock_utilts';
import { sendGetEndpointSpecificPackagePoliciesMock } from '../../../../../services/policies/test_mock_utils';
import { GetPolicyListResponse } from '../../../../policy/types';
import userEvent from '@testing-library/user-event';
import { ExceptionListItemSchema } from '@kbn/securitysolution-io-ts-list-types';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import { EventFiltersListPage } from './event_filters_list_page';
import { eventFiltersListQueryHttpMock } from '../test_utils';
import { isFailedResourceState, isLoadedResourceState } from '../../../state';
import { sendGetEndpointSpecificPackagePolicies } from '../../../services/policies/policies';
import { sendGetEndpointSpecificPackagePoliciesMock } from '../../../services/policies/test_mock_utilts';
import { sendGetEndpointSpecificPackagePoliciesMock } from '../../../services/policies/test_mock_utils';

// Needed to mock the data services used by the ExceptionItem component
jest.mock('../../../../common/lib/kibana');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import {
AppContextTestRender,
createAppRootMockRenderer,
} from '../../../../../common/mock/endpoint';
import { sendGetEndpointSpecificPackagePoliciesMock } from '../../../../services/policies/test_mock_utilts';
import { sendGetEndpointSpecificPackagePoliciesMock } from '../../../../services/policies/test_mock_utils';
import { GetPolicyListResponse } from '../../../policy/types';
import { createEmptyHostIsolationException } from '../../utils';
import { HostIsolationExceptionsForm } from './form';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import {
} from '../../../../../common/mock/endpoint';
import { getHostIsolationExceptionsListPath } from '../../../../common/routing';
import { sendGetEndpointSpecificPackagePolicies } from '../../../../services/policies/policies';
import { sendGetEndpointSpecificPackagePoliciesMock } from '../../../../services/policies/test_mock_utilts';
import { sendGetEndpointSpecificPackagePoliciesMock } from '../../../../services/policies/test_mock_utils';
import {
createHostIsolationExceptionItem,
getOneHostIsolationExceptionItem,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import { EndpointPrivileges } from '../../../../../common/endpoint/types';
import { useUserPrivileges as _useUserPrivileges } from '../../../../common/components/user_privileges';
import { AppContextTestRender, createAppRootMockRenderer } from '../../../../common/mock/endpoint';
import { sendGetEndpointSpecificPackagePolicies } from '../../../services/policies/policies';
import { sendGetEndpointSpecificPackagePoliciesMock } from '../../../services/policies/test_mock_utilts';
import { sendGetEndpointSpecificPackagePoliciesMock } from '../../../services/policies/test_mock_utils';
import { getHostIsolationExceptionItems } from '../service';
import { HostIsolationExceptionsList } from './host_isolation_exceptions_list';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import {
sendGetPackagePolicy,
sendGetFleetAgentStatusForPolicy,
sendPutPackagePolicy,
} from '../../services/ingest';
} from '../../../../../services/policies/ingest';
import { NewPolicyData, PolicyData } from '../../../../../../../common/endpoint/types';
import { getPolicyDataForUpdate } from '../../../../../../../common/endpoint/service/policy';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@
* 2.0.
*/

import { INGEST_API_EPM_PACKAGES, INGEST_API_PACKAGE_POLICIES } from './services/ingest';
import {
INGEST_API_EPM_PACKAGES,
INGEST_API_PACKAGE_POLICIES,
} from '../../../services/policies/ingest';
import { EndpointDocGenerator } from '../../../../../common/endpoint/generate_data';
import { GetPolicyListResponse } from '../types';
import { GetPackagesResponse } from '../../../../../../fleet/common';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,15 @@ import React from 'react';
import { act, waitFor, fireEvent } from '@testing-library/react';
import { AppContextTestRender, createAppRootMockRenderer } from '../../../../common/mock/endpoint';
import { sendGetEndpointSpecificPackagePolicies } from '../../../services/policies/policies';
import { sendGetEndpointSpecificPackagePoliciesMock } from '../../../services/policies/test_mock_utilts';
import { sendGetEndpointSpecificPackagePoliciesMock } from '../../../services/policies/test_mock_utils';
import { PolicyList } from './policy_list';
import { sendGetAgentPolicyList } from '../store/services/ingest';
import { sendGetAgentPolicyList } from '../../../services/policies/ingest';
import { GetPolicyListResponse } from '../types';
import { getEndpointListPath, getPoliciesPath } from '../../../common/routing';
import { APP_UI_ID } from '../../../../../common/constants';

jest.mock('../../../services/policies/policies');
jest.mock('../store/services/ingest');
jest.mock('../../../services/policies/ingest');

const getPackagePolicies = sendGetEndpointSpecificPackagePolicies as jest.Mock;

Expand All @@ -39,6 +39,36 @@ describe('When on the policy list page', () => {
jest.clearAllMocks();
});

describe('and there are no policies', () => {
beforeEach(async () => {
getPackagePolicies.mockImplementation(() =>
sendGetEndpointSpecificPackagePoliciesMock({
page: 1,
perPage: 20,
count: 0,
})
);
render();
await waitFor(() => {
expect(getPackagePolicies).toHaveBeenCalled();
});
});
afterEach(() => {
getPackagePolicies.mockReset();
});
it('should show the empty page', () => {
expect(renderResult.getByTestId('emptyPolicyTable')).toBeTruthy();
});
it('should show instruction text and a button to add the Endpoint Security integration', () => {
expect(
renderResult.findByText(
'From this page, you’ll be able to view and manage the Endpoint Security Integration policies in your environment running Endpoint Security.'
)
).toBeTruthy();
expect(renderResult.getByTestId('onboardingStartButton')).toBeTruthy();
});
});

describe('and data exists', () => {
let policies: GetPolicyListResponse;
beforeEach(async () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,12 @@ import {
import { AgentPolicy } from '../../../../../../fleet/common';
import { PolicyEmptyState } from '../../../components/management_empty_state';
import { useNavigateToAppEventHandler } from '../../../../common/hooks/endpoint/use_navigate_to_app_event_handler';
import { CreatePackagePolicyRouteState } from '../../../../../../fleet/public';
import { CreatePackagePolicyRouteState, pagePathGetters } from '../../../../../../fleet/public';
import { APP_UI_ID } from '../../../../../common/constants';
import { getPoliciesPath } from '../../../common/routing';
import { useAppUrl, useToasts } from '../../../../common/lib/kibana';
import { PolicyEndpointCount } from './components/policy_endpoint_count';
import { ManagementEmptyStateWrapper } from '../../../components/management_empty_state_wrapper';

export const PolicyList = memo(() => {
const { pagination, pageSizeOptions, setPagination } = useUrlPagination();
Expand Down Expand Up @@ -122,9 +123,9 @@ export const PolicyList = memo(() => {
const handleCreatePolicyClick = useNavigateToAppEventHandler<CreatePackagePolicyRouteState>(
'fleet',
{
path: `/integrations/${
endpointPackageInfo ? `/endpoint-${endpointPackageInfo?.version}` : ''
}/add-integration`,
path: pagePathGetters.add_integration_to_policy({
pkgkey: endpointPackageInfo ? `/endpoint-${endpointPackageInfo?.version}` : '',
})[1],
state: {
onCancelNavigateTo: [
APP_UI_ID,
Expand Down Expand Up @@ -316,11 +317,13 @@ export const PolicyList = memo(() => {
/>
</>
) : (
<PolicyEmptyState
loading={packageIsFetching}
onActionClick={handleCreatePolicyClick}
policyEntryPoint
/>
<ManagementEmptyStateWrapper>
<PolicyEmptyState
loading={packageIsFetching}
onActionClick={handleCreatePolicyClick}
policyEntryPoint
/>
</ManagementEmptyStateWrapper>
)}
</AdministrationListPage>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import {
PutTrustedAppUpdateRequest,
} from '../../../../../common/endpoint/types';
import { HttpRequestValidationError } from './errors';
import { sendGetAgentPolicyList } from '../../policy/store/services/ingest';
import { sendGetAgentPolicyList } from '../../../services/policies/ingest';
import { AGENT_POLICY_SAVED_OBJECT_TYPE } from '../../../../../../fleet/common';

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

import { useGetEndpointSecurityPackage } from './hooks';
import { HttpFetchError, HttpSetup } from 'kibana/public';
import { getFakeHttpService, renderQuery } from '../../hooks/artifacts/test_utils';
import { getFakeHttpService, renderQuery } from '../../hooks/test_utils';
import { EndpointDocGenerator } from '../../../../common/endpoint/generate_data';
import { UseQueryOptions } from 'react-query';
import { GetPackagesResponse } from '../../../../../fleet/common';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,7 @@ import {
} from '../../../../../fleet/common';
import { useHttp } from '../../../common/lib/kibana';
import { MANAGEMENT_DEFAULT_PAGE_SIZE } from '../../common/constants';
import {
sendGetAgentPolicyList,
sendGetEndpointSecurityPackage,
} from '../../pages/policy/store/services/ingest';
import { sendGetAgentPolicyList, sendGetEndpointSecurityPackage } from './ingest';
import { GetPolicyListResponse } from '../../pages/policy/types';
import { sendGetEndpointSpecificPackagePolicies } from './policies';
import { ServerApiError } from '../../../common/types';
Expand Down
Loading

0 comments on commit 9283159

Please sign in to comment.