diff --git a/frontend/src/metabase/setup/selectors.ts b/frontend/src/metabase/setup/selectors.ts
index 467a7b2e5e13fbe80d4cde806303a3701d71210b..a320e5631d487f98d5ac5e5513e650dfb091f942 100644
--- a/frontend/src/metabase/setup/selectors.ts
+++ b/frontend/src/metabase/setup/selectors.ts
@@ -1,3 +1,5 @@
+import { createSelector } from "@reduxjs/toolkit";
+
 import { isEEBuild } from "metabase/lib/utils";
 import { getSetting } from "metabase/selectors/settings";
 import type {
@@ -88,39 +90,44 @@ export const getIsEmailConfigured = (state: State): boolean => {
   return getSetting(state, "email-configured?");
 };
 
-export const getSteps = (state: State) => {
-  const usageReason = getUsageReason(state);
-  const activeStep = getStep(state);
-  const tokenFeatures = getSetting(state, "token-features");
-
-  const isPaidPlan =
-    tokenFeatures && Object.values(tokenFeatures).some(value => value === true);
-  const hasAddedPaidPlanInPreviousStep = Boolean(state.setup.licenseToken);
-
-  const shouldShowDBConnectionStep = usageReason !== "embedding";
-  const shouldShowLicenseStep =
-    isEEBuild() && (!isPaidPlan || hasAddedPaidPlanInPreviousStep);
-
-  const steps: { key: SetupStep; isActiveStep: boolean }[] = [
-    { key: "welcome" as const },
-    { key: "language" as const },
-    { key: "user_info" as const },
-    { key: "usage_question" as const },
-    shouldShowDBConnectionStep && {
-      key: "db_connection" as const,
-    },
-    shouldShowLicenseStep && { key: "license_token" as const },
-    { key: "data_usage" as const },
-    { key: "completed" as const },
-  ]
-    .filter(isNotFalsy)
-    .map(({ key }) => ({
-      key,
-      isActiveStep: activeStep === key,
-    }));
-
-  return steps;
-};
+export const getSteps = createSelector(
+  [
+    (state: State) => getUsageReason(state),
+    (state: State) => getStep(state),
+    (state: State) => getSetting(state, "token-features"),
+    (state: State) => state.setup.licenseToken,
+  ],
+  (usageReason, activeStep, tokenFeatures, licenseToken) => {
+    const isPaidPlan =
+      tokenFeatures &&
+      Object.values(tokenFeatures).some(value => value === true);
+    const hasAddedPaidPlanInPreviousStep = Boolean(licenseToken);
+
+    const shouldShowDBConnectionStep = usageReason !== "embedding";
+    const shouldShowLicenseStep =
+      isEEBuild() && (!isPaidPlan || hasAddedPaidPlanInPreviousStep);
+
+    const steps: { key: SetupStep; isActiveStep: boolean }[] = [
+      { key: "welcome" as const },
+      { key: "language" as const },
+      { key: "user_info" as const },
+      { key: "usage_question" as const },
+      shouldShowDBConnectionStep && {
+        key: "db_connection" as const,
+      },
+      shouldShowLicenseStep && { key: "license_token" as const },
+      { key: "data_usage" as const },
+      { key: "completed" as const },
+    ]
+      .filter(isNotFalsy)
+      .map(({ key }) => ({
+        key,
+        isActiveStep: activeStep === key,
+      }));
+
+    return steps;
+  },
+);
 
 export const getNextStep = (state: State) => {
   const steps = getSteps(state);
diff --git a/frontend/src/metabase/setup/tests/common.unit.spec.tsx b/frontend/src/metabase/setup/tests/common.unit.spec.tsx
index 6804f4a12cafa6b62dfae99f80720bde02f55b75..3413894f66be8b5ee5e553f18a501a98f0775da2 100644
--- a/frontend/src/metabase/setup/tests/common.unit.spec.tsx
+++ b/frontend/src/metabase/setup/tests/common.unit.spec.tsx
@@ -139,7 +139,7 @@ describe("setup (OSS)", () => {
       await selectUsageReason("embedding");
       await clickNextStep();
 
-      await screen.getByText("Finish").click();
+      await userEvent.click(screen.getByText("Finish"));
 
       expect(await getLastSettingsPutPayload()).toEqual({
         "embedding-homepage": "visible",
@@ -158,9 +158,9 @@ describe("setup (OSS)", () => {
       await selectUsageReason("self-service-analytics");
       await clickNextStep();
 
-      await screen.getByText("I'll add my data later").click();
+      await userEvent.click(screen.getByText("I'll add my data later"));
 
-      await screen.getByText("Finish").click();
+      await userEvent.click(screen.getByText("Finish"));
 
       const flags = await getLastSettingsPutPayload();
 
@@ -186,7 +186,7 @@ describe("setup (OSS)", () => {
       await selectUsageReason("embedding");
       await clickNextStep();
 
-      await screen.getByText("Finish").click();
+      await userEvent.click(screen.getByText("Finish"));
 
       const flags = await getLastSettingsPutPayload();
 
diff --git a/frontend/src/metabase/setup/tests/enterprise.unit.spec.tsx b/frontend/src/metabase/setup/tests/enterprise.unit.spec.tsx
index 73048b8ee6308caf15cd77eeec799989558635c7..688f21a435a956b2774fd0f43ce859cfcca80cd5 100644
--- a/frontend/src/metabase/setup/tests/enterprise.unit.spec.tsx
+++ b/frontend/src/metabase/setup/tests/enterprise.unit.spec.tsx
@@ -180,7 +180,7 @@ const errMsg = () => screen.findByText(/This token doesn’t seem to be valid/);
 const submitBtn = () => screen.findByRole("button", { name: "Activate" });
 
 const submit = async () => {
-  (await submitBtn()).click();
+  await userEvent.click(await submitBtn());
 
   const settingEndpoint = "path:/api/setting/premium-embedding-token";
   await waitFor(() => expect(fetchMock.done(settingEndpoint)).toBe(true));
diff --git a/frontend/src/metabase/setup/tests/premium.unit.spec.tsx b/frontend/src/metabase/setup/tests/premium.unit.spec.tsx
index 589bf528ce3adc03fcdf033b0b4252b01cf70173..70fc894efc692963dbc36f153fb9f05ffea2685c 100644
--- a/frontend/src/metabase/setup/tests/premium.unit.spec.tsx
+++ b/frontend/src/metabase/setup/tests/premium.unit.spec.tsx
@@ -1,6 +1,7 @@
 /* eslint jest/expect-expect: ["error", { "assertFunctionNames": ["expect", "expectSectionToHaveLabel", "expectSectionsToHaveLabelsInOrder"] }] */
 
 import { screen } from "@testing-library/react";
+import userEvent from "@testing-library/user-event";
 
 import { createMockTokenFeatures } from "metabase-types/api/mocks";
 
@@ -55,7 +56,7 @@ describe("setup (EE, hosting and embedding feature)", () => {
     await selectUsageReason("embedding");
     await clickNextStep();
 
-    screen.getByText("Finish").click();
+    await userEvent.click(screen.getByText("Finish"));
 
     expect(await getLastSettingsPutPayload()).toEqual({
       "embedding-homepage": "visible",
diff --git a/frontend/src/metabase/setup/tests/setup.tsx b/frontend/src/metabase/setup/tests/setup.tsx
index d9c7674fa02bc07b0d6fadd581c4b182d3946e9c..c23f225ae90f812606093499bb2fb84efef8952b 100644
--- a/frontend/src/metabase/setup/tests/setup.tsx
+++ b/frontend/src/metabase/setup/tests/setup.tsx
@@ -7,6 +7,7 @@ import {
   setupPropertiesEndpoints,
   setupSettingsEndpoints,
 } from "__support__/server-mocks";
+import { mockSettings } from "__support__/settings";
 import { renderWithProviders, screen } from "__support__/ui";
 import type {
   SettingDefinition,
@@ -18,7 +19,6 @@ import {
   createMockTokenFeatures,
 } from "metabase-types/api/mocks";
 import {
-  createMockSettingsState,
   createMockSetupState,
   createMockState,
 } from "metabase-types/store/mocks";
@@ -45,10 +45,12 @@ export async function setup({
     setup: createMockSetupState({
       step: "welcome",
     }),
-    settings: createMockSettingsState({
-      "token-features": tokenFeatures,
-      "available-locales": [["en", "English"]],
-    }),
+    settings: mockSettings(
+      createMockSettings({
+        "token-features": tokenFeatures,
+        "available-locales": [["en", "English"]],
+      }),
+    ),
   });
 
   if (hasEnterprisePlugins) {