diff --git a/x-pack/platform/plugins/shared/cases/public/components/system_actions/cases/cases_params.test.tsx b/x-pack/platform/plugins/shared/cases/public/components/system_actions/cases/cases_params.test.tsx index 40c0442c0dc4..fce9d872823c 100644 --- a/x-pack/platform/plugins/shared/cases/public/components/system_actions/cases/cases_params.test.tsx +++ b/x-pack/platform/plugins/shared/cases/public/components/system_actions/cases/cases_params.test.tsx @@ -19,6 +19,7 @@ import { useGetAllCaseConfigurations } from '../../../containers/configure/use_g import { useGetAllCaseConfigurationsResponse } from '../../configure_cases/__mock__'; import { templatesConfigurationMock } from '../../../containers/mock'; import * as utils from '../../../containers/configure/utils'; +import { ATTACK_DISCOVERY_SCHEDULES_ALERT_TYPE_ID } from '@kbn/elastic-assistant-common'; jest.mock('@kbn/alerts-ui-shared/src/common/hooks/use_alerts_data_view'); jest.mock('../../../common/lib/kibana/use_application'); @@ -72,6 +73,7 @@ describe('CasesParamsFields renders', () => { // Workaround for timeout via https://github.com/testing-library/user-event/issues/833#issuecomment-1171452841 user = userEvent.setup({ advanceTimers: jest.advanceTimersByTime, + pointerEventsCheck: 0, }); useApplicationMock.mockReturnValueOnce({ appId: 'management' }); useAlertsDataViewMock.mockReturnValue({ @@ -397,4 +399,67 @@ describe('CasesParamsFields renders', () => { expect(editAction.mock.calls[0][1].reopenClosedCases).toEqual(true); }); }); + + describe('Attack Discovery', () => { + it('does not render `group by` component', async () => { + const newProps = { + ...defaultProps, + ruleTypeId: ATTACK_DISCOVERY_SCHEDULES_ALERT_TYPE_ID, + }; + render(); + + expect(screen.queryByTestId('group-by-alert-field-combobox')).not.toBeInTheDocument(); + }); + + it('does not render `time window` component', async () => { + const newProps = { + ...defaultProps, + ruleTypeId: ATTACK_DISCOVERY_SCHEDULES_ALERT_TYPE_ID, + }; + render(); + + expect(screen.queryByTestId('time-window-size-input')).not.toBeInTheDocument(); + expect(screen.queryByTestId('time-window-unit-select')).not.toBeInTheDocument(); + }); + + it('does not render `reopen case` component', async () => { + const newProps = { + ...defaultProps, + ruleTypeId: ATTACK_DISCOVERY_SCHEDULES_ALERT_TYPE_ID, + }; + render(); + + expect(screen.queryByTestId('reopen-case')).not.toBeInTheDocument(); + }); + + it('renders disabled `template selector` component', async () => { + const newProps = { + ...defaultProps, + ruleTypeId: ATTACK_DISCOVERY_SCHEDULES_ALERT_TYPE_ID, + }; + render(); + + const templateSelectorComponent = await screen.findByTestId('create-case-template-select'); + + expect(templateSelectorComponent).toBeInTheDocument(); + expect(templateSelectorComponent).toBeDisabled(); + }); + + it('shows attack discovery explanation tooltip', async () => { + const newProps = { + ...defaultProps, + ruleTypeId: ATTACK_DISCOVERY_SCHEDULES_ALERT_TYPE_ID, + }; + render(); + + await user.hover(await screen.findByTestId('create-case-template-select')); + + expect(await screen.findByTestId('case-action-attack-discovery-tooltip')).toBeTruthy(); + expect( + await screen.findByText( + 'Attack Discovery Schedules fully manage Case actions, automatically filling in all fields for new Cases.' + ) + ).toBeInTheDocument(); + }); + }); }); diff --git a/x-pack/platform/plugins/shared/cases/public/components/system_actions/cases/cases_params.tsx b/x-pack/platform/plugins/shared/cases/public/components/system_actions/cases/cases_params.tsx index b5d5fd02fcca..04b3fb3690bc 100644 --- a/x-pack/platform/plugins/shared/cases/public/components/system_actions/cases/cases_params.tsx +++ b/x-pack/platform/plugins/shared/cases/public/components/system_actions/cases/cases_params.tsx @@ -188,8 +188,26 @@ export const CasesParamsFieldsComponent: React.FunctionComponent< [editSubActionProperty] ); - const groupByComponent = useMemo(() => { + if (isAttackDiscoveryRuleType) { return ( + + + + ); + } + + return ( + <> @@ -207,71 +225,54 @@ export const CasesParamsFieldsComponent: React.FunctionComponent< - ); - }, [loadingAlertDataViews, onChangeComboBox, options, selectedOptions]); - - const timeWindowComponent = useMemo(() => { - return ( - <> - 0 && - timeWindow !== undefined - } - > - - - { - handleTimeWindowChange('timeWindowSize', e.target.value); - }} - /> - - - { - handleTimeWindowChange('timeWindowUnit', e.target.value); - }} - options={getTimeUnitOptions(timeWindowSize)} - /> - - - - - {showTimeWindowWarning && ( - - )} - - ); - }, [ - errors.timeWindow, - handleTimeWindowChange, - showTimeWindowWarning, - timeWindow, - timeWindowSize, - timeWindowUnit, - ]); - - const templateSelectorComponent = useMemo(() => { - return ( + + 0 && + timeWindow !== undefined + } + > + + + { + handleTimeWindowChange('timeWindowSize', e.target.value); + }} + /> + + + { + handleTimeWindowChange('timeWindowUnit', e.target.value); + }} + options={getTimeUnitOptions(timeWindowSize)} + /> + + + + + {showTimeWindowWarning && ( + + )} + - ); - }, [ - currentConfiguration.id, - currentConfiguration.templates, - defaultTemplate, - isAttackDiscoveryRuleType, - isLoadingCaseConfiguration, - onTemplateChange, - selectedTemplate, - ]); - - const reopenClosedCasesComponent = useMemo(() => { - return ( + - ); - }, [editSubActionProperty, index, reopenClosedCases]); - - if (isAttackDiscoveryRuleType) { - return ( - - {templateSelectorComponent} - - ); - } - - return ( - <> - {groupByComponent} - - {timeWindowComponent} - - {templateSelectorComponent} - - {reopenClosedCasesComponent} ); };