diff --git a/x-pack/legacy/plugins/siem/cypress/integration/signal_detection_rules.spec.ts b/x-pack/legacy/plugins/siem/cypress/integration/signal_detection_rules.spec.ts
new file mode 100644
index 0000000000000..f2ed9d48daaf6
--- /dev/null
+++ b/x-pack/legacy/plugins/siem/cypress/integration/signal_detection_rules.spec.ts
@@ -0,0 +1,50 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License;
+ * you may not use this file except in compliance with the Elastic License.
+ */
+
+import { ELASTIC_RULES_BTN, RULES_TABLE, RULES_ROW } from '../screens/signal_detection_rules';
+
+import {
+ changeToThreeHundredRowsPerPage,
+ loadPrebuiltDetectionRules,
+ waitForLoadElasticPrebuiltDetectionRulesTableToBeLoaded,
+ waitForPrebuiltDetectionRulesToBeLoaded,
+ waitForRulesToBeLoaded,
+} from '../tasks/signal_detection_rules';
+import {
+ goToManageSignalDetectionRules,
+ waitForSignalsIndexToBeCreated,
+ waitForSignalsPanelToBeLoaded,
+} from '../tasks/detections';
+import { loginAndWaitForPageWithoutDateRange } from '../tasks/login';
+
+import { DETECTIONS } from '../urls/navigation';
+
+describe('Signal detection rules', () => {
+ before(() => {
+ loginAndWaitForPageWithoutDateRange(DETECTIONS);
+ });
+ it('Loads prebuilt rules', () => {
+ waitForSignalsPanelToBeLoaded();
+ waitForSignalsIndexToBeCreated();
+ goToManageSignalDetectionRules();
+ waitForLoadElasticPrebuiltDetectionRulesTableToBeLoaded();
+ loadPrebuiltDetectionRules();
+ waitForPrebuiltDetectionRulesToBeLoaded();
+
+ const expectedElasticRulesBtnText = 'Elastic rules (92)';
+ cy.get(ELASTIC_RULES_BTN)
+ .invoke('text')
+ .should('eql', expectedElasticRulesBtnText);
+
+ changeToThreeHundredRowsPerPage();
+ waitForRulesToBeLoaded();
+
+ const expectedNumberOfRules = 92;
+ cy.get(RULES_TABLE).then($table => {
+ cy.wrap($table.find(RULES_ROW).length).should('eql', expectedNumberOfRules);
+ });
+ });
+});
diff --git a/x-pack/legacy/plugins/siem/cypress/screens/detections.ts b/x-pack/legacy/plugins/siem/cypress/screens/detections.ts
new file mode 100644
index 0000000000000..8089b028a10d4
--- /dev/null
+++ b/x-pack/legacy/plugins/siem/cypress/screens/detections.ts
@@ -0,0 +1,9 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License;
+ * you may not use this file except in compliance with the Elastic License.
+ */
+
+export const LOADING_SIGNALS_PANEL = '[data-test-subj="loading-signals-panel"]';
+
+export const MANAGE_SIGNAL_DETECTION_RULES_BTN = '[data-test-subj="manage-signal-detection-rules"]';
diff --git a/x-pack/legacy/plugins/siem/cypress/screens/signal_detection_rules.ts b/x-pack/legacy/plugins/siem/cypress/screens/signal_detection_rules.ts
new file mode 100644
index 0000000000000..bfaa86e83f301
--- /dev/null
+++ b/x-pack/legacy/plugins/siem/cypress/screens/signal_detection_rules.ts
@@ -0,0 +1,22 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License;
+ * you may not use this file except in compliance with the Elastic License.
+ */
+
+export const ELASTIC_RULES_BTN = '[data-test-subj="show-elastic-rules-filter-button"]';
+
+export const LOAD_PREBUILT_RULES_BTN = '[data-test-subj="load-prebuilt-rules"]';
+
+export const LOADING_INITIAL_PREBUILT_RULES_TABLE =
+ '[data-test-subj="initialLoadingPanelAllRulesTable"]';
+
+export const LOADING_SPINNER = '[data-test-subj="loading-spinner"]';
+
+export const PAGINATION_POPOVER_BTN = '[data-test-subj="tablePaginationPopoverButton"]';
+
+export const RULES_TABLE = '[data-test-subj="rules-table"]';
+
+export const RULES_ROW = '.euiTableRow';
+
+export const THREE_HUNDRED_ROWS = '[data-test-subj="tablePagination-300-rows"]';
diff --git a/x-pack/legacy/plugins/siem/cypress/tasks/detections.ts b/x-pack/legacy/plugins/siem/cypress/tasks/detections.ts
new file mode 100644
index 0000000000000..4a0a565a74e27
--- /dev/null
+++ b/x-pack/legacy/plugins/siem/cypress/tasks/detections.ts
@@ -0,0 +1,28 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License;
+ * you may not use this file except in compliance with the Elastic License.
+ */
+
+import { LOADING_SIGNALS_PANEL, MANAGE_SIGNAL_DETECTION_RULES_BTN } from '../screens/detections';
+
+export const goToManageSignalDetectionRules = () => {
+ cy.get(MANAGE_SIGNAL_DETECTION_RULES_BTN)
+ .should('exist')
+ .click({ force: true });
+};
+
+export const waitForSignalsIndexToBeCreated = () => {
+ cy.request({ url: '/api/detection_engine/index', retryOnStatusCodeFailure: true }).then(
+ response => {
+ if (response.status !== 200) {
+ cy.wait(7500);
+ }
+ }
+ );
+};
+
+export const waitForSignalsPanelToBeLoaded = () => {
+ cy.get(LOADING_SIGNALS_PANEL).should('exist');
+ cy.get(LOADING_SIGNALS_PANEL).should('not.exist');
+};
diff --git a/x-pack/legacy/plugins/siem/cypress/tasks/signal_detection_rules.ts b/x-pack/legacy/plugins/siem/cypress/tasks/signal_detection_rules.ts
new file mode 100644
index 0000000000000..cc0e4bce1035a
--- /dev/null
+++ b/x-pack/legacy/plugins/siem/cypress/tasks/signal_detection_rules.ts
@@ -0,0 +1,40 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License;
+ * you may not use this file except in compliance with the Elastic License.
+ */
+
+import {
+ LOAD_PREBUILT_RULES_BTN,
+ LOADING_INITIAL_PREBUILT_RULES_TABLE,
+ LOADING_SPINNER,
+ PAGINATION_POPOVER_BTN,
+ RULES_TABLE,
+ THREE_HUNDRED_ROWS,
+} from '../screens/signal_detection_rules';
+
+export const changeToThreeHundredRowsPerPage = () => {
+ cy.get(PAGINATION_POPOVER_BTN).click({ force: true });
+ cy.get(THREE_HUNDRED_ROWS).click();
+};
+
+export const loadPrebuiltDetectionRules = () => {
+ cy.get(LOAD_PREBUILT_RULES_BTN)
+ .should('exist')
+ .click({ force: true });
+};
+
+export const waitForLoadElasticPrebuiltDetectionRulesTableToBeLoaded = () => {
+ cy.get(LOADING_INITIAL_PREBUILT_RULES_TABLE).should('exist');
+ cy.get(LOADING_INITIAL_PREBUILT_RULES_TABLE).should('not.exist');
+};
+
+export const waitForPrebuiltDetectionRulesToBeLoaded = () => {
+ cy.get(LOAD_PREBUILT_RULES_BTN).should('not.exist');
+ cy.get(RULES_TABLE).should('exist');
+};
+
+export const waitForRulesToBeLoaded = () => {
+ cy.get(LOADING_SPINNER).should('exist');
+ cy.get(LOADING_SPINNER).should('not.exist');
+};
diff --git a/x-pack/legacy/plugins/siem/cypress/urls/navigation.ts b/x-pack/legacy/plugins/siem/cypress/urls/navigation.ts
index 8fdc939e7ee51..5e65e5aa34c18 100644
--- a/x-pack/legacy/plugins/siem/cypress/urls/navigation.ts
+++ b/x-pack/legacy/plugins/siem/cypress/urls/navigation.ts
@@ -4,6 +4,7 @@
* you may not use this file except in compliance with the Elastic License.
*/
+export const DETECTIONS = 'app/siem#/detections';
export const HOSTS_PAGE = '/app/siem#/hosts/allHosts';
export const HOSTS_PAGE_TAB_URLS = {
allHosts: '/app/siem#/hosts/allHosts',
diff --git a/x-pack/legacy/plugins/siem/public/components/loader/__snapshots__/index.test.tsx.snap b/x-pack/legacy/plugins/siem/public/components/loader/__snapshots__/index.test.tsx.snap
index 0885f15b1efba..ad2d57b948ba0 100644
--- a/x-pack/legacy/plugins/siem/public/components/loader/__snapshots__/index.test.tsx.snap
+++ b/x-pack/legacy/plugins/siem/public/components/loader/__snapshots__/index.test.tsx.snap
@@ -16,6 +16,7 @@ exports[`rendering renders correctly 1`] = `
grow={false}
>
diff --git a/x-pack/legacy/plugins/siem/public/components/loader/index.tsx b/x-pack/legacy/plugins/siem/public/components/loader/index.tsx
index be2ce3dde951c..e78f148418588 100644
--- a/x-pack/legacy/plugins/siem/public/components/loader/index.tsx
+++ b/x-pack/legacy/plugins/siem/public/components/loader/index.tsx
@@ -62,7 +62,7 @@ export const Loader = React.memo(({ children, overlay, overlayBackg