From 759d70c9ee677bad857b5d9e6b706ba27d53d060 Mon Sep 17 00:00:00 2001
From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
Date: Wed, 17 Jul 2024 22:33:24 +0200
Subject: [PATCH] [8.15] [Security Solution] Add cypress for expandable flyout
previews (#188117) (#188570)
# Backport
This will backport the following commits from `main` to `8.15`:
- [[Security Solution] Add cypress for expandable flyout previews
(#188117)](https://github.com/elastic/kibana/pull/188117)
### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sqren/backport)
Co-authored-by: christineweng <18648970+christineweng@users.noreply.github.com>
---
...correlations_details_alerts_table.test.tsx | 9 +-
.../correlations_details_alerts_table.tsx | 5 +-
.../left/components/test_ids.ts | 3 -
...lert_details_left_panel_entities_tab.cy.ts | 61 ++++++
...rt_details_left_panel_prevalence_tab.cy.ts | 52 ++++++
.../alert_details_preview_panel.cy.ts | 175 ++++++++++++++++++
...ert_details_right_panel_overview_tab.cy.ts | 118 +++++++++++-
...ert_details_left_panel_correlations_tab.ts | 12 ++
.../alert_details_left_panel_entities_tab.ts | 7 +
...alert_details_left_panel_prevalence_tab.ts | 5 +
.../alert_details_preview_panel.ts | 27 +++
.../alert_details_right_panel_overview_tab.ts | 6 +
.../screens/hosts/flyout_host_panel.ts | 2 +
.../screens/users/flyout_user_panel.ts | 3 +
...ert_details_left_panel_correlations_tab.ts | 26 ++-
.../alert_details_preview_panel.ts | 33 ++++
.../alert_details_right_panel.ts | 8 +-
17 files changed, 531 insertions(+), 21 deletions(-)
create mode 100644 x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_preview_panel.cy.ts
create mode 100644 x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_preview_panel.ts
create mode 100644 x-pack/test/security_solution_cypress/cypress/tasks/expandable_flyout/alert_details_preview_panel.ts
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details_alerts_table.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details_alerts_table.test.tsx
index fec6a1efaa08f..ebea2481ab829 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details_alerts_table.test.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details_alerts_table.test.tsx
@@ -11,7 +11,6 @@ import { TestProviders } from '../../../../common/mock';
import { useExpandableFlyoutApi } from '@kbn/expandable-flyout';
import { CorrelationsDetailsAlertsTable } from './correlations_details_alerts_table';
import { usePaginatedAlerts } from '../hooks/use_paginated_alerts';
-import { CORRELATIONS_DETAILS_ALERT_PREVIEW_BUTTON_TEST_ID } from './test_ids';
import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features';
import { mockFlyoutApi } from '../../shared/mocks/mock_flyout_context';
import { mockContextValue } from '../../shared/mocks/mock_context';
@@ -94,9 +93,7 @@ describe('CorrelationsDetailsAlertsTable', () => {
expect(getByTestId(`${TEST_ID}InvestigateInTimeline`)).toBeInTheDocument();
expect(getByTestId(`${TEST_ID}Table`)).toBeInTheDocument();
- expect(
- queryByTestId(CORRELATIONS_DETAILS_ALERT_PREVIEW_BUTTON_TEST_ID)
- ).not.toBeInTheDocument();
+ expect(queryByTestId(`${TEST_ID}AlertPreviewButton`)).not.toBeInTheDocument();
expect(jest.mocked(usePaginatedAlerts)).toHaveBeenCalled();
@@ -116,9 +113,9 @@ describe('CorrelationsDetailsAlertsTable', () => {
});
expect(getByTestId(`${TEST_ID}InvestigateInTimeline`)).toBeInTheDocument();
- expect(getAllByTestId(CORRELATIONS_DETAILS_ALERT_PREVIEW_BUTTON_TEST_ID).length).toBe(2);
+ expect(getAllByTestId(`${TEST_ID}AlertPreviewButton`).length).toBe(2);
- getAllByTestId(CORRELATIONS_DETAILS_ALERT_PREVIEW_BUTTON_TEST_ID)[0].click();
+ getAllByTestId(`${TEST_ID}AlertPreviewButton`)[0].click();
expect(mockFlyoutApi.openPreviewPanel).toHaveBeenCalledWith({
id: DocumentDetailsPreviewPanelKey,
params: {
diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details_alerts_table.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details_alerts_table.tsx
index 5253aa1cd272b..cf55e02d9d478 100644
--- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details_alerts_table.tsx
+++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/correlations_details_alerts_table.tsx
@@ -15,7 +15,6 @@ import { ALERT_REASON, ALERT_RULE_NAME } from '@kbn/rule-data-utils';
import { FormattedMessage } from '@kbn/i18n-react';
import { i18n } from '@kbn/i18n';
import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features';
-import { CORRELATIONS_DETAILS_ALERT_PREVIEW_BUTTON_TEST_ID } from './test_ids';
import { CellTooltipWrapper } from '../../shared/components/cell_tooltip_wrapper';
import type { DataProvider } from '../../../../../common/types';
import { SeverityBadge } from '../../../../common/components/severity_badge';
@@ -133,7 +132,7 @@ export const CorrelationsDetailsAlertsTable: FC
),
@@ -210,7 +209,7 @@ export const CorrelationsDetailsAlertsTable: FC {
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_HOST_DETAILS_LINK).should(
+ 'contain.text',
+ 'siem-kibana'
+ );
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_HOST_DETAILS_LINK).click();
+
+ cy.get(PREVIEW_SECTION).should('exist');
+ cy.get(PREVIEW_BANNER).should('have.text', 'Preview host details');
+ cy.get(HOST_PANEL_HEADER).should('exist');
+ cy.get(HOST_PREVIEW_PANEL_FOOTER).should('exist');
+
+ cy.log('click on footer link');
+
+ cy.get(OPEN_HOST_FLYOUT_LINK).click();
+ cy.get(HOST_PANEL_HEADER).should('exist');
+ cy.get(PREVIEW_SECTION).should('not.exist');
+ cy.get(HOST_PREVIEW_PANEL_FOOTER).should('not.exist');
+ });
+
+ // github.com/elastic/security-team/issues/9933
+ // Enable when feature flag 'entityAlertPreviewEnabled' is enabled
+ it.skip('should open user preview when click on user details title', () => {
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_USER_DETAILS_LINK).should('contain.text', 'test');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_USER_DETAILS_LINK).click();
+
+ cy.get(PREVIEW_SECTION).should('exist');
+ cy.get(PREVIEW_BANNER).should('have.text', 'Preview user details');
+ cy.get(USER_PANEL_HEADER).should('exist');
+ cy.get(USER_PREVIEW_PANEL_FOOTER).should('exist');
+
+ cy.log('click on footer link');
+
+ cy.get(OPEN_USER_FLYOUT_LINK).click();
+ cy.get(USER_PANEL_HEADER).should('exist');
+ cy.get(PREVIEW_SECTION).should('not.exist');
+ cy.get(USER_PREVIEW_PANEL_FOOTER).should('not.exist');
+ });
}
);
diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_prevalence_tab.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_prevalence_tab.cy.ts
index f3bed7fab6b81..813c4f2c1229a 100644
--- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_prevalence_tab.cy.ts
+++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_left_panel_prevalence_tab.cy.ts
@@ -19,7 +19,23 @@ import {
DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_HOST_PREVALENCE_CELL,
DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_USER_PREVALENCE_CELL,
DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_DATE_PICKER,
+ DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_HOST_CELL,
+ DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_USER_CELL,
} from '../../../../screens/expandable_flyout/alert_details_left_panel_prevalence_tab';
+import {
+ HOST_PANEL_HEADER,
+ HOST_PREVIEW_PANEL_FOOTER,
+ OPEN_HOST_FLYOUT_LINK,
+} from '../../../../screens/hosts/flyout_host_panel';
+import {
+ USER_PANEL_HEADER,
+ USER_PREVIEW_PANEL_FOOTER,
+ OPEN_USER_FLYOUT_LINK,
+} from '../../../../screens/users/flyout_user_panel';
+import {
+ PREVIEW_SECTION,
+ PREVIEW_BANNER,
+} from '../../../../screens/expandable_flyout/alert_details_preview_panel';
import { deleteAlertsAndRules } from '../../../../tasks/api_calls/common';
import { login } from '../../../../tasks/login';
import { visit } from '../../../../tasks/navigation';
@@ -83,5 +99,41 @@ describe(
100
);
});
+
+ // github.com/elastic/security-team/issues/9933
+ // Enable when feature flag 'entityAlertPreviewEnabled' is enabled
+ it.skip('should open host preview when click on host details title', () => {
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_HOST_CELL).click();
+
+ cy.get(PREVIEW_SECTION).should('exist');
+ cy.get(PREVIEW_BANNER).should('have.text', 'Preview host details');
+ cy.get(HOST_PANEL_HEADER).should('exist');
+ cy.get(HOST_PREVIEW_PANEL_FOOTER).should('exist');
+
+ cy.log('should open host flyout when click on footer link');
+
+ cy.get(OPEN_HOST_FLYOUT_LINK).click();
+ cy.get(HOST_PANEL_HEADER).should('exist');
+ cy.get(PREVIEW_SECTION).should('not.exist');
+ cy.get(HOST_PREVIEW_PANEL_FOOTER).should('not.exist');
+ });
+
+ // github.com/elastic/security-team/issues/9933
+ // Enable when feature flag 'entityAlertPreviewEnabled' is enabled
+ it.skip('should open user preview when click on user details title', () => {
+ cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_USER_CELL).click();
+
+ cy.get(PREVIEW_SECTION).should('exist');
+ cy.get(PREVIEW_BANNER).should('have.text', 'Preview user details');
+ cy.get(USER_PANEL_HEADER).should('exist');
+ cy.get(USER_PREVIEW_PANEL_FOOTER).should('exist');
+
+ cy.log('should open host flyout when click on footer link');
+
+ cy.get(OPEN_USER_FLYOUT_LINK).click();
+ cy.get(USER_PANEL_HEADER).should('exist');
+ cy.get(PREVIEW_SECTION).should('not.exist');
+ cy.get(HOST_PREVIEW_PANEL_FOOTER).should('not.exist');
+ });
}
);
diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_preview_panel.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_preview_panel.cy.ts
new file mode 100644
index 0000000000000..c000b06ff1016
--- /dev/null
+++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_preview_panel.cy.ts
@@ -0,0 +1,175 @@
+/*
+ * 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 { openInsightsTab } from '../../../../tasks/expandable_flyout/alert_details_left_panel';
+import { expandAlertAtIndexExpandableFlyout } from '../../../../tasks/expandable_flyout/common';
+import { deleteAlertsAndRules } from '../../../../tasks/api_calls/common';
+import { login } from '../../../../tasks/login';
+import { visit } from '../../../../tasks/navigation';
+import { createRule } from '../../../../tasks/api_calls/rules';
+import { getNewRule } from '../../../../objects/rule';
+import { ALERTS_URL } from '../../../../urls/navigation';
+import { waitForAlertsToPopulate } from '../../../../tasks/create_new_rule';
+import {
+ CORRELATIONS_ANCESTRY_SECTION_TABLE,
+ CORRELATIONS_SESSION_SECTION_TABLE,
+ CORRELATIONS_SOURCE_SECTION_TABLE,
+} from '../../../../screens/expandable_flyout/alert_details_left_panel_correlations_tab';
+import {
+ openCorrelationsTab,
+ clickExpandFromRelatedBySession,
+ clickExpandFromRelatedByAncestry,
+ clickExpandFromRelatedBySource,
+} from '../../../../tasks/expandable_flyout/alert_details_left_panel_correlations_tab';
+import {
+ closePreview,
+ goToPreviousPreview,
+ openNewFlyout,
+} from '../../../../tasks/expandable_flyout/alert_details_preview_panel';
+import {
+ DOCUMENT_DETAILS_FLYOUT_HEADER_LINK_ICON,
+ DOCUMENT_DETAILS_FLYOUT_HEADER_TITLE,
+ DOCUMENT_DETAILS_FLYOUT_FOOTER,
+ DOCUMENT_DETAILS_FLYOUT_FOOTER_TAKE_ACTION_BUTTON,
+} from '../../../../screens/expandable_flyout/alert_details_right_panel';
+import {
+ PREVIEW_SECTION,
+ PREVIEW_BANNER,
+ DOCUMENT_DETAILS_FLYOUT_PREVIEW_FOOTER,
+ DOCUMENT_DETAILS_FLYOUT_PREVIEW_FOOTER_LINK,
+ PREVIEW_BACK_BUTTON,
+ PREVIEW_CLOSE_BUTTON,
+} from '../../../../screens/expandable_flyout/alert_details_preview_panel';
+import {
+ expandDocumentDetailsExpandableFlyoutLeftSection,
+ openJsonTab,
+ openTableTab,
+} from '../../../../tasks/expandable_flyout/alert_details_right_panel';
+
+// github.com/elastic/security-team/issues/9933
+// Enable when feature flag 'entityAlertPreviewEnabled' is enabled
+describe.skip(
+ 'Opening alert previews from alert details flyout',
+ { tags: ['@ess', '@serverless'] },
+ () => {
+ const rule = getNewRule();
+
+ beforeEach(() => {
+ deleteAlertsAndRules();
+ login();
+ createRule(rule);
+ visit(ALERTS_URL);
+ waitForAlertsToPopulate();
+ expandAlertAtIndexExpandableFlyout();
+ expandDocumentDetailsExpandableFlyoutLeftSection();
+ openInsightsTab();
+ openCorrelationsTab();
+ });
+
+ it('should render alert preview', () => {
+ cy.log('related alerts by source');
+ cy.get(CORRELATIONS_SOURCE_SECTION_TABLE).should('exist');
+ clickExpandFromRelatedBySource();
+
+ cy.log('Verify preview section is visible');
+ cy.get(PREVIEW_SECTION).should('exist');
+ cy.get(PREVIEW_BANNER).should('have.text', 'Preview alert details');
+ cy.get(PREVIEW_BACK_BUTTON).should('exist');
+ cy.get(PREVIEW_CLOSE_BUTTON).should('exist');
+
+ cy.log('Verify title and main sections are rendered');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_TITLE).eq(1).should('have.text', rule.name);
+ cy.get(DOCUMENT_DETAILS_FLYOUT_HEADER_LINK_ICON).should('exist');
+
+ cy.log('Verify the open full alert detail footer is visible on all tabs');
+
+ cy.get(DOCUMENT_DETAILS_FLYOUT_PREVIEW_FOOTER).should('be.visible');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_PREVIEW_FOOTER_LINK).should('be.visible');
+
+ openTableTab(1);
+ cy.get(DOCUMENT_DETAILS_FLYOUT_PREVIEW_FOOTER).should('be.visible');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_PREVIEW_FOOTER_LINK).should('be.visible');
+
+ openJsonTab(1);
+ cy.get(DOCUMENT_DETAILS_FLYOUT_PREVIEW_FOOTER).should('be.visible');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_PREVIEW_FOOTER_LINK).should('be.visible');
+ });
+
+ it('should close previews when close button is clicked', () => {
+ cy.log('open alert preview from related alerts by session');
+ cy.get(CORRELATIONS_SESSION_SECTION_TABLE).should('exist');
+ clickExpandFromRelatedBySession();
+
+ cy.log('Verify preview section is visible');
+
+ cy.get(PREVIEW_SECTION).should('exist');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_PREVIEW_FOOTER).should('be.visible');
+
+ // TO-DO: enable when we can have multiple alerts in correlations
+ // cy.log('open another alert ');
+ // clickExpandFromRelatedBySession(1);
+
+ // cy.get(PREVIEW_SECTION).should('exist');
+ // cy.get(DOCUMENT_DETAILS_FLYOUT_PREVIEW_FOOTER).should('be.visible');
+
+ cy.log('click close button');
+
+ closePreview();
+ cy.get(PREVIEW_SECTION).should('not.exist');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_PREVIEW_FOOTER).should('not.exist');
+ });
+
+ // TO-DO: enable when we can have multiple alerts in correlations
+ it('should go to previous previews when back button is clicked', () => {
+ cy.log('open alert preview from related alerts by session');
+ cy.get(CORRELATIONS_SESSION_SECTION_TABLE).should('exist');
+ clickExpandFromRelatedBySession();
+
+ cy.log('Verify preview section is visible');
+
+ cy.get(PREVIEW_SECTION).should('exist');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_PREVIEW_FOOTER).should('be.visible');
+
+ // TO-DO: enable when we can have multiple alerts in correlations
+ // cy.log('open another alert ');
+ // clickExpandFromRelatedBySession(1);
+
+ // cy.get(PREVIEW_SECTION).should('exist');
+ // cy.get(DOCUMENT_DETAILS_FLYOUT_PREVIEW_FOOTER).should('be.visible');
+
+ // cy.log('click back button once');
+
+ // goToPreviousPreview();
+ // cy.get(PREVIEW_SECTION).should('exist');
+ // cy.get(DOCUMENT_DETAILS_FLYOUT_PREVIEW_FOOTER).should('be.visible');
+
+ cy.log('click back button again');
+ goToPreviousPreview();
+ cy.get(PREVIEW_SECTION).should('not.exist');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_PREVIEW_FOOTER).should('not.exist');
+ });
+
+ it('should open a new flyout when footer link is clicked', () => {
+ cy.log('open alert preview from related alerts by ancestry');
+ cy.get(CORRELATIONS_ANCESTRY_SECTION_TABLE).should('exist');
+ clickExpandFromRelatedByAncestry();
+
+ cy.log('Verify preview section is visible');
+
+ cy.get(PREVIEW_SECTION).should('exist');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_PREVIEW_FOOTER).should('be.visible');
+
+ cy.log('Click footer link to open alert details flyout');
+ openNewFlyout();
+ cy.get(PREVIEW_SECTION).should('not.exist');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_PREVIEW_FOOTER).should('not.exist');
+
+ cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER).should('be.visible');
+ cy.get(DOCUMENT_DETAILS_FLYOUT_FOOTER_TAKE_ACTION_BUTTON).should('be.visible');
+ });
+ }
+);
diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_overview_tab.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_overview_tab.cy.ts
index c4a20c43c6c04..b9c44b4ad5f72 100644
--- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_overview_tab.cy.ts
+++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/expandable_flyout/alert_details_right_panel_overview_tab.cy.ts
@@ -43,6 +43,8 @@ import {
DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_RESPONSE_BUTTON,
DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_CORRELATIONS_VALUES_RELATED_ALERTS_BY_SAME_SOURCE_EVENT,
DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_ABOUT_SECTION_CONTENT,
+ DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HOST_OVERVIEW_LINK,
+ DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_USER_OVERVIEW_LINK,
} from '../../../../screens/expandable_flyout/alert_details_right_panel_overview_tab';
import {
navigateToCorrelationsDetails,
@@ -76,6 +78,20 @@ import {
import { DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_CORRELATIONS_BUTTON } from '../../../../screens/expandable_flyout/alert_details_left_panel_correlations_tab';
import { DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_THREAT_INTELLIGENCE_BUTTON } from '../../../../screens/expandable_flyout/alert_details_left_panel_threat_intelligence_tab';
import { DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_BUTTON } from '../../../../screens/expandable_flyout/alert_details_left_panel_prevalence_tab';
+import {
+ HOST_PANEL_HEADER,
+ HOST_PREVIEW_PANEL_FOOTER,
+ OPEN_HOST_FLYOUT_LINK,
+} from '../../../../screens/hosts/flyout_host_panel';
+import {
+ USER_PANEL_HEADER,
+ USER_PREVIEW_PANEL_FOOTER,
+ OPEN_USER_FLYOUT_LINK,
+} from '../../../../screens/users/flyout_user_panel';
+import {
+ PREVIEW_SECTION,
+ PREVIEW_BANNER,
+} from '../../../../screens/expandable_flyout/alert_details_preview_panel';
describe(
'Alert details expandable flyout right panel overview tab',
@@ -216,6 +232,15 @@ describe(
'contain.text',
'host.name'
);
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_TABLE_FIELD_CELL).should(
+ 'contain.text',
+ 'user.name'
+ );
+ });
+
+ // github.com/elastic/security-team/issues/9933
+ // Skip when feature flag 'entityAlertPreviewEnabled' is enabled
+ it('should open entities details when clicking host name and user name', () => {
const hostNameCell =
DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_TABLE_VALUE_CELL('siem-kibana');
cy.get(hostNameCell).and('have.text', 'siem-kibana');
@@ -225,10 +250,6 @@ describe(
collapseDocumentDetailsExpandableFlyoutLeftSection();
- cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_TABLE_FIELD_CELL).should(
- 'contain.text',
- 'user.name'
- );
const userNameCell =
DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_TABLE_VALUE_CELL('test');
cy.get(userNameCell).should('have.text', 'test');
@@ -236,6 +257,51 @@ describe(
cy.get(userNameCell).click();
cy.get(DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_USER_DETAILS).should('exist');
});
+
+ // github.com/elastic/security-team/issues/9933
+ // Enable when feature flag 'entityAlertPreviewEnabled' is enabled
+ it.skip('should open host preview when host name is clicked', () => {
+ toggleOverviewTabAboutSection();
+
+ cy.log('should open host preview when clicked on host name');
+
+ const hostNameCell =
+ DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_TABLE_VALUE_CELL('siem-kibana');
+ cy.get(hostNameCell).click();
+
+ cy.get(PREVIEW_SECTION).should('exist');
+ cy.get(PREVIEW_BANNER).should('have.text', 'Preview host details');
+ cy.get(HOST_PANEL_HEADER).should('exist');
+ cy.get(HOST_PREVIEW_PANEL_FOOTER).should('exist');
+
+ cy.log('should open host flyout when click on footer link');
+
+ cy.get(OPEN_HOST_FLYOUT_LINK).click();
+ cy.get(HOST_PANEL_HEADER).should('exist');
+ cy.get(PREVIEW_SECTION).should('not.exist');
+ cy.get(HOST_PREVIEW_PANEL_FOOTER).should('not.exist');
+ });
+
+ // github.com/elastic/security-team/issues/9933
+ // Enable when feature flag 'entityAlertPreviewEnabled' is enabled
+ it.skip('should open user preview when user name is clicked', () => {
+ toggleOverviewTabAboutSection();
+
+ const userNameCell =
+ DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_TABLE_VALUE_CELL('test');
+ cy.get(userNameCell).and('have.text', 'test');
+
+ cy.get(userNameCell).click();
+ cy.get(PREVIEW_SECTION).should('exist');
+ cy.get(PREVIEW_BANNER).should('have.text', 'Preview user details');
+ cy.get(USER_PANEL_HEADER).should('exist');
+ cy.get(USER_PREVIEW_PANEL_FOOTER).should('exist');
+
+ cy.get(OPEN_USER_FLYOUT_LINK).click();
+ cy.get(USER_PANEL_HEADER).should('exist');
+ cy.get(PREVIEW_SECTION).should('not.exist');
+ cy.get(USER_PREVIEW_PANEL_FOOTER).should('not.exist');
+ });
});
describe('insights section', () => {
@@ -262,6 +328,50 @@ describe(
.and('have.class', 'euiButtonGroupButton-isSelected');
});
+ // github.com/elastic/security-team/issues/9933
+ // Enable when feature flag 'entityAlertPreviewEnabled' is enabled
+ it.skip('open host preview when host name is clicked', () => {
+ toggleOverviewTabAboutSection();
+ toggleOverviewTabInvestigationSection();
+ toggleOverviewTabInsightsSection();
+
+ cy.log('should open host preview when clicked on host name');
+
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HOST_OVERVIEW_LINK).click();
+
+ cy.get(PREVIEW_SECTION).should('exist');
+ cy.get(PREVIEW_BANNER).should('have.text', 'Preview host details');
+ cy.get(HOST_PANEL_HEADER).should('exist');
+ cy.get(HOST_PREVIEW_PANEL_FOOTER).should('exist');
+
+ cy.log('should open host flyout when click on footer link');
+
+ cy.get(OPEN_HOST_FLYOUT_LINK).click();
+ cy.get(HOST_PANEL_HEADER).should('exist');
+ cy.get(PREVIEW_SECTION).should('not.exist');
+ cy.get(HOST_PREVIEW_PANEL_FOOTER).should('not.exist');
+ });
+
+ // github.com/elastic/security-team/issues/9933
+ // Enable when feature flag 'entityAlertPreviewEnabled' is enabled
+ it.skip('open user preview when user name is clicked', () => {
+ toggleOverviewTabAboutSection();
+ toggleOverviewTabInvestigationSection();
+ toggleOverviewTabInsightsSection();
+
+ cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_USER_OVERVIEW_LINK).click();
+
+ cy.get(PREVIEW_SECTION).should('exist');
+ cy.get(PREVIEW_BANNER).should('have.text', 'Preview user details');
+ cy.get(USER_PANEL_HEADER).should('exist');
+ cy.get(USER_PREVIEW_PANEL_FOOTER).should('exist');
+
+ cy.get(OPEN_USER_FLYOUT_LINK).click();
+ cy.get(USER_PANEL_HEADER).should('exist');
+ cy.get(PREVIEW_SECTION).should('not.exist');
+ cy.get(USER_PREVIEW_PANEL_FOOTER).should('not.exist');
+ });
+
it('should display threat intelligence section', () => {
toggleOverviewTabAboutSection();
toggleOverviewTabInvestigationSection();
diff --git a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_correlations_tab.ts b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_correlations_tab.ts
index 21f20f8679cdc..dc44deb2d5049 100644
--- a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_correlations_tab.ts
+++ b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_correlations_tab.ts
@@ -24,6 +24,10 @@ export const CORRELATIONS_ANCESTRY_SECTION_INVESTIGATE_IN_TIMELINE_BUTTON =
'securitySolutionFlyoutCorrelationsDetailsAlertsByAncestrySectionInvestigateInTimeline'
);
+export const CORRELATIONS_ANCESTRY_SECTION_PREVIEW_BUTTON = getDataTestSubjectSelector(
+ 'securitySolutionFlyoutCorrelationsDetailsAlertsByAncestrySectionAlertPreviewButton'
+);
+
export const CORRELATIONS_SOURCE_SECTION_TITLE = getDataTestSubjectSelector(
'securitySolutionFlyoutCorrelationsDetailsAlertsBySourceSectionTitleText'
);
@@ -37,6 +41,10 @@ export const CORRELATIONS_SOURCE_SECTION_INVESTIGATE_IN_TIMELINE_BUTTON =
'securitySolutionFlyoutCorrelationsDetailsAlertsBySourceSectionInvestigateInTimeline'
);
+export const CORRELATIONS_SOURCE_SECTION_PREVIEW_BUTTON = getDataTestSubjectSelector(
+ 'securitySolutionFlyoutCorrelationsDetailsAlertsBySourceSectionAlertPreviewButton'
+);
+
export const CORRELATIONS_SESSION_SECTION_TITLE = getDataTestSubjectSelector(
'securitySolutionFlyoutCorrelationsDetailsAlertsBySessionSectionTitleText'
);
@@ -50,6 +58,10 @@ export const CORRELATIONS_SESSION_SECTION_INVESTIGATE_IN_TIMELINE_BUTTON =
'securitySolutionFlyoutCorrelationsDetailsAlertsBySessionSectionInvestigateInTimeline'
);
+export const CORRELATIONS_SESSION_SECTION_PREVIEW_BUTTON = getDataTestSubjectSelector(
+ 'securitySolutionFlyoutCorrelationsDetailsAlertsBySessionSectionAlertPreviewButton'
+);
+
export const CORRELATIONS_CASES_SECTION_TITLE = getDataTestSubjectSelector(
'securitySolutionFlyoutCorrelationsDetailsCasesSectionTitleText'
);
diff --git a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_entities_tab.ts b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_entities_tab.ts
index 37424eeb935fa..fb7ca4fcb5556 100644
--- a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_entities_tab.ts
+++ b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_entities_tab.ts
@@ -13,11 +13,18 @@ export const DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_ENTITIES_BUTTON = getDataTestS
export const DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_USER_DETAILS_TITLE = getDataTestSubjectSelector(
'securitySolutionFlyoutUsersDetailsTitleText'
);
+export const DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_USER_DETAILS_LINK = getDataTestSubjectSelector(
+ 'securitySolutionFlyoutUsersDetailsTitleLink'
+);
export const DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_USER_DETAILS_RIGHT_SECTION =
getDataTestSubjectSelector('securitySolutionFlyoutUsersDetailsRightSection');
export const DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_USER_DETAILS = getDataTestSubjectSelector(
'securitySolutionFlyoutUsersDetailsContent'
);
+
+export const DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_HOST_DETAILS_LINK = getDataTestSubjectSelector(
+ 'securitySolutionFlyoutHostsDetailsTitleLink'
+);
export const DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_HOST_DETAILS_TITLE = getDataTestSubjectSelector(
'securitySolutionFlyoutHostsDetailsTitleText'
);
diff --git a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_prevalence_tab.ts b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_prevalence_tab.ts
index 4830ef2f28500..5fe3d1ef61338 100644
--- a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_prevalence_tab.ts
+++ b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_left_panel_prevalence_tab.ts
@@ -24,3 +24,8 @@ export const DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_HOST_PREVALEN
getDataTestSubjectSelector('securitySolutionFlyoutPrevalenceDetailsTableHostPrevalenceCell');
export const DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_USER_PREVALENCE_CELL =
getDataTestSubjectSelector('securitySolutionFlyoutPrevalenceDetailsTableUserPrevalenceCell');
+
+export const DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_HOST_CELL =
+ getDataTestSubjectSelector('securitySolutionFlyoutPrevalenceDetailsTableHostCell');
+export const DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_PREVALENCE_TABLE_USER_CELL =
+ getDataTestSubjectSelector('securitySolutionFlyoutPrevalenceDetailsTableUserCell');
diff --git a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_preview_panel.ts b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_preview_panel.ts
new file mode 100644
index 0000000000000..08326d56ef53b
--- /dev/null
+++ b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_preview_panel.ts
@@ -0,0 +1,27 @@
+/*
+ * 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 { getDataTestSubjectSelector } from '../../helpers/common';
+
+/* Preview Section */
+
+export const PREVIEW_SECTION = getDataTestSubjectSelector('previewSection');
+
+export const PREVIEW_BANNER = getDataTestSubjectSelector('previewSectionBannerText');
+
+export const PREVIEW_BACK_BUTTON = getDataTestSubjectSelector('previewSectionBackButton');
+
+export const PREVIEW_CLOSE_BUTTON = getDataTestSubjectSelector('previewSectionCloseButton');
+
+/* Preview Footer */
+
+export const DOCUMENT_DETAILS_FLYOUT_PREVIEW_FOOTER = getDataTestSubjectSelector(
+ 'securitySolutionFlyoutPreviewFooter'
+);
+export const DOCUMENT_DETAILS_FLYOUT_PREVIEW_FOOTER_LINK = getDataTestSubjectSelector(
+ 'securitySolutionFlyoutPreviewFooterLink'
+);
diff --git a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_right_panel_overview_tab.ts b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_right_panel_overview_tab.ts
index 33e625d1db89a..2dbadb730096e 100644
--- a/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_right_panel_overview_tab.ts
+++ b/x-pack/test/security_solution_cypress/cypress/screens/expandable_flyout/alert_details_right_panel_overview_tab.ts
@@ -66,6 +66,12 @@ export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_SECTION_CONTENT =
export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_INSIGHTS_ENTITIES_HEADER =
getDataTestSubjectSelector('securitySolutionFlyoutInsightsEntitiesTitleLink');
+export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HOST_OVERVIEW_LINK = getDataTestSubjectSelector(
+ 'securitySolutionFlyoutInsightsEntitiesHostOverviewLink'
+);
+export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_USER_OVERVIEW_LINK = getDataTestSubjectSelector(
+ 'securitySolutionFlyoutInsightsEntitiesUserOverviewLink'
+);
/* Insights Threat Intelligence */
diff --git a/x-pack/test/security_solution_cypress/cypress/screens/hosts/flyout_host_panel.ts b/x-pack/test/security_solution_cypress/cypress/screens/hosts/flyout_host_panel.ts
index 12f0256a24a34..e3173bd17d583 100644
--- a/x-pack/test/security_solution_cypress/cypress/screens/hosts/flyout_host_panel.ts
+++ b/x-pack/test/security_solution_cypress/cypress/screens/hosts/flyout_host_panel.ts
@@ -8,3 +8,5 @@
import { getDataTestSubjectSelector } from '../../helpers/common';
export const HOST_PANEL_HEADER = getDataTestSubjectSelector('host-panel-header');
+export const HOST_PREVIEW_PANEL_FOOTER = getDataTestSubjectSelector('host-preview-footer');
+export const OPEN_HOST_FLYOUT_LINK = getDataTestSubjectSelector('open-host-flyout');
diff --git a/x-pack/test/security_solution_cypress/cypress/screens/users/flyout_user_panel.ts b/x-pack/test/security_solution_cypress/cypress/screens/users/flyout_user_panel.ts
index 40507311d424d..66205566bde66 100644
--- a/x-pack/test/security_solution_cypress/cypress/screens/users/flyout_user_panel.ts
+++ b/x-pack/test/security_solution_cypress/cypress/screens/users/flyout_user_panel.ts
@@ -18,3 +18,6 @@ export const OKTA_MANAGED_DATA_TITLE = `${MANAGED_DATA_SECTION} ${getDataTestSub
export const ENTRA_MANAGED_DATA_TITLE = `${MANAGED_DATA_SECTION} ${getDataTestSubjectSelector(
'managed-user-accordion-userAssetEntraLeftSection'
)}`;
+
+export const USER_PREVIEW_PANEL_FOOTER = getDataTestSubjectSelector('user-preview-footer');
+export const OPEN_USER_FLYOUT_LINK = getDataTestSubjectSelector('open-user-flyout');
diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/expandable_flyout/alert_details_left_panel_correlations_tab.ts b/x-pack/test/security_solution_cypress/cypress/tasks/expandable_flyout/alert_details_left_panel_correlations_tab.ts
index a86f9a74b18d0..50736a5b7ab9e 100644
--- a/x-pack/test/security_solution_cypress/cypress/tasks/expandable_flyout/alert_details_left_panel_correlations_tab.ts
+++ b/x-pack/test/security_solution_cypress/cypress/tasks/expandable_flyout/alert_details_left_panel_correlations_tab.ts
@@ -10,6 +10,9 @@ import {
CORRELATIONS_SESSION_SECTION_INVESTIGATE_IN_TIMELINE_BUTTON,
CORRELATIONS_SOURCE_SECTION_INVESTIGATE_IN_TIMELINE_BUTTON,
DOCUMENT_DETAILS_FLYOUT_INSIGHTS_TAB_CORRELATIONS_BUTTON,
+ CORRELATIONS_ANCESTRY_SECTION_PREVIEW_BUTTON,
+ CORRELATIONS_SESSION_SECTION_PREVIEW_BUTTON,
+ CORRELATIONS_SOURCE_SECTION_PREVIEW_BUTTON,
} from '../../screens/expandable_flyout/alert_details_left_panel_correlations_tab';
/**
@@ -27,15 +30,36 @@ export const openTimelineFromRelatedSourceEvent = () => {
};
/**
- * Open timeline from the related by source event
+ * Click expand button from the related by source table
+ */
+export const clickExpandFromRelatedBySource = (index = 0) => {
+ cy.get(CORRELATIONS_SOURCE_SECTION_PREVIEW_BUTTON).eq(index).click();
+};
+
+/**
+ * Open timeline from the related by ancestry
*/
export const openTimelineFromRelatedByAncestry = () => {
cy.get(CORRELATIONS_ANCESTRY_SECTION_INVESTIGATE_IN_TIMELINE_BUTTON).click();
};
+/**
+ * Click expand button from the related by ancestry table
+ */
+export const clickExpandFromRelatedByAncestry = (index = 0) => {
+ cy.get(CORRELATIONS_ANCESTRY_SECTION_PREVIEW_BUTTON).eq(index).click();
+};
+
/**
* Open timeline from the related by source event
*/
export const openTimelineFromRelatedBySession = () => {
cy.get(CORRELATIONS_SESSION_SECTION_INVESTIGATE_IN_TIMELINE_BUTTON).click();
};
+
+/**
+ * Click expand button from the related by session table
+ */
+export const clickExpandFromRelatedBySession = (index = 0) => {
+ cy.get(CORRELATIONS_SESSION_SECTION_PREVIEW_BUTTON).eq(index).click();
+};
diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/expandable_flyout/alert_details_preview_panel.ts b/x-pack/test/security_solution_cypress/cypress/tasks/expandable_flyout/alert_details_preview_panel.ts
new file mode 100644
index 0000000000000..b3d20d27afbe9
--- /dev/null
+++ b/x-pack/test/security_solution_cypress/cypress/tasks/expandable_flyout/alert_details_preview_panel.ts
@@ -0,0 +1,33 @@
+/*
+ * 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 {
+ DOCUMENT_DETAILS_FLYOUT_PREVIEW_FOOTER_LINK,
+ PREVIEW_BACK_BUTTON,
+ PREVIEW_CLOSE_BUTTON,
+} from '../../screens/expandable_flyout/alert_details_preview_panel';
+
+/**
+ * Close preview panel
+ */
+export const closePreview = () => {
+ cy.get(PREVIEW_CLOSE_BUTTON).click();
+};
+
+/**
+ * Go to previous preview
+ */
+export const goToPreviousPreview = () => {
+ cy.get(PREVIEW_BACK_BUTTON).click();
+};
+
+/**
+ * Click link in footer to open document details flyout
+ */
+export const openNewFlyout = () => {
+ cy.get(DOCUMENT_DETAILS_FLYOUT_PREVIEW_FOOTER_LINK).click();
+};
diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/expandable_flyout/alert_details_right_panel.ts b/x-pack/test/security_solution_cypress/cypress/tasks/expandable_flyout/alert_details_right_panel.ts
index 3934b170f43c0..e5cd3a0264b33 100644
--- a/x-pack/test/security_solution_cypress/cypress/tasks/expandable_flyout/alert_details_right_panel.ts
+++ b/x-pack/test/security_solution_cypress/cypress/tasks/expandable_flyout/alert_details_right_panel.ts
@@ -42,15 +42,15 @@ export const collapseDocumentDetailsExpandableFlyoutLeftSection = () => {
/**
* Open the Table tab in the document details expandable flyout right section
*/
-export const openTableTab = () => {
- cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB).click();
+export const openTableTab = (index = 0) => {
+ cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB).eq(index).click();
};
/**
* Open the Json tab in the document details expandable flyout right section
*/
-export const openJsonTab = () => {
- cy.get(DOCUMENT_DETAILS_FLYOUT_JSON_TAB).click();
+export const openJsonTab = (index = 0) => {
+ cy.get(DOCUMENT_DETAILS_FLYOUT_JSON_TAB).eq(index).click();
};
/**