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}
>
);
};