From c7ccc0228032eaf12ac0a42591d93b13889c1311 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Aug 2026 10:10:06 +0200 Subject: [PATCH] Bump msw-storybook-addon from 2.0.7 to 3.0.0 (#69261) * Bump msw-storybook-addon from 2.0.7 to 3.0.0 Bumps [msw-storybook-addon](https://github.com/mswjs/msw-storybook-addon) from 2.0.7 to 3.0.0. - [Release notes](https://github.com/mswjs/msw-storybook-addon/releases) - [Commits](https://github.com/mswjs/msw-storybook-addon/compare/v2.0.7...v3.0.0) --- updated-dependencies: - dependency-name: msw-storybook-addon dependency-version: 3.0.0 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * Migrate configuration * Migrate stories from `paremters.msw.handlers` to `beforeEach` --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Grzegorz Zdunek --- package.json | 2 +- pnpm-lock.yaml | 16 +- web/.storybook/main.mts | 2 +- web/.storybook/preview.tsx | 58 +- .../wizards/AddAuthDeviceWizard.story.tsx | 57 +- .../GitHubConnectorEditor.story.tsx | 54 +- .../AuthConnectors/AuthConnectors.story.tsx | 59 +- .../src/BotInstances/BotInstances.story.tsx | 76 +- .../Dashboard/BotInstanceDashboard.story.tsx | 34 +- .../Details/BotInstanceDetails.story.tsx | 51 +- .../ConfigureAccess.story.tsx | 70 +- .../GitHubActionsK8s/ConnectGitHub.story.tsx | 42 +- .../GitHubActionsK8s.story.tsx | 20 +- .../KubernetesLabelsSelect.story.tsx | 24 +- .../src/Bots/Details/BotDetails.story.tsx | 742 +++++++++--------- .../src/Bots/Details/InstancesPanel.story.tsx | 18 +- .../src/Bots/Edit/EditDialog.story.tsx | 212 +++-- .../teleport/src/Console/Console.story.tsx | 32 +- .../CreateAppAccess/CreateAppAccess.story.tsx | 54 +- .../SetupAccess/SetupAccess.story.tsx | 50 +- .../SetupConnect/SetupConnect.story.tsx | 54 +- .../TestConnection/TestConnection.story.tsx | 207 ++--- .../AutoDeploy/AutoDeploy.story.tsx | 144 ++-- .../ManualDeploy/ManualDeploy.story.tsx | 28 +- .../EnrollRdsDatabase.story.tsx | 316 ++++---- .../SetupAccess/SetupAccess.story.tsx | 33 +- .../EnrollEKSCluster/Dialogs.story.tsx | 52 +- .../EnrollEksCluster.story.tsx | 224 +++--- .../SelfHosted/HelmChart/HelmChart.story.tsx | 103 ++- .../Overview/IaCIntegrationOverview.story.tsx | 294 ++++--- .../DiscoveryConfigSsm.story.tsx | 86 +- .../DownloadScript/DownloadScript.story.tsx | 105 ++- .../Shared/AwsAccount/AwsAccount.story.tsx | 36 +- .../ConfigureDiscoveryService.story.tsx | 40 +- .../src/Instances/Instances.story.tsx | 55 +- .../Enroll/AwsConsole/Access/Access.story.tsx | 488 ++++++------ .../IamIntegration/IamIntegration.story.tsx | 94 ++- .../status/AwsOidc/AwsOidcDashboard.story.tsx | 21 +- .../status/AwsOidc/Details/Details.story.tsx | 126 ++- .../status/AwsOidc/Tasks/Tasks.story.tsx | 248 +++--- .../status/AwsRa/AwsRaDashboard.story.tsx | 215 +++-- .../src/JoinTokens/JoinTokens.story.tsx | 20 +- .../ManagedUpdates/ManagedUpdates.story.tsx | 210 +++-- .../src/Notifications/Notification.story.tsx | 132 ++-- .../src/Roles/RoleEditor/RoleEditor.story.tsx | 121 ++- .../list/ListSessionRecordingsRoute.story.tsx | 89 ++- .../Users/UserAddEdit/UserAddEdit.story.tsx | 31 +- .../src/Users/UserDelete/UserDelete.story.tsx | 21 +- .../Users/UserDetails/UserDetails.story.tsx | 18 +- .../teleport/src/Users/Users.story.tsx | 28 +- .../WorkloadIdentities.story.tsx | 80 +- .../components/FormLogin/FormLogin.story.tsx | 16 +- .../lib/locks/ResourceLockAndUnlock.story.tsx | 80 +- .../lib/locks/ResourceLockIndicator.story.tsx | 88 +-- 54 files changed, 2569 insertions(+), 3007 deletions(-) diff --git a/package.json b/package.json index e88fb982cc6..33f40208ff7 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "jest": "^30.4.2", "jsdom-testing-mocks": "^1.16.0", "msw": "2.14.6", - "msw-storybook-addon": "^2.0.7", + "msw-storybook-addon": "^3.0.0", "oxfmt": "^0.56.0", "oxlint": "^1.71.0", "playwright": "^1.61.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b0bac983da6..90457f79b36 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -191,8 +191,8 @@ importers: specifier: 2.14.6 version: 2.14.6(@types/node@24.13.3)(typescript@7.0.2) msw-storybook-addon: - specifier: ^2.0.7 - version: 2.0.7(msw@2.14.6(@types/node@24.13.3)(typescript@7.0.2)) + specifier: ^3.0.0 + version: 3.0.0(msw@2.14.6(@types/node@24.13.3)(typescript@7.0.2))(storybook@10.4.6) oxfmt: specifier: ^0.56.0 version: 0.56.0 @@ -6665,10 +6665,12 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - msw-storybook-addon@2.0.7: - resolution: {integrity: sha512-TGmlxXy2TsaB6QcClVKRxqvay5f93xoLguHOihRFQ+gIEIyiyvcoQjkEeuOe7Y9qvddzGB1LyFomzPo9/EpnuQ==} + msw-storybook-addon@3.0.0: + resolution: {integrity: sha512-tyYmYAwSGcfFSHhrE5yzun/OXuVIkBGOt4YTsH5IR94N38F+hzZhvGqe5scu1ENJh/hOApI/8ZRQkWdFNFsKcw==} + hasBin: true peerDependencies: - msw: ^2.0.0 + msw: '>=2' + storybook: '>=9' msw@2.14.6: resolution: {integrity: sha512-ALe+N10S72cyx94cMcy3Zs4HhXCj35sgeAL4c+WTvKi0zWnbd8/h0lcFqv0mb2P+aSgAdD7p9HzvA0DiUPxsyg==} @@ -15328,10 +15330,10 @@ snapshots: ms@2.1.3: {} - msw-storybook-addon@2.0.7(msw@2.14.6(@types/node@24.13.3)(typescript@7.0.2)): + msw-storybook-addon@3.0.0(msw@2.14.6(@types/node@24.13.3)(typescript@7.0.2))(storybook@10.4.6): dependencies: - is-node-process: 1.2.0 msw: 2.14.6(@types/node@24.13.3)(typescript@7.0.2) + storybook: 10.4.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@storybook/react-vite@10.4.6)(@testing-library/dom@10.1.0)(@types/react@19.2.17)(prettier@3.8.1)(react@19.2.7) msw@2.14.6(@types/node@24.13.3)(typescript@7.0.2): dependencies: diff --git a/web/.storybook/main.mts b/web/.storybook/main.mts index 3e4fe887699..b3c44b2ee12 100644 --- a/web/.storybook/main.mts +++ b/web/.storybook/main.mts @@ -43,7 +43,7 @@ const config: StorybookConfig = { options: { builder: { viteConfigPath: 'web/.storybook/vite.config.mts' } }, }, staticDirs: ['public'], - addons: ['@storybook/addon-vitest'], + addons: ['@storybook/addon-vitest', 'msw-storybook-addon'], core: { allowedHosts: resolveAllowedHosts(), }, diff --git a/web/.storybook/preview.tsx b/web/.storybook/preview.tsx index 1da96390f0f..e326a4c5b78 100644 --- a/web/.storybook/preview.tsx +++ b/web/.storybook/preview.tsx @@ -25,7 +25,8 @@ import { import { Preview } from '@storybook/react-vite'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { http, HttpResponse } from 'msw'; -import { initialize, mswLoader } from 'msw-storybook-addon'; +import { mswLoader } from 'msw-storybook-addon/csf3'; +import { setupWorker } from 'msw/browser'; import { PropsWithChildren } from 'react'; import { sb } from 'storybook/test'; @@ -48,46 +49,9 @@ import { lightTheme as teletermLightTheme, } from '../packages/teleterm/src/ui/ThemeProvider/theme'; -initialize( - { - onUnhandledRequest(request, print) { - try { - // Ignores asset related http requests, otherwise - // it prints noisy warnings, hiding important ones. - const url = new URL(request.url); - if ( - url.pathname.startsWith('/sb-common-assets') || - url.pathname.startsWith('/index.json') || - url.pathname.startsWith('/.storybook') || - url.pathname.endsWith('.png') || - url.pathname.endsWith('.svg') || - url.pathname.endsWith('.css') || - url.pathname.endsWith('.yaml') - ) { - return; - } - } catch { - /* empty */ - } - - print.warning(); - }, - }, - [ - // we emit these for posthog events (ignores any error), - // and we don't ever mock them in stories. - http.post(cfg.api.captureUserEventPath, () => { - return HttpResponse.json({ message: 'ok' }); - }), - http.post(cfg.api.capturePreUserEventPath, () => { - return HttpResponse.json({ message: 'ok' }); - }), - ] -); - sb.mock(import('../packages/teleport/src/services/recordings/metadata.ts')); -history.init(); +history.init(null); Logger.init(new ConsoleService()); @@ -177,7 +141,21 @@ const preview: Preview = { }, argTypes: { userContext: { table: { disable: true } } }, loaders: [ - mswLoader, + mswLoader(async () => { + const worker = setupWorker( + // Global telemetry handlers. + http.post(cfg.api.captureUserEventPath, () => + HttpResponse.json({ message: 'ok' }) + ), + http.post(cfg.api.capturePreUserEventPath, () => + HttpResponse.json({ message: 'ok' }) + ) + ); + + await worker.start(); + + return worker; + }), () => { queryClient.clear(); }, diff --git a/web/packages/teleport/src/Account/ManageDevices/wizards/AddAuthDeviceWizard.story.tsx b/web/packages/teleport/src/Account/ManageDevices/wizards/AddAuthDeviceWizard.story.tsx index 57ec217fdc8..8c19f624edb 100644 --- a/web/packages/teleport/src/Account/ManageDevices/wizards/AddAuthDeviceWizard.story.tsx +++ b/web/packages/teleport/src/Account/ManageDevices/wizards/AddAuthDeviceWizard.story.tsx @@ -86,15 +86,13 @@ export function CreateMfaAppQrCodeLoading() { ); } -CreateMfaAppQrCodeLoading.parameters = { - msw: { - handlers: [ - http.post( - cfg.getMfaCreateRegistrationChallengeUrl('privilege-token'), - async () => await delay('infinite') - ), - ], - }, +CreateMfaAppQrCodeLoading.beforeEach = ({ msw }) => { + msw.use( + http.post( + cfg.getMfaCreateRegistrationChallengeUrl('privilege-token'), + async () => await delay('infinite') + ) + ); }; export function CreateAuthenticatorAppQrCodeFailed() { @@ -102,21 +100,17 @@ export function CreateAuthenticatorAppQrCodeFailed() { ); } -CreateAuthenticatorAppQrCodeFailed.parameters = { - msw: { - handlers: [ - http.post( - cfg.getMfaCreateRegistrationChallengeUrl('privilege-token'), - () => - HttpResponse.json( - { - error: { message: 'Whoops, something went wrong.' }, - }, - { status: 500 } - ) - ), - ], - }, +CreateAuthenticatorAppQrCodeFailed.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.getMfaCreateRegistrationChallengeUrl('privilege-token'), () => + HttpResponse.json( + { + error: { message: 'Whoops, something went wrong.' }, + }, + { status: 500 } + ) + ) + ); }; const dummyQrCode = @@ -127,15 +121,12 @@ export function CreateAuthenticatorApp() { ); } -CreateAuthenticatorApp.parameters = { - msw: { - handlers: [ - http.post( - cfg.getMfaCreateRegistrationChallengeUrl('privilege-token'), - () => HttpResponse.json({ totp: { qrCode: dummyQrCode } }) - ), - ], - }, +CreateAuthenticatorApp.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.getMfaCreateRegistrationChallengeUrl('privilege-token'), () => + HttpResponse.json({ totp: { qrCode: dummyQrCode } }) + ) + ); }; export function SavePasskey() { diff --git a/web/packages/teleport/src/AuthConnectors/AuthConnectorEditor/GitHubConnectorEditor.story.tsx b/web/packages/teleport/src/AuthConnectors/AuthConnectorEditor/GitHubConnectorEditor.story.tsx index 3a8622789b8..013441739b9 100644 --- a/web/packages/teleport/src/AuthConnectors/AuthConnectorEditor/GitHubConnectorEditor.story.tsx +++ b/web/packages/teleport/src/AuthConnectors/AuthConnectorEditor/GitHubConnectorEditor.story.tsx @@ -42,14 +42,12 @@ export function Loaded() { ); } -Loaded.parameters = { - msw: { - handlers: [ - http.get(cfg.getGithubConnectorUrl('github_connector'), () => - HttpResponse.json(connectors[0]) - ), - ], - }, +Loaded.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.getGithubConnectorUrl('github_connector'), () => + HttpResponse.json(connectors[0]) + ) + ); }; export function Processing() { @@ -65,15 +63,13 @@ export function Processing() { ); } -Processing.parameters = { - msw: { - handlers: [ - http.get( - cfg.getGithubConnectorUrl('github_connector'), - async () => await delay('infinite') - ), - ], - }, +Processing.beforeEach = ({ msw }) => { + msw.use( + http.get( + cfg.getGithubConnectorUrl('github_connector'), + async () => await delay('infinite') + ) + ); }; export function Failed() { @@ -89,17 +85,15 @@ export function Failed() { ); } -Failed.parameters = { - msw: { - handlers: [ - http.get(cfg.getGithubConnectorUrl('github_connector'), () => - HttpResponse.json( - { message: 'something went wrong' }, - { - status: 500, - } - ) - ), - ], - }, +Failed.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.getGithubConnectorUrl('github_connector'), () => + HttpResponse.json( + { message: 'something went wrong' }, + { + status: 500, + } + ) + ) + ); }; diff --git a/web/packages/teleport/src/AuthConnectors/AuthConnectors.story.tsx b/web/packages/teleport/src/AuthConnectors/AuthConnectors.story.tsx index 998f3e280ef..c1fc7f971a0 100644 --- a/web/packages/teleport/src/AuthConnectors/AuthConnectors.story.tsx +++ b/web/packages/teleport/src/AuthConnectors/AuthConnectors.story.tsx @@ -35,14 +35,12 @@ export function Loaded() { ); } -Loaded.parameters = { - msw: { - handlers: [ - http.get(cfg.getGithubConnectorsUrl(), () => - HttpResponse.json({ connectors: [connectors[0], connectors[1]] }) - ), - ], - }, +Loaded.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.getGithubConnectorsUrl(), () => + HttpResponse.json({ connectors: [connectors[0], connectors[1]] }) + ) + ); }; export function Processing() { @@ -52,15 +50,10 @@ export function Processing() { ); } -Processing.parameters = { - msw: { - handlers: [ - http.get( - cfg.getGithubConnectorsUrl(), - async () => await delay('infinite') - ), - ], - }, +Processing.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.getGithubConnectorsUrl(), async () => await delay('infinite')) + ); }; export function Empty() { @@ -70,12 +63,8 @@ export function Empty() { ); } -Empty.parameters = { - msw: { - handlers: [ - http.get(cfg.getGithubConnectorsUrl(), () => HttpResponse.json({})), - ], - }, +Empty.beforeEach = ({ msw }) => { + msw.use(http.get(cfg.getGithubConnectorsUrl(), () => HttpResponse.json({}))); }; export function Failed() { @@ -85,17 +74,15 @@ export function Failed() { ); } -Failed.parameters = { - msw: { - handlers: [ - http.get(cfg.getGithubConnectorsUrl(), () => - HttpResponse.json( - { message: 'something went wrong' }, - { - status: 500, - } - ) - ), - ], - }, +Failed.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.getGithubConnectorsUrl(), () => + HttpResponse.json( + { message: 'something went wrong' }, + { + status: 500, + } + ) + ) + ); }; diff --git a/web/packages/teleport/src/BotInstances/BotInstances.story.tsx b/web/packages/teleport/src/BotInstances/BotInstances.story.tsx index 53dc9495e0e..b5c7341d57b 100644 --- a/web/packages/teleport/src/BotInstances/BotInstances.story.tsx +++ b/web/packages/teleport/src/BotInstances/BotInstances.story.tsx @@ -96,34 +96,28 @@ const listBotInstances = { }; export const Happy: Story = { - parameters: { - msw: { - handlers: [ - listBotInstancesSuccess(listBotInstances, 'v1'), - listBotInstancesSuccess(listBotInstances, 'v2'), - getBotInstanceSuccess(), - getBotInstanceMetricsSuccess(), - ], - }, + beforeEach({ msw }) { + msw.use( + listBotInstancesSuccess(listBotInstances, 'v1'), + listBotInstancesSuccess(listBotInstances, 'v2'), + getBotInstanceSuccess(), + getBotInstanceMetricsSuccess() + ); }, }; export const ErrorLoadingList: Story = { - parameters: { - msw: { - handlers: [ - listBotInstancesError(500, 'something went wrong'), - getBotInstanceMetricsSuccess(), - ], - }, + beforeEach({ msw }) { + msw.use( + listBotInstancesError(500, 'something went wrong'), + getBotInstanceMetricsSuccess() + ); }, }; export const StillLoadingList: Story = { - parameters: { - msw: { - handlers: [listBotInstancesForever(), getBotInstanceMetricsSuccess()], - }, + beforeEach({ msw }) { + msw.use(listBotInstancesForever(), getBotInstanceMetricsSuccess()); }, }; @@ -131,16 +125,15 @@ export const NoListPermission: Story = { args: { hasBotInstanceListPermission: false, }, - parameters: { - msw: { - handlers: [ - listBotInstancesError( - 500, - 'this call should never be made without permissions' - ), - getBotInstanceMetricsSuccess(), - ], - }, + + beforeEach({ msw }) { + msw.use( + listBotInstancesError( + 500, + 'this call should never be made without permissions' + ), + getBotInstanceMetricsSuccess() + ); }, }; @@ -148,18 +141,17 @@ export const NoReadPermission: Story = { args: { hasBotInstanceReadPermission: false, }, - parameters: { - msw: { - handlers: [ - listBotInstancesSuccess(listBotInstances, 'v1'), - listBotInstancesSuccess(listBotInstances, 'v2'), - getBotInstanceError( - 500, - 'this call should never be made without permissions' - ), - getBotInstanceMetricsSuccess(), - ], - }, + + beforeEach({ msw }) { + msw.use( + listBotInstancesSuccess(listBotInstances, 'v1'), + listBotInstancesSuccess(listBotInstances, 'v2'), + getBotInstanceError( + 500, + 'this call should never be made without permissions' + ), + getBotInstanceMetricsSuccess() + ); }, }; diff --git a/web/packages/teleport/src/BotInstances/Dashboard/BotInstanceDashboard.story.tsx b/web/packages/teleport/src/BotInstances/Dashboard/BotInstanceDashboard.story.tsx index fa327d5028d..beaadfbf4c6 100644 --- a/web/packages/teleport/src/BotInstances/Dashboard/BotInstanceDashboard.story.tsx +++ b/web/packages/teleport/src/BotInstances/Dashboard/BotInstanceDashboard.story.tsx @@ -60,39 +60,31 @@ type Story = StoryObj; export default meta; export const Happy: Story = { - parameters: { - msw: { - handlers: [getBotInstanceMetricsSuccess()], - }, + beforeEach({ msw }) { + msw.use(getBotInstanceMetricsSuccess()); }, }; export const NoData: Story = { - parameters: { - msw: { - handlers: [ - getBotInstanceMetricsSuccess({ - upgrade_statuses: null, - refresh_after_seconds: 60_000, - }), - ], - }, + beforeEach({ msw }) { + msw.use( + getBotInstanceMetricsSuccess({ + upgrade_statuses: null, + refresh_after_seconds: 60_000, + }) + ); }, }; export const Loading: Story = { - parameters: { - msw: { - handlers: [getBotInstanceMetricsForever()], - }, + beforeEach({ msw }) { + msw.use(getBotInstanceMetricsForever()); }, }; export const Error: Story = { - parameters: { - msw: { - handlers: [getBotInstanceMetricsError(500, 'something went wrong')], - }, + beforeEach({ msw }) { + msw.use(getBotInstanceMetricsError(500, 'something went wrong')); }, }; diff --git a/web/packages/teleport/src/BotInstances/Details/BotInstanceDetails.story.tsx b/web/packages/teleport/src/BotInstances/Details/BotInstanceDetails.story.tsx index 6b2a7224192..62b0c2aae72 100644 --- a/web/packages/teleport/src/BotInstances/Details/BotInstanceDetails.story.tsx +++ b/web/packages/teleport/src/BotInstances/Details/BotInstanceDetails.story.tsx @@ -47,45 +47,37 @@ type Story = StoryObj; export default meta; export const Happy: Story = { - parameters: { - msw: { - handlers: [getBotInstanceSuccess()], - }, + beforeEach({ msw }) { + msw.use(getBotInstanceSuccess()); }, }; export const ZeroServices: Story = { - parameters: { - msw: { - handlers: [ - getBotInstanceSuccess({ - ...mockGetBotInstanceResponse, - bot_instance: { - ...mockGetBotInstanceResponse.bot_instance, - status: { - ...mockGetBotInstanceResponse.bot_instance.status, - service_health: [], - }, + beforeEach({ msw }) { + msw.use( + getBotInstanceSuccess({ + ...mockGetBotInstanceResponse, + bot_instance: { + ...mockGetBotInstanceResponse.bot_instance, + status: { + ...mockGetBotInstanceResponse.bot_instance.status, + service_health: [], }, - }), - ], - }, + }, + }) + ); }, }; export const ErrorLoadingList: Story = { - parameters: { - msw: { - handlers: [getBotInstanceError(500, 'something went wrong')], - }, + beforeEach({ msw }) { + msw.use(getBotInstanceError(500, 'something went wrong')); }, }; export const StillLoadingList: Story = { - parameters: { - msw: { - handlers: [getBotInstanceForever()], - }, + beforeEach({ msw }) { + msw.use(getBotInstanceForever()); }, }; @@ -93,10 +85,9 @@ export const NoReadPermission: Story = { args: { hasBotInstanceReadPermission: false, }, - parameters: { - msw: { - handlers: [getBotInstanceError(500, 'this call should never be made')], - }, + + beforeEach({ msw }) { + msw.use(getBotInstanceError(500, 'this call should never be made')); }, }; diff --git a/web/packages/teleport/src/Bots/Add/GitHubActionsK8s/ConfigureAccess.story.tsx b/web/packages/teleport/src/Bots/Add/GitHubActionsK8s/ConfigureAccess.story.tsx index b3715ae58fb..a122efc64d3 100644 --- a/web/packages/teleport/src/Bots/Add/GitHubActionsK8s/ConfigureAccess.story.tsx +++ b/web/packages/teleport/src/Bots/Add/GitHubActionsK8s/ConfigureAccess.story.tsx @@ -53,62 +53,52 @@ type Story = StoryObj; export default meta; export const Happy: Story = { - parameters: { - msw: { - handlers: [ - genWizardCiCdSuccess({ prettyFormat: true }), - fetchUnifiedResourcesSuccess(), - userEventCaptureSuccess(), - ], - }, + beforeEach({ msw }) { + msw.use( + genWizardCiCdSuccess({ prettyFormat: true }), + fetchUnifiedResourcesSuccess(), + userEventCaptureSuccess() + ); }, }; export const TemplateFetchFailed: Story = { - parameters: { - msw: { - handlers: [ - genWizardCiCdError(500, 'something went wrong'), - fetchUnifiedResourcesSuccess(), - userEventCaptureSuccess(), - ], - }, + beforeEach({ msw }) { + msw.use( + genWizardCiCdError(500, 'something went wrong'), + fetchUnifiedResourcesSuccess(), + userEventCaptureSuccess() + ); }, }; export const TemplateFetching: Story = { - parameters: { - msw: { - handlers: [ - genWizardCiCdForever(), - fetchUnifiedResourcesSuccess(), - userEventCaptureSuccess(), - ], - }, + beforeEach({ msw }) { + msw.use( + genWizardCiCdForever(), + fetchUnifiedResourcesSuccess(), + userEventCaptureSuccess() + ); }, }; export const ClustersFetchFailed: Story = { - parameters: { - msw: { - handlers: [ - genWizardCiCdSuccess({ prettyFormat: true }), - fetchUnifiedResourcesError(500, 'something went wrong'), - userEventCaptureSuccess(), - ], - }, + beforeEach({ msw }) { + msw.use( + genWizardCiCdSuccess({ prettyFormat: true }), + fetchUnifiedResourcesError(500, 'something went wrong'), + userEventCaptureSuccess() + ); }, }; export const ClustersFetching: Story = { - parameters: { - msw: { - handlers: [ - genWizardCiCdSuccess({ prettyFormat: true }), - fetchUnifiedResourcesForever(), - userEventCaptureSuccess(), - ], - }, + beforeEach({ msw }) { + msw.use( + genWizardCiCdSuccess({ prettyFormat: true }), + fetchUnifiedResourcesForever(), + userEventCaptureSuccess() + ); }, }; diff --git a/web/packages/teleport/src/Bots/Add/GitHubActionsK8s/ConnectGitHub.story.tsx b/web/packages/teleport/src/Bots/Add/GitHubActionsK8s/ConnectGitHub.story.tsx index 8e5ee05941a..cd8e474b76e 100644 --- a/web/packages/teleport/src/Bots/Add/GitHubActionsK8s/ConnectGitHub.story.tsx +++ b/web/packages/teleport/src/Bots/Add/GitHubActionsK8s/ConnectGitHub.story.tsx @@ -49,38 +49,32 @@ type Story = StoryObj; export default meta; export const Happy: Story = { - parameters: { - msw: { - handlers: [ - genWizardCiCdSuccess({ prettyFormat: true }), - fetchUnifiedResourcesSuccess(), - userEventCaptureSuccess(), - ], - }, + beforeEach({ msw }) { + msw.use( + genWizardCiCdSuccess({ prettyFormat: true }), + fetchUnifiedResourcesSuccess(), + userEventCaptureSuccess() + ); }, }; export const TemplateFetchFailed: Story = { - parameters: { - msw: { - handlers: [ - genWizardCiCdError(500, 'something went wrong'), - fetchUnifiedResourcesSuccess(), - userEventCaptureSuccess(), - ], - }, + beforeEach({ msw }) { + msw.use( + genWizardCiCdError(500, 'something went wrong'), + fetchUnifiedResourcesSuccess(), + userEventCaptureSuccess() + ); }, }; export const TemplateFetching: Story = { - parameters: { - msw: { - handlers: [ - genWizardCiCdForever(), - fetchUnifiedResourcesSuccess(), - userEventCaptureSuccess(), - ], - }, + beforeEach({ msw }) { + msw.use( + genWizardCiCdForever(), + fetchUnifiedResourcesSuccess(), + userEventCaptureSuccess() + ); }, }; diff --git a/web/packages/teleport/src/Bots/Add/GitHubActionsK8s/GitHubActionsK8s.story.tsx b/web/packages/teleport/src/Bots/Add/GitHubActionsK8s/GitHubActionsK8s.story.tsx index 8b260e7dff3..19e07657902 100644 --- a/web/packages/teleport/src/Bots/Add/GitHubActionsK8s/GitHubActionsK8s.story.tsx +++ b/web/packages/teleport/src/Bots/Add/GitHubActionsK8s/GitHubActionsK8s.story.tsx @@ -48,17 +48,15 @@ type Story = StoryObj; export default meta; export const Happy: Story = { - parameters: { - msw: { - handlers: [ - genWizardCiCdSuccess({ prettyFormat: true }), - fetchUnifiedResourcesSuccess({ - delayMs: 1000, - mockSearch: true, - }), - userEventCaptureSuccess(), - ], - }, + beforeEach({ msw }) { + msw.use( + genWizardCiCdSuccess({ prettyFormat: true }), + fetchUnifiedResourcesSuccess({ + delayMs: 1000, + mockSearch: true, + }), + userEventCaptureSuccess() + ); }, }; diff --git a/web/packages/teleport/src/Bots/Add/GitHubActionsK8s/KubernetesLabelsSelect.story.tsx b/web/packages/teleport/src/Bots/Add/GitHubActionsK8s/KubernetesLabelsSelect.story.tsx index c581b28dd50..124e0a17e81 100644 --- a/web/packages/teleport/src/Bots/Add/GitHubActionsK8s/KubernetesLabelsSelect.story.tsx +++ b/web/packages/teleport/src/Bots/Add/GitHubActionsK8s/KubernetesLabelsSelect.story.tsx @@ -51,29 +51,23 @@ type Story = StoryObj; export default meta; export const Happy: Story = { - parameters: { - msw: { - handlers: [fetchUnifiedResourcesSuccess(), userEventCaptureSuccess()], - }, + beforeEach({ msw }) { + msw.use(fetchUnifiedResourcesSuccess(), userEventCaptureSuccess()); }, }; export const FetchResourcesError: Story = { - parameters: { - msw: { - handlers: [ - fetchUnifiedResourcesError(500, 'something went wrong'), - userEventCaptureSuccess(), - ], - }, + beforeEach({ msw }) { + msw.use( + fetchUnifiedResourcesError(500, 'something went wrong'), + userEventCaptureSuccess() + ); }, }; export const FetchResourcesForever: Story = { - parameters: { - msw: { - handlers: [fetchUnifiedResourcesForever(), userEventCaptureSuccess()], - }, + beforeEach({ msw }) { + msw.use(fetchUnifiedResourcesForever(), userEventCaptureSuccess()); }, }; diff --git a/web/packages/teleport/src/Bots/Details/BotDetails.story.tsx b/web/packages/teleport/src/Bots/Details/BotDetails.story.tsx index 3b5bbbeab07..185e2331121 100644 --- a/web/packages/teleport/src/Bots/Details/BotDetails.story.tsx +++ b/web/packages/teleport/src/Bots/Details/BotDetails.story.tsx @@ -90,193 +90,185 @@ const successHandler = getBotSuccess({ }); export const Happy: Story = { - parameters: { - msw: { - handlers: [ - successHandler, - listV2TokensSuccess(), - listBotInstancesSuccessHandler, - successGetRoles({ - startKey: '', - items: Array.from({ length: 10 }, (_, k) => k).map(r => ({ - content: `role-${r}`, - id: `role-${r}`, - name: `role-${r}`, - kind: 'role', - })), - }), - listV2LocksSuccess(), - editBotSuccess('v1'), - editBotSuccess('v2'), - editBotSuccess('v3'), - removeLockSuccess(), - createLockSuccess(), - deleteBotSuccess(), - ], - }, + beforeEach({ msw }) { + msw.use( + successHandler, + listV2TokensSuccess(), + listBotInstancesSuccessHandler, + successGetRoles({ + startKey: '', + items: Array.from({ length: 10 }, (_, k) => k).map(r => ({ + content: `role-${r}`, + id: `role-${r}`, + name: `role-${r}`, + kind: 'role', + })), + }), + listV2LocksSuccess(), + editBotSuccess('v1'), + editBotSuccess('v2'), + editBotSuccess('v3'), + removeLockSuccess(), + createLockSuccess(), + deleteBotSuccess() + ); }, }; export const HappyWithEmpty: Story = { - parameters: { - msw: { - handlers: [ - getBotSuccess({ - name: 'ansible-worker', - roles: [], - traits: [], - max_session_ttl: { - seconds: 43200, - }, - }), - listV2TokensSuccess({ - tokens: [], - }), - mfaAuthnChallengeSuccess(), - listBotInstancesSuccess( - { - bot_instances: [], - next_page_token: '', - }, - 'v1' - ), - successGetRoles({ - startKey: '', - items: Array.from({ length: 10 }, (_, k) => k).map(r => ({ - content: `role-${r}`, - id: `role-${r}`, - name: `role-${r}`, - kind: 'role', - })), - }), - editBotSuccess('v1'), - editBotSuccess('v2'), - editBotSuccess('v3'), - listV2LocksSuccess(), - ], - }, + beforeEach({ msw }) { + msw.use( + getBotSuccess({ + name: 'ansible-worker', + roles: [], + traits: [], + max_session_ttl: { + seconds: 43200, + }, + }), + listV2TokensSuccess({ + tokens: [], + }), + mfaAuthnChallengeSuccess(), + listBotInstancesSuccess( + { + bot_instances: [], + next_page_token: '', + }, + 'v1' + ), + successGetRoles({ + startKey: '', + items: Array.from({ length: 10 }, (_, k) => k).map(r => ({ + content: `role-${r}`, + id: `role-${r}`, + name: `role-${r}`, + kind: 'role', + })), + }), + editBotSuccess('v1'), + editBotSuccess('v2'), + editBotSuccess('v3'), + listV2LocksSuccess() + ); }, }; export const HappyWithTypical: Story = { - parameters: { - msw: { - handlers: [ - getBotSuccess({ - name: 'ansible-worker', - roles: ['access'], - traits: [], - max_session_ttl: { - seconds: 43200, - }, - }), - listV2TokensSuccess({ - tokens: ['kubernetes'], - }), - mfaAuthnChallengeSuccess(), - listBotInstancesSuccess( - { - bot_instances: [ - { - bot_name: 'bot-1', - instance_id: '6570dbf1-3530-4e13-a8c7-497bb9927994', - active_at_latest: new Date().toISOString(), - host_name_latest: - 'my-svc.my-namespace.svc.cluster-domain.example', - join_method_latest: 'kubernetes', - os_latest: 'linux', - version_latest: '18.1.0', - }, - ], - next_page_token: '', - }, - 'v1' - ), - successGetRoles({ - startKey: '', - items: Array.from({ length: 10 }, (_, k) => k).map(r => ({ - content: `role-${r}`, - id: `role-${r}`, - name: `role-${r}`, - kind: 'role', - })), - }), - editBotSuccess('v1'), - editBotSuccess('v2'), - editBotSuccess('v3'), - listV2LocksSuccess(), - ], - }, + beforeEach({ msw }) { + msw.use( + getBotSuccess({ + name: 'ansible-worker', + roles: ['access'], + traits: [], + max_session_ttl: { + seconds: 43200, + }, + }), + listV2TokensSuccess({ + tokens: ['kubernetes'], + }), + mfaAuthnChallengeSuccess(), + listBotInstancesSuccess( + { + bot_instances: [ + { + bot_name: 'bot-1', + instance_id: '6570dbf1-3530-4e13-a8c7-497bb9927994', + active_at_latest: new Date().toISOString(), + host_name_latest: + 'my-svc.my-namespace.svc.cluster-domain.example', + join_method_latest: 'kubernetes', + os_latest: 'linux', + version_latest: '18.1.0', + }, + ], + next_page_token: '', + }, + 'v1' + ), + successGetRoles({ + startKey: '', + items: Array.from({ length: 10 }, (_, k) => k).map(r => ({ + content: `role-${r}`, + id: `role-${r}`, + name: `role-${r}`, + kind: 'role', + })), + }), + editBotSuccess('v1'), + editBotSuccess('v2'), + editBotSuccess('v3'), + listV2LocksSuccess() + ); }, }; export const HappyWithLongValues: Story = { - parameters: { - msw: { - handlers: [ - getBotSuccess({ - name: 'ansibleworkeransibleworkeransibleworkeransibleworkeransibleworkeransibleworker', - description: - 'This is a bot. This is a bot. This is a bot. This is a bot. This is a bot.', - roles: [ - 'rolerolerolerolerolerolerolerolerolerolerolerolerolerolerolerolerolerolerolerolerole', - ], - traits: [ - { - name: 'traittraittraittraittraittraittraittraittraittraittraittraittraittraittrait', - values: ['value'], - }, - { - name: 'name', - values: [ - 'valuevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevalue', - ], - }, - ], - max_session_ttl: { - seconds: 43200, - }, - }), - listV2TokensSuccess({ - tokens: [ - 'tokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentoken', - ], - }), - mfaAuthnChallengeSuccess(), - listBotInstancesSuccess( + beforeEach({ msw }) { + msw.use( + getBotSuccess({ + name: 'ansibleworkeransibleworkeransibleworkeransibleworkeransibleworkeransibleworker', + description: + 'This is a bot. This is a bot. This is a bot. This is a bot. This is a bot.', + roles: [ + 'rolerolerolerolerolerolerolerolerolerolerolerolerolerolerolerolerolerolerolerolerole', + ], + traits: [ { - bot_instances: [ - { - bot_name: '', - instance_id: - '04241a2a66b904241a2a66b904241a2a66b904241a2a66b904241a2a66b9', - host_name_latest: - 'hotnamehotnamehotnamehotnamehotnamehotnamehotnamehotnamehotname', - active_at_latest: '2025-01-01T00:00:00Z', - join_method_latest: 'github', - os_latest: 'linux', - version_latest: '17.2.6-04241a2', - }, - ], - next_page_token: '', + name: 'traittraittraittraittraittraittraittraittraittraittraittraittraittraittrait', + values: ['value'], }, - 'v1' - ), - successGetRoles({ - startKey: '', - items: ['access', 'editor', 'terraform-provider'].map(r => ({ - content: r, - id: r, - name: r, - kind: 'role', - })), - }), - editBotSuccess('v1'), - editBotSuccess('v2'), - editBotSuccess('v3'), - listV2LocksSuccess(), - ], - }, + { + name: 'name', + values: [ + 'valuevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevalue', + ], + }, + ], + max_session_ttl: { + seconds: 43200, + }, + }), + listV2TokensSuccess({ + tokens: [ + 'tokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentoken', + ], + }), + mfaAuthnChallengeSuccess(), + listBotInstancesSuccess( + { + bot_instances: [ + { + bot_name: '', + instance_id: + '04241a2a66b904241a2a66b904241a2a66b904241a2a66b904241a2a66b9', + host_name_latest: + 'hotnamehotnamehotnamehotnamehotnamehotnamehotnamehotnamehotname', + active_at_latest: '2025-01-01T00:00:00Z', + join_method_latest: 'github', + os_latest: 'linux', + version_latest: '17.2.6-04241a2', + }, + ], + next_page_token: '', + }, + 'v1' + ), + successGetRoles({ + startKey: '', + items: ['access', 'editor', 'terraform-provider'].map(r => ({ + content: r, + id: r, + name: r, + kind: 'role', + })), + }), + editBotSuccess('v1'), + editBotSuccess('v2'), + editBotSuccess('v3'), + listV2LocksSuccess() + ); }, }; @@ -284,27 +276,26 @@ export const HappyWithoutEditPermission: Story = { args: { hasBotsEdit: false, }, - parameters: { - msw: { - handlers: [ - successHandler, - listV2TokensSuccess(), - listBotInstancesSuccessHandler, - successGetRoles({ - startKey: '', - items: ['access', 'editor', 'terraform-provider'].map(r => ({ - content: r, - id: r, - name: r, - kind: 'role', - })), - }), - editBotSuccess('v1'), - editBotSuccess('v2'), - editBotSuccess('v3'), - listV2LocksSuccess(), - ], - }, + + beforeEach({ msw }) { + msw.use( + successHandler, + listV2TokensSuccess(), + listBotInstancesSuccessHandler, + successGetRoles({ + startKey: '', + items: ['access', 'editor', 'terraform-provider'].map(r => ({ + content: r, + id: r, + name: r, + kind: 'role', + })), + }), + editBotSuccess('v1'), + editBotSuccess('v2'), + editBotSuccess('v3'), + listV2LocksSuccess() + ); }, }; @@ -312,111 +303,104 @@ export const HappyWithoutTokenListPermission: Story = { args: { hasTokensList: false, }, - parameters: { - msw: { - handlers: [ - successHandler, - listV2TokensSuccess(), - listBotInstancesSuccessHandler, - successGetRoles({ - startKey: '', - items: ['access', 'editor', 'terraform-provider'].map(r => ({ - content: r, - id: r, - name: r, - kind: 'role', - })), - }), - editBotSuccess('v1'), - editBotSuccess('v2'), - editBotSuccess('v3'), - listV2LocksSuccess(), - ], - }, + + beforeEach({ msw }) { + msw.use( + successHandler, + listV2TokensSuccess(), + listBotInstancesSuccessHandler, + successGetRoles({ + startKey: '', + items: ['access', 'editor', 'terraform-provider'].map(r => ({ + content: r, + id: r, + name: r, + kind: 'role', + })), + }), + editBotSuccess('v1'), + editBotSuccess('v2'), + editBotSuccess('v3'), + listV2LocksSuccess() + ); }, }; export const HappyWithMFAPrompt: Story = { - parameters: { - msw: { - handlers: [ - successHandler, - listV2TokensMfaError(), - mfaAuthnChallengeSuccess(), - listBotInstancesSuccessHandler, - successGetRoles({ - startKey: '', - items: ['access', 'editor', 'terraform-provider'].map(r => ({ - content: r, - id: r, - name: r, - kind: 'role', - })), - }), - editBotSuccess('v1'), - editBotSuccess('v2'), - editBotSuccess('v3'), - listV2LocksSuccess(), - ], - }, + beforeEach({ msw }) { + msw.use( + successHandler, + listV2TokensMfaError(), + mfaAuthnChallengeSuccess(), + listBotInstancesSuccessHandler, + successGetRoles({ + startKey: '', + items: ['access', 'editor', 'terraform-provider'].map(r => ({ + content: r, + id: r, + name: r, + kind: 'role', + })), + }), + editBotSuccess('v1'), + editBotSuccess('v2'), + editBotSuccess('v3'), + listV2LocksSuccess() + ); }, }; export const HappyWithTokensError: Story = { - parameters: { - msw: { - handlers: [ - successHandler, - listV2TokensError(500, 'something went wrong'), - listBotInstancesSuccessHandler, - successGetRoles({ - startKey: '', - items: ['access', 'editor', 'terraform-provider'].map(r => ({ - content: r, - id: r, - name: r, - kind: 'role', - })), - }), - editBotSuccess('v1'), - editBotSuccess('v2'), - editBotSuccess('v3'), - listV2LocksSuccess(), - ], - }, + beforeEach({ msw }) { + msw.use( + successHandler, + listV2TokensError(500, 'something went wrong'), + listBotInstancesSuccessHandler, + successGetRoles({ + startKey: '', + items: ['access', 'editor', 'terraform-provider'].map(r => ({ + content: r, + id: r, + name: r, + kind: 'role', + })), + }), + editBotSuccess('v1'), + editBotSuccess('v2'), + editBotSuccess('v3'), + listV2LocksSuccess() + ); }, }; export const HappyWithTokensOutdatedProxy: Story = { - parameters: { - msw: { - handlers: [ - successHandler, - listV2TokensError(404, 'path not found', { - proxyVersion: { - major: 19, - minor: 0, - patch: 0, - preRelease: 'dev', - string: '18.0.0', - }, - }), - listBotInstancesSuccessHandler, - successGetRoles({ - startKey: '', - items: ['access', 'editor', 'terraform-provider'].map(r => ({ - content: r, - id: r, - name: r, - kind: 'role', - })), - }), - editBotSuccess('v1'), - editBotSuccess('v2'), - editBotSuccess('v3'), - listV2LocksSuccess(), - ], - }, + beforeEach({ msw }) { + msw.use( + successHandler, + listV2TokensError(404, 'path not found', { + proxyVersion: { + major: 19, + minor: 0, + patch: 0, + preRelease: 'dev', + string: '18.0.0', + }, + }), + listBotInstancesSuccessHandler, + successGetRoles({ + startKey: '', + items: ['access', 'editor', 'terraform-provider'].map(r => ({ + content: r, + id: r, + name: r, + kind: 'role', + })), + }), + editBotSuccess('v1'), + editBotSuccess('v2'), + editBotSuccess('v3'), + listV2LocksSuccess() + ); }, }; @@ -424,67 +408,64 @@ export const HappyWithoutBotInstanceListPermission: Story = { args: { hasBotInstanceListPermission: false, }, - parameters: { - msw: { - handlers: [ - successHandler, - listV2TokensSuccess(), - listBotInstancesSuccessHandler, - successGetRoles({ - startKey: '', - items: ['access', 'editor', 'terraform-provider'].map(r => ({ - content: r, - id: r, - name: r, - kind: 'role', - })), - }), - editBotSuccess('v1'), - editBotSuccess('v2'), - editBotSuccess('v3'), - listV2LocksSuccess(), - ], - }, + + beforeEach({ msw }) { + msw.use( + successHandler, + listV2TokensSuccess(), + listBotInstancesSuccessHandler, + successGetRoles({ + startKey: '', + items: ['access', 'editor', 'terraform-provider'].map(r => ({ + content: r, + id: r, + name: r, + kind: 'role', + })), + }), + editBotSuccess('v1'), + editBotSuccess('v2'), + editBotSuccess('v3'), + listV2LocksSuccess() + ); }, }; export const HappyWithLock: Story = { - parameters: { - msw: { - handlers: [ - successHandler, - listV2TokensSuccess(), - listBotInstancesSuccessHandler, - successGetRoles({ - startKey: '', - items: Array.from({ length: 10 }, (_, k) => k).map(r => ({ - content: `role-${r}`, - id: `role-${r}`, - name: `role-${r}`, - kind: 'role', - })), - }), - listV2LocksSuccess({ - locks: [ - { - name: '76bc5cc7-b9bf-4a03-935f-8018c0a2bc05', - message: 'This is a test message', - expires: '2023-12-31T23:59:59Z', - targets: { - user: 'bot-ansible-worker', - }, - createdAt: '2023-01-01T00:00:00Z', - createdBy: 'admin', + beforeEach({ msw }) { + msw.use( + successHandler, + listV2TokensSuccess(), + listBotInstancesSuccessHandler, + successGetRoles({ + startKey: '', + items: Array.from({ length: 10 }, (_, k) => k).map(r => ({ + content: `role-${r}`, + id: `role-${r}`, + name: `role-${r}`, + kind: 'role', + })), + }), + listV2LocksSuccess({ + locks: [ + { + name: '76bc5cc7-b9bf-4a03-935f-8018c0a2bc05', + message: 'This is a test message', + expires: '2023-12-31T23:59:59Z', + targets: { + user: 'bot-ansible-worker', }, - ], - }), - editBotSuccess('v1'), - editBotSuccess('v2'), - editBotSuccess('v3'), - removeLockSuccess(), - createLockSuccess(), - ], - }, + createdAt: '2023-01-01T00:00:00Z', + createdBy: 'admin', + }, + ], + }), + editBotSuccess('v1'), + editBotSuccess('v2'), + editBotSuccess('v3'), + removeLockSuccess(), + createLockSuccess() + ); }, }; @@ -492,54 +473,44 @@ export const HappyWithLockError: Story = { args: { hasLocksMutatePermission: false, }, - parameters: { - msw: { - handlers: [ - successHandler, - listV2TokensSuccess(), - listBotInstancesSuccessHandler, - successGetRoles({ - startKey: '', - items: Array.from({ length: 10 }, (_, k) => k).map(r => ({ - content: `role-${r}`, - id: `role-${r}`, - name: `role-${r}`, - kind: 'role', - })), - }), - listV2LocksError(500, 'error message goes here'), - editBotSuccess('v1'), - editBotSuccess('v2'), - editBotSuccess('v3'), - ], - }, + + beforeEach({ msw }) { + msw.use( + successHandler, + listV2TokensSuccess(), + listBotInstancesSuccessHandler, + successGetRoles({ + startKey: '', + items: Array.from({ length: 10 }, (_, k) => k).map(r => ({ + content: `role-${r}`, + id: `role-${r}`, + name: `role-${r}`, + kind: 'role', + })), + }), + listV2LocksError(500, 'error message goes here'), + editBotSuccess('v1'), + editBotSuccess('v2'), + editBotSuccess('v3') + ); }, }; export const WithFetchPending: Story = { - parameters: { - msw: { - handlers: [getBotForever(), listV2LocksSuccess()], - }, + beforeEach({ msw }) { + msw.use(getBotForever(), listV2LocksSuccess()); }, }; export const WithFetchFailure: Story = { - parameters: { - msw: { - handlers: [ - getBotError(500, 'error message goes here'), - listV2LocksSuccess(), - ], - }, + beforeEach({ msw }) { + msw.use(getBotError(500, 'error message goes here'), listV2LocksSuccess()); }, }; export const WithBotNotFound: Story = { - parameters: { - msw: { - handlers: [getBotError(404, 'not found'), listV2LocksSuccess()], - }, + beforeEach({ msw }) { + msw.use(getBotError(404, 'not found'), listV2LocksSuccess()); }, }; @@ -547,13 +518,12 @@ export const WithNoBotReadPermission: Story = { args: { hasBotsRead: false, }, - parameters: { - msw: { - handlers: [ - getBotError(500, 'you have permission, congrats 🎉'), - listV2LocksSuccess(), - ], - }, + + beforeEach({ msw }) { + msw.use( + getBotError(500, 'you have permission, congrats 🎉'), + listV2LocksSuccess() + ); }, }; diff --git a/web/packages/teleport/src/Bots/Details/InstancesPanel.story.tsx b/web/packages/teleport/src/Bots/Details/InstancesPanel.story.tsx index 8ab460da0fe..d9796548664 100644 --- a/web/packages/teleport/src/Bots/Details/InstancesPanel.story.tsx +++ b/web/packages/teleport/src/Bots/Details/InstancesPanel.story.tsx @@ -98,26 +98,20 @@ export const listBotInstancesSuccessHandler = listBotInstancesSuccess( ); export const Happy: Story = { - parameters: { - msw: { - handlers: [listBotInstancesSuccessHandler], - }, + beforeEach({ msw }) { + msw.use(listBotInstancesSuccessHandler); }, }; export const WithFetchPending: Story = { - parameters: { - msw: { - handlers: [listBotInstancesForever()], - }, + beforeEach({ msw }) { + msw.use(listBotInstancesForever()); }, }; export const WithFetchFailure: Story = { - parameters: { - msw: { - handlers: [listBotInstancesError(500, 'something went wrong')], - }, + beforeEach({ msw }) { + msw.use(listBotInstancesError(500, 'something went wrong')); }, }; diff --git a/web/packages/teleport/src/Bots/Edit/EditDialog.story.tsx b/web/packages/teleport/src/Bots/Edit/EditDialog.story.tsx index 8e955172217..4500719cda4 100644 --- a/web/packages/teleport/src/Bots/Edit/EditDialog.story.tsx +++ b/web/packages/teleport/src/Bots/Edit/EditDialog.story.tsx @@ -69,48 +69,40 @@ const successHandler = getBotSuccess({ }); export const Happy: Story = { - parameters: { - msw: { - handlers: [ - successHandler, - successGetRoles({ - startKey: '', - items: ['access', 'editor', 'terraform-provider'].map(r => ({ - content: r, - id: r, - name: r, - kind: 'role', - })), - }), - editBotSuccess('v1'), - editBotSuccess('v2'), - editBotSuccess('v3'), - ], - }, + beforeEach({ msw }) { + msw.use( + successHandler, + successGetRoles({ + startKey: '', + items: ['access', 'editor', 'terraform-provider'].map(r => ({ + content: r, + id: r, + name: r, + kind: 'role', + })), + }), + editBotSuccess('v1'), + editBotSuccess('v2'), + editBotSuccess('v3') + ); }, }; export const WithFetchPending: Story = { - parameters: { - msw: { - handlers: [getBotForever()], - }, + beforeEach({ msw }) { + msw.use(getBotForever()); }, }; export const WithFetchFailure: Story = { - parameters: { - msw: { - handlers: [getBotError(500, 'error message goes here')], - }, + beforeEach({ msw }) { + msw.use(getBotError(500, 'error message goes here')); }, }; export const WithBotNotFound: Story = { - parameters: { - msw: { - handlers: [getBotError(404, 'not found')], - }, + beforeEach({ msw }) { + msw.use(getBotError(404, 'not found')); }, }; @@ -118,10 +110,9 @@ export const WithNoBotReadPermission: Story = { args: { hasBotsRead: false, }, - parameters: { - msw: { - handlers: [getBotError(500, 'you have permission, congrats 🎉')], - }, + + beforeEach({ msw }) { + msw.use(getBotError(500, 'you have permission, congrats 🎉')); }, }; @@ -129,98 +120,91 @@ export const WithNoBotEditPermission: Story = { args: { hasBotsEdit: false, }, - parameters: { - msw: { - handlers: [successHandler], - }, + + beforeEach({ msw }) { + msw.use(successHandler); }, }; export const WithSubmitPending: Story = { - parameters: { - msw: { - handlers: [ - successHandler, - successGetRoles({ - startKey: '', - items: ['access', 'editor', 'terraform-provider'].map(r => ({ - content: r, - id: r, - name: r, - kind: 'role', - })), - }), - editBotForever(), - ], - }, + beforeEach({ msw }) { + msw.use( + successHandler, + successGetRoles({ + startKey: '', + items: ['access', 'editor', 'terraform-provider'].map(r => ({ + content: r, + id: r, + name: r, + kind: 'role', + })), + }), + editBotForever() + ); }, }; export const WithSubmitFailure: Story = { - parameters: { - msw: { - handlers: [ - successHandler, - successGetRoles({ - startKey: '', - items: ['access', 'editor', 'terraform-provider'].map(r => ({ - content: r, - id: r, - name: r, - kind: 'role', - })), - }), - editBotError('v1', 500, 'something went wrong'), - editBotError('v2', 500, 'something went wrong'), - editBotError('v3', 500, 'something went wrong'), - ], - }, + beforeEach({ msw }) { + msw.use( + successHandler, + successGetRoles({ + startKey: '', + items: ['access', 'editor', 'terraform-provider'].map(r => ({ + content: r, + id: r, + name: r, + kind: 'role', + })), + }), + editBotError('v1', 500, 'something went wrong'), + editBotError('v2', 500, 'something went wrong'), + editBotError('v3', 500, 'something went wrong') + ); }, }; export const WithSubmitOutdatedProxy: Story = { - parameters: { - msw: { - handlers: [ - successHandler, - successGetRoles({ - startKey: '', - items: ['access', 'editor', 'terraform-provider'].map(r => ({ - content: r, - id: r, - name: r, - kind: 'role', - })), - }), - editBotError('v1', 404, 'path not found', { - proxyVersion: { - major: 19, - minor: 0, - patch: 0, - preRelease: 'dev', - string: '18.0.0', - }, - }), - editBotError('v2', 404, 'path not found', { - proxyVersion: { - major: 19, - minor: 0, - patch: 0, - preRelease: 'dev', - string: '18.0.0', - }, - }), - editBotError('v3', 404, 'path not found', { - proxyVersion: { - major: 19, - minor: 0, - patch: 0, - preRelease: 'dev', - string: '18.0.0', - }, - }), - ], - }, + beforeEach({ msw }) { + msw.use( + successHandler, + successGetRoles({ + startKey: '', + items: ['access', 'editor', 'terraform-provider'].map(r => ({ + content: r, + id: r, + name: r, + kind: 'role', + })), + }), + editBotError('v1', 404, 'path not found', { + proxyVersion: { + major: 19, + minor: 0, + patch: 0, + preRelease: 'dev', + string: '18.0.0', + }, + }), + editBotError('v2', 404, 'path not found', { + proxyVersion: { + major: 19, + minor: 0, + patch: 0, + preRelease: 'dev', + string: '18.0.0', + }, + }), + editBotError('v3', 404, 'path not found', { + proxyVersion: { + major: 19, + minor: 0, + patch: 0, + preRelease: 'dev', + string: '18.0.0', + }, + }) + ); }, }; diff --git a/web/packages/teleport/src/Console/Console.story.tsx b/web/packages/teleport/src/Console/Console.story.tsx index 64603de51de..ebbfe89f5f9 100644 --- a/web/packages/teleport/src/Console/Console.story.tsx +++ b/web/packages/teleport/src/Console/Console.story.tsx @@ -40,23 +40,21 @@ export const ConsoleStory = () => { ); }; -ConsoleStory.parameters = { - msw: { - handlers: [ - http.get(cfg.getUserContextUrl(), () => { - return HttpResponse.json({ - cluster: { - name: 'aws', - lastConnected: new Date('2020-09-26T17:30:23.512876876Z'), - status: 'online', - publicURL: 'localhost', - authVersion: '4.4.0-dev', - proxyVersion: '4.4.0-dev', - }, - }); - }), - ], - }, +ConsoleStory.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.getUserContextUrl(), () => { + return HttpResponse.json({ + cluster: { + name: 'aws', + lastConnected: new Date('2020-09-26T17:30:23.512876876Z'), + status: 'online', + publicURL: 'localhost', + authVersion: '4.4.0-dev', + proxyVersion: '4.4.0-dev', + }, + }); + }) + ); }; export function TestLayout(props: PropType) { diff --git a/web/packages/teleport/src/Discover/AwsMangementConsole/CreateAppAccess/CreateAppAccess.story.tsx b/web/packages/teleport/src/Discover/AwsMangementConsole/CreateAppAccess/CreateAppAccess.story.tsx index 750dc61dc40..3cc2f549b56 100644 --- a/web/packages/teleport/src/Discover/AwsMangementConsole/CreateAppAccess/CreateAppAccess.story.tsx +++ b/web/packages/teleport/src/Discover/AwsMangementConsole/CreateAppAccess/CreateAppAccess.story.tsx @@ -38,45 +38,39 @@ export default { }; export const Success = () => ; -Success.parameters = { - msw: { - handlers: [ - http.post(cfg.api.awsAppAccess.createV2, () => - HttpResponse.json({ name: 'app-1' }) - ), - ], - }, +Success.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.api.awsAppAccess.createV2, () => + HttpResponse.json({ name: 'app-1' }) + ) + ); }; export const Loading = () => { cfg.isCloud = true; return ; }; -Loading.parameters = { - msw: { - handlers: [ - http.post( - cfg.api.awsAppAccess.createV2, - async () => await delay('infinite') - ), - ], - }, +Loading.beforeEach = ({ msw }) => { + msw.use( + http.post( + cfg.api.awsAppAccess.createV2, + async () => await delay('infinite') + ) + ); }; export const Failed = () => ; -Failed.parameters = { - msw: { - handlers: [ - http.post(cfg.api.awsAppAccess.createV2, () => - HttpResponse.json( - { - message: 'Some kind of error message', - }, - { status: 403 } - ) - ), - ], - }, +Failed.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.api.awsAppAccess.createV2, () => + HttpResponse.json( + { + message: 'Some kind of error message', + }, + { status: 403 } + ) + ) + ); }; const Component = () => { diff --git a/web/packages/teleport/src/Discover/AwsMangementConsole/SetupAccess/SetupAccess.story.tsx b/web/packages/teleport/src/Discover/AwsMangementConsole/SetupAccess/SetupAccess.story.tsx index df888263579..48e4e58c1aa 100644 --- a/web/packages/teleport/src/Discover/AwsMangementConsole/SetupAccess/SetupAccess.story.tsx +++ b/web/packages/teleport/src/Discover/AwsMangementConsole/SetupAccess/SetupAccess.story.tsx @@ -72,10 +72,8 @@ export const NoTraits = () => ( ); -NoTraits.parameters = { - msw: { - handlers: [defaultUserGet], - }, +NoTraits.beforeEach = ({ msw }) => { + msw.use(defaultUserGet); }; export const WithTraits = () => ( @@ -83,23 +81,21 @@ export const WithTraits = () => ( ); -WithTraits.parameters = { - msw: { - handlers: [ - http.get(cfg.api.userWithUsernamePath, () => - HttpResponse.json({ - name: 'user-1', - roles: [], - authType: 'local', - isLocal: true, - traits: { - awsRoleArns: ['arn:aws:iam::123456789012:role/dynamic1'], - }, - allTraits: {}, - }) - ), - ], - }, +WithTraits.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.api.userWithUsernamePath, () => + HttpResponse.json({ + name: 'user-1', + roles: [], + authType: 'local', + isLocal: true, + traits: { + awsRoleArns: ['arn:aws:iam::123456789012:role/dynamic1'], + }, + allTraits: {}, + }) + ) + ); }; export const NoAccess = () => ( @@ -107,10 +103,8 @@ export const NoAccess = () => ( ); -NoAccess.parameters = { - msw: { - handlers: [defaultUserGet], - }, +NoAccess.beforeEach = ({ msw }) => { + msw.use(defaultUserGet); }; export const SsoUser = () => ( @@ -118,10 +112,8 @@ export const SsoUser = () => ( ); -SsoUser.parameters = { - msw: { - handlers: [defaultUserGet], - }, +SsoUser.beforeEach = ({ msw }) => { + msw.use(defaultUserGet); }; const Provider = ({ diff --git a/web/packages/teleport/src/Discover/ConnectMyComputer/SetupConnect/SetupConnect.story.tsx b/web/packages/teleport/src/Discover/ConnectMyComputer/SetupConnect/SetupConnect.story.tsx index 163135ef64f..7b470a2f16c 100644 --- a/web/packages/teleport/src/Discover/ConnectMyComputer/SetupConnect/SetupConnect.story.tsx +++ b/web/packages/teleport/src/Discover/ConnectMyComputer/SetupConnect/SetupConnect.story.tsx @@ -62,10 +62,8 @@ export const macOS = () => { ); }; -macOS.parameters = { - msw: { - handlers: [noNodesHandler], - }, +macOS.beforeEach = ({ msw }) => { + msw.use(noNodesHandler); }; export const Linux = () => { @@ -77,10 +75,8 @@ export const Linux = () => { ); }; -Linux.parameters = { - msw: { - handlers: [noNodesHandler], - }, +Linux.beforeEach = ({ msw }) => { + msw.use(noNodesHandler); }; export const Polling = () => { @@ -90,10 +86,8 @@ export const Polling = () => { ); }; -Polling.parameters = { - msw: { - handlers: [noNodesHandler], - }, +Polling.beforeEach = ({ msw }) => { + msw.use(noNodesHandler); }; export const PollingSuccess = () => { @@ -103,21 +97,19 @@ export const PollingSuccess = () => { ); }; -PollingSuccess.parameters = { - msw: { - handlers: [ - http.get( - withoutQuery(cfg.api.nodesPath), - () => { - return HttpResponse.json({ items: [] }); - }, - { once: true } - ), - http.get(withoutQuery(cfg.api.nodesPath), () => { - return HttpResponse.json({ items: [{ id: '1234', hostname: 'foo' }] }); - }), - ], - }, +PollingSuccess.beforeEach = ({ msw }) => { + msw.use( + http.get( + withoutQuery(cfg.api.nodesPath), + () => { + return HttpResponse.json({ items: [] }); + }, + { once: true } + ), + http.get(withoutQuery(cfg.api.nodesPath), () => { + return HttpResponse.json({ items: [{ id: '1234', hostname: 'foo' }] }); + }) + ); }; export const HintTimeout = () => { @@ -128,12 +120,8 @@ export const HintTimeout = () => { ); }; -HintTimeout.parameters = { - msw: { - handlers: [ - http.post(cfg.api.webRenewTokenPath, () => HttpResponse.json({})), - ], - }, +HintTimeout.beforeEach = ({ msw }) => { + msw.use(http.post(cfg.api.webRenewTokenPath, () => HttpResponse.json({}))); }; const Provider = ({ children }) => { diff --git a/web/packages/teleport/src/Discover/ConnectMyComputer/TestConnection/TestConnection.story.tsx b/web/packages/teleport/src/Discover/ConnectMyComputer/TestConnection/TestConnection.story.tsx index e9dbace9ceb..77910485acd 100644 --- a/web/packages/teleport/src/Discover/ConnectMyComputer/TestConnection/TestConnection.story.tsx +++ b/web/packages/teleport/src/Discover/ConnectMyComputer/TestConnection/TestConnection.story.tsx @@ -29,39 +29,27 @@ import { TestConnection } from './TestConnection'; export default { title: 'Teleport/Discover/ConnectMyComputer/TestConnection', - parameters: { - msw: { - // All handlers within the story must be specified as keys in order to use Storybook's - // parameter inheritance to share handlers between stories. - // - // https://github.com/mswjs/msw-storybook-addon/tree/v1.10.0#composing-request-handlers - // https://storybook.js.org/docs/6.5/writing-stories/parameters#rules-of-parameter-inheritance - handlers: { - renewToken: http.post(cfg.api.webRenewTokenPath, () => - HttpResponse.json({}) - ), - mfaRequired: [ - http.post(cfg.getMfaRequiredUrl(cfg.proxyCluster), () => - HttpResponse.json({ required: false }) - ), - ], - connectionDiagnostic: [ - http.post(cfg.getConnectionDiagnosticUrl(), () => - HttpResponse.json({ - id: '1234', - success: true, - traces: [ - { - traceType: 'rbac node', - status: 'success', - details: 'Everything is a-okay.', - }, - ], - }) - ), - ], - }, - }, + + beforeEach({ msw }) { + msw.use( + http.post(cfg.api.webRenewTokenPath, () => HttpResponse.json({})), + http.post(cfg.getMfaRequiredUrl(cfg.proxyCluster), () => + HttpResponse.json({ required: false }) + ), + http.post(cfg.getConnectionDiagnosticUrl(), () => + HttpResponse.json({ + id: '1234', + success: true, + traces: [ + { + traceType: 'rbac node', + status: 'success', + details: 'Everything is a-okay.', + }, + ], + }) + ) + ); }, }; @@ -82,16 +70,12 @@ export const SingleLogin = () => ( ); -SingleLogin.parameters = { - msw: { - handlers: { - connectMyComputerLogins: [ - http.get(cfg.api.connectMyComputerLoginsPath, () => - HttpResponse.json({ logins: ['foo'] }) - ), - ], - }, - }, +SingleLogin.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.api.connectMyComputerLoginsPath, () => + HttpResponse.json({ logins: ['foo'] }) + ) + ); }; export const MultipleLogins = () => { @@ -102,23 +86,19 @@ export const MultipleLogins = () => { ); }; -MultipleLogins.parameters = { - msw: { - handlers: { - connectMyComputerLogins: [ - http.get(cfg.api.connectMyComputerLoginsPath, () => - HttpResponse.json({ - logins: [ - 'foo', - 'bar', - 'baz', - 'czesława_maria_de_domo_cieślak_primo_voto_gospodarek_secundo_voto_kowalczyk', - ], - }) - ), - ], - }, - }, +MultipleLogins.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.api.connectMyComputerLoginsPath, () => + HttpResponse.json({ + logins: [ + 'foo', + 'bar', + 'baz', + 'czesława_maria_de_domo_cieślak_primo_voto_gospodarek_secundo_voto_kowalczyk', + ], + }) + ) + ); }; export const NoLogins = () => { @@ -129,16 +109,12 @@ export const NoLogins = () => { ); }; -NoLogins.parameters = { - msw: { - handlers: { - connectMyComputerLogins: [ - http.get(cfg.api.connectMyComputerLoginsPath, () => - HttpResponse.json({ logins: [] }) - ), - ], - }, - }, +NoLogins.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.api.connectMyComputerLoginsPath, () => + HttpResponse.json({ logins: [] }) + ) + ); }; export const NoRole = () => { @@ -149,21 +125,17 @@ export const NoRole = () => { ); }; -NoRole.parameters = { - msw: { - handlers: { - connectMyComputerLogins: [ - http.get(cfg.api.connectMyComputerLoginsPath, () => - HttpResponse.json( - { - error: { message: 'No role found' }, - }, - { status: 404 } - ) - ), - ], - }, - }, +NoRole.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.api.connectMyComputerLoginsPath, () => + HttpResponse.json( + { + error: { message: 'No role found' }, + }, + { status: 404 } + ) + ) + ); }; export const ReloadUserProcessing = () => { @@ -174,17 +146,10 @@ export const ReloadUserProcessing = () => { ); }; -ReloadUserProcessing.parameters = { - msw: { - handlers: { - renewToken: [ - http.post( - cfg.api.webRenewTokenPath, - async () => await delay('infinite') - ), - ], - }, - }, +ReloadUserProcessing.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.api.webRenewTokenPath, async () => await delay('infinite')) + ); }; export const ReloadUserError = () => { @@ -195,35 +160,29 @@ export const ReloadUserError = () => { ); }; -ReloadUserError.parameters = { - msw: { - handlers: { - // The first handler returns an error immediately. Subsequent requests return after a delay so - // that we can show a spinner after clicking on "Retry". - renewToken: [ - http.post( - cfg.api.webRenewTokenPath, - () => - HttpResponse.json( - { - message: 'Could not renew session', - }, - { status: 500 } - ), - { once: true } +ReloadUserError.beforeEach = ({ msw }) => { + msw.use( + http.post( + cfg.api.webRenewTokenPath, + () => + HttpResponse.json( + { + message: 'Could not renew session', + }, + { status: 500 } ), - http.post(cfg.api.webRenewTokenPath, async () => { - await delay(1000); - return HttpResponse.json( - { - message: 'Could not renew session', - }, - { status: 500 } - ); - }), - ], - }, - }, + { once: true } + ), + http.post(cfg.api.webRenewTokenPath, async () => { + await delay(1000); + return HttpResponse.json( + { + message: 'Could not renew session', + }, + { status: 500 } + ); + }) + ); }; const Provider = ({ children }) => { diff --git a/web/packages/teleport/src/Discover/Database/DeployService/AutoDeploy/AutoDeploy.story.tsx b/web/packages/teleport/src/Discover/Database/DeployService/AutoDeploy/AutoDeploy.story.tsx index c1463032de9..df692164021 100644 --- a/web/packages/teleport/src/Discover/Database/DeployService/AutoDeploy/AutoDeploy.story.tsx +++ b/web/packages/teleport/src/Discover/Database/DeployService/AutoDeploy/AutoDeploy.story.tsx @@ -44,20 +44,18 @@ export const Init = () => { ); }; -Init.parameters = { - msw: { - handlers: [ - http.post(cfg.api.awsSecurityGroupsListPath, () => - HttpResponse.json({ securityGroups: securityGroupsResponse }) - ), - http.post(cfg.api.awsDeployTeleportServicePath, () => - HttpResponse.json({ serviceDashboardUrl: 'some-dashboard-url' }) - ), - http.post(cfg.api.awsSubnetListPath, () => - HttpResponse.json({ subnets: subnetsResponse }) - ), - ], - }, +Init.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.api.awsSecurityGroupsListPath, () => + HttpResponse.json({ securityGroups: securityGroupsResponse }) + ), + http.post(cfg.api.awsDeployTeleportServicePath, () => + HttpResponse.json({ serviceDashboardUrl: 'some-dashboard-url' }) + ), + http.post(cfg.api.awsSubnetListPath, () => + HttpResponse.json({ subnets: subnetsResponse }) + ) + ); }; export const InitWithAutoDiscover = () => { @@ -82,22 +80,20 @@ export const InitWithAutoDiscover = () => { ); }; -InitWithAutoDiscover.parameters = { - msw: { - handlers: [ - http.post(cfg.api.awsSecurityGroupsListPath, () => - HttpResponse.json({ securityGroups: securityGroupsResponse }) - ), - http.post(cfg.getAwsRdsDbsDeployServicesUrl('test-integration'), () => - HttpResponse.json({ - clusterDashboardUrl: 'some-cluster-dashboard-url', - }) - ), - http.post(cfg.api.awsSubnetListPath, () => - HttpResponse.json({ subnets: subnetsResponse }) - ), - ], - }, +InitWithAutoDiscover.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.api.awsSecurityGroupsListPath, () => + HttpResponse.json({ securityGroups: securityGroupsResponse }) + ), + http.post(cfg.getAwsRdsDbsDeployServicesUrl('test-integration'), () => + HttpResponse.json({ + clusterDashboardUrl: 'some-cluster-dashboard-url', + }) + ), + http.post(cfg.api.awsSubnetListPath, () => + HttpResponse.json({ subnets: subnetsResponse }) + ) + ); }; export const InitWithLabelsWithDeployFailure = () => { @@ -117,25 +113,23 @@ export const InitWithLabelsWithDeployFailure = () => { ); }; -InitWithLabelsWithDeployFailure.parameters = { - msw: { - handlers: [ - http.post(cfg.api.awsSecurityGroupsListPath, () => - HttpResponse.json({ securityGroups: securityGroupsResponse }) - ), - http.post(cfg.api.awsDeployTeleportServicePath, () => - HttpResponse.json( - { - error: { message: 'Whoops, something went wrong.' }, - }, - { status: 500 } - ) - ), - http.post(cfg.api.awsSubnetListPath, () => - HttpResponse.json({ subnets: subnetsResponse }) - ), - ], - }, +InitWithLabelsWithDeployFailure.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.api.awsSecurityGroupsListPath, () => + HttpResponse.json({ securityGroups: securityGroupsResponse }) + ), + http.post(cfg.api.awsDeployTeleportServicePath, () => + HttpResponse.json( + { + error: { message: 'Whoops, something went wrong.' }, + }, + { status: 500 } + ) + ), + http.post(cfg.api.awsSubnetListPath, () => + HttpResponse.json({ subnets: subnetsResponse }) + ) + ); }; export const InitSgSubnetLoadingFailed = () => { @@ -146,27 +140,25 @@ export const InitSgSubnetLoadingFailed = () => { ); }; -InitSgSubnetLoadingFailed.parameters = { - msw: { - handlers: [ - http.post(cfg.api.awsSecurityGroupsListPath, () => - HttpResponse.json( - { - message: 'some error when trying to list security groups', - }, - { status: 403 } - ) - ), - http.post(cfg.api.awsSubnetListPath, () => - HttpResponse.json( - { - error: { message: 'Whoops, error getting subnets' }, - }, - { status: 403 } - ) - ), - ], - }, +InitSgSubnetLoadingFailed.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.api.awsSecurityGroupsListPath, () => + HttpResponse.json( + { + message: 'some error when trying to list security groups', + }, + { status: 403 } + ) + ), + http.post(cfg.api.awsSubnetListPath, () => + HttpResponse.json( + { + error: { message: 'Whoops, error getting subnets' }, + }, + { status: 403 } + ) + ) + ); }; export const InitSgSubnetLoading = () => { @@ -177,13 +169,11 @@ export const InitSgSubnetLoading = () => { ); }; -InitSgSubnetLoading.parameters = { - msw: { - handlers: [ - http.post(cfg.api.awsSecurityGroupsListPath, () => delay('infinite')), - http.post(cfg.api.awsSubnetListPath, () => delay('infinite')), - ], - }, +InitSgSubnetLoading.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.api.awsSecurityGroupsListPath, () => delay('infinite')), + http.post(cfg.api.awsSubnetListPath, () => delay('infinite')) + ); }; const subnetsResponse = [ diff --git a/web/packages/teleport/src/Discover/Database/DeployService/ManualDeploy/ManualDeploy.story.tsx b/web/packages/teleport/src/Discover/Database/DeployService/ManualDeploy/ManualDeploy.story.tsx index 6a9d91a704e..c150fed04de 100644 --- a/web/packages/teleport/src/Discover/Database/DeployService/ManualDeploy/ManualDeploy.story.tsx +++ b/web/packages/teleport/src/Discover/Database/DeployService/ManualDeploy/ManualDeploy.story.tsx @@ -36,14 +36,12 @@ export const Init = () => { ); }; -Init.parameters = { - msw: { - handlers: [ - http.post(cfg.api.discoveryJoinToken.createV2, () => - HttpResponse.json(rawJoinToken) - ), - ], - }, +Init.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.api.discoveryJoinToken.createV2, () => + HttpResponse.json(rawJoinToken) + ) + ); }; export const InitWithLabels = () => { @@ -60,14 +58,12 @@ export const InitWithLabels = () => { ); }; -InitWithLabels.parameters = { - msw: { - handlers: [ - http.post(cfg.api.discoveryJoinToken.createV2, () => - HttpResponse.json(rawJoinToken) - ), - ], - }, +InitWithLabels.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.api.discoveryJoinToken.createV2, () => + HttpResponse.json(rawJoinToken) + ) + ); }; const Provider = props => { diff --git a/web/packages/teleport/src/Discover/Database/EnrollRdsDatabase/EnrollRdsDatabase.story.tsx b/web/packages/teleport/src/Discover/Database/EnrollRdsDatabase/EnrollRdsDatabase.story.tsx index 91d6bf0166a..10a01945259 100644 --- a/web/packages/teleport/src/Discover/Database/EnrollRdsDatabase/EnrollRdsDatabase.story.tsx +++ b/web/packages/teleport/src/Discover/Database/EnrollRdsDatabase/EnrollRdsDatabase.story.tsx @@ -51,214 +51,194 @@ export default { }; export const SelfHostedFlow = () => ; -SelfHostedFlow.parameters = { - msw: { - handlers: [ - http.post(cfg.api.awsRdsDbListPath, () => - HttpResponse.json({ databases: rdsInstances }) - ), - http.get(databasesPathWithoutQuery, () => - HttpResponse.json({ items: [rdsInstances[2]] }) - ), - http.post(databasesPathWithoutQuery, () => HttpResponse.json({})), - http.post(cfg.api.discoveryConfigPath, () => HttpResponse.json({})), - http.get(cfg.api.databaseServicesPath, () => - HttpResponse.json({ - services: [{ name: 'test', matchers: { '*': ['*'] } }], - }) - ), - http.get(cfg.api.databaseServicesPath, () => HttpResponse.json({})), - http.post(cfg.api.awsDatabaseVpcsPath, () => HttpResponse.json({ vpcs })), - ], - }, +SelfHostedFlow.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.api.awsRdsDbListPath, () => + HttpResponse.json({ databases: rdsInstances }) + ), + http.get(databasesPathWithoutQuery, () => + HttpResponse.json({ items: [rdsInstances[2]] }) + ), + http.post(databasesPathWithoutQuery, () => HttpResponse.json({})), + http.post(cfg.api.discoveryConfigPath, () => HttpResponse.json({})), + http.get(cfg.api.databaseServicesPath, () => + HttpResponse.json({ + services: [{ name: 'test', matchers: { '*': ['*'] } }], + }) + ), + http.get(cfg.api.databaseServicesPath, () => HttpResponse.json({})), + http.post(cfg.api.awsDatabaseVpcsPath, () => HttpResponse.json({ vpcs })) + ); }; export const CloudFlow = () => { cfg.isCloud = true; return ; }; -CloudFlow.parameters = { - msw: { - handlers: [ - http.post(cfg.api.awsRdsDbListPath, () => - HttpResponse.json({ databases: rdsInstances }) - ), - http.get(databasesPathWithoutQuery, () => - HttpResponse.json({ items: [rdsInstances[2]] }) - ), - http.post(cfg.api.discoveryConfigPath, () => HttpResponse.json({})), - http.get(cfg.api.databaseServicesPath, () => - HttpResponse.json({ - items: [ - { name: 'test', resource_matchers: [{ labels: { '*': ['*'] } }] }, - ], - }) - ), - http.get(cfg.api.databaseServicesPath, () => HttpResponse.json({})), - http.post(cfg.api.awsDatabaseVpcsPath, () => HttpResponse.json({ vpcs })), - ], - }, +CloudFlow.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.api.awsRdsDbListPath, () => + HttpResponse.json({ databases: rdsInstances }) + ), + http.get(databasesPathWithoutQuery, () => + HttpResponse.json({ items: [rdsInstances[2]] }) + ), + http.post(cfg.api.discoveryConfigPath, () => HttpResponse.json({})), + http.get(cfg.api.databaseServicesPath, () => + HttpResponse.json({ + items: [ + { name: 'test', resource_matchers: [{ labels: { '*': ['*'] } }] }, + ], + }) + ), + http.get(cfg.api.databaseServicesPath, () => HttpResponse.json({})), + http.post(cfg.api.awsDatabaseVpcsPath, () => HttpResponse.json({ vpcs })) + ); }; export const NoVpcs = () => { return ; }; -NoVpcs.parameters = { - msw: { - handlers: [ - http.post(cfg.api.awsRdsDbListPath, () => - HttpResponse.json({ databases: [] }) - ), - http.post( - cfg.api.awsDatabaseVpcsPath, - () => HttpResponse.json({ vpcs: [] }), - { once: true } - ), - http.post(cfg.api.awsDatabaseVpcsPath, () => HttpResponse.json({ vpcs })), - ], - }, +NoVpcs.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.api.awsRdsDbListPath, () => + HttpResponse.json({ databases: [] }) + ), + http.post( + cfg.api.awsDatabaseVpcsPath, + () => HttpResponse.json({ vpcs: [] }), + { once: true } + ), + http.post(cfg.api.awsDatabaseVpcsPath, () => HttpResponse.json({ vpcs })) + ); }; export const VpcError = () => { return ; }; -VpcError.parameters = { - msw: { - handlers: [ - http.post( - cfg.api.awsDatabaseVpcsPath, - () => - HttpResponse.json( - { - error: { message: 'Whoops, error fetching required vpcs.' }, - }, - { status: 404 } - ), - { once: true } - ), - ], - }, +VpcError.beforeEach = ({ msw }) => { + msw.use( + http.post( + cfg.api.awsDatabaseVpcsPath, + () => + HttpResponse.json( + { + error: { message: 'Whoops, error fetching required vpcs.' }, + }, + { status: 404 } + ), + { once: true } + ) + ); }; export const SelectedVpcAlreadyExists = () => { return ; }; -SelectedVpcAlreadyExists.parameters = { - msw: { - handlers: [ - http.post(cfg.api.awsRdsDbListPath, () => - HttpResponse.json({ databases: rdsInstances }) - ), - http.get(databasesPathWithoutQuery, () => - HttpResponse.json({ items: [rdsInstances[2]] }) - ), - http.post(cfg.api.awsDatabaseVpcsPath, () => - HttpResponse.json({ - vpcs: [ - { - id: 'Click me, then toggle ON auto enroll', - ecsServiceDashboardURL: 'http://some-dashboard-url', - }, - { - id: 'vpc-1234', - }, - ], - }) - ), - ], - }, +SelectedVpcAlreadyExists.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.api.awsRdsDbListPath, () => + HttpResponse.json({ databases: rdsInstances }) + ), + http.get(databasesPathWithoutQuery, () => + HttpResponse.json({ items: [rdsInstances[2]] }) + ), + http.post(cfg.api.awsDatabaseVpcsPath, () => + HttpResponse.json({ + vpcs: [ + { + id: 'Click me, then toggle ON auto enroll', + ecsServiceDashboardURL: 'http://some-dashboard-url', + }, + { + id: 'vpc-1234', + }, + ], + }) + ) + ); }; export const LoadingVpcs = () => { return ; }; -LoadingVpcs.parameters = { - msw: { - handlers: [http.post(cfg.api.awsDatabaseVpcsPath, () => delay('infinite'))], - }, +LoadingVpcs.beforeEach = ({ msw }) => { + msw.use(http.post(cfg.api.awsDatabaseVpcsPath, () => delay('infinite'))); }; export const LoadingDatabases = () => { return ; }; -LoadingDatabases.parameters = { - msw: { - handlers: [ - http.post(cfg.api.awsRdsDbListPath, () => delay('infinite')), - http.post(cfg.api.awsDatabaseVpcsPath, () => HttpResponse.json({ vpcs })), - ], - }, +LoadingDatabases.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.api.awsRdsDbListPath, () => delay('infinite')), + http.post(cfg.api.awsDatabaseVpcsPath, () => HttpResponse.json({ vpcs })) + ); }; export const WithAwsPermissionsError = () => ; -WithAwsPermissionsError.parameters = { - msw: { - handlers: [ - http.post( - cfg.api.awsDatabaseVpcsPath, - () => - HttpResponse.json( - { - message: 'StatusCode: 403, RequestID: operation error', - }, - { status: 403 } - ), - { once: true } - ), - http.post(cfg.api.awsDatabaseVpcsPath, () => HttpResponse.json({ vpcs })), - http.post(cfg.api.awsRdsDbListPath, () => - HttpResponse.json({ databases: [] }) - ), - ], - }, +WithAwsPermissionsError.beforeEach = ({ msw }) => { + msw.use( + http.post( + cfg.api.awsDatabaseVpcsPath, + () => + HttpResponse.json( + { + message: 'StatusCode: 403, RequestID: operation error', + }, + { status: 403 } + ), + { once: true } + ), + http.post(cfg.api.awsDatabaseVpcsPath, () => HttpResponse.json({ vpcs })), + http.post(cfg.api.awsRdsDbListPath, () => + HttpResponse.json({ databases: [] }) + ) + ); }; export const WithDbListError = () => ; -WithDbListError.parameters = { - msw: { - handlers: [ - http.post(cfg.api.awsDatabaseVpcsPath, () => - HttpResponse.json({ - vpcs, - }) - ), - http.post(cfg.api.awsRdsDbListPath, () => - HttpResponse.json( - { - message: 'Whoops, fetching aws databases error', - }, - { status: 403 } - ) - ), - ], - }, +WithDbListError.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.api.awsDatabaseVpcsPath, () => + HttpResponse.json({ + vpcs, + }) + ), + http.post(cfg.api.awsRdsDbListPath, () => + HttpResponse.json( + { + message: 'Whoops, fetching aws databases error', + }, + { status: 403 } + ) + ) + ); }; export const WithOneOfDbListError = () => ; -WithOneOfDbListError.parameters = { - msw: { - handlers: [ - http.get(databasesPathWithoutQuery, () => - HttpResponse.json({ items: [rdsInstances[2]] }) - ), - http.post(databasesPathWithoutQuery, () => HttpResponse.json({})), - http.post(cfg.api.awsDatabaseVpcsPath, () => - HttpResponse.json({ - vpcs, - }) - ), - http.post(cfg.api.awsRdsDbListPath, async req => { - return (await req.request.json())['rdsType'] === 'instance' - ? HttpResponse.json({ databases: rdsInstances }) - : HttpResponse.json( - { - message: 'Whoops, fetching another aws databases error', - }, - { status: 403 } - ); - }), - ], - }, +WithOneOfDbListError.beforeEach = ({ msw }) => { + msw.use( + http.get(databasesPathWithoutQuery, () => + HttpResponse.json({ items: [rdsInstances[2]] }) + ), + http.post(databasesPathWithoutQuery, () => HttpResponse.json({})), + http.post(cfg.api.awsDatabaseVpcsPath, () => + HttpResponse.json({ + vpcs, + }) + ), + http.post(cfg.api.awsRdsDbListPath, async req => { + return (await req.request.json())['rdsType'] === 'instance' + ? HttpResponse.json({ databases: rdsInstances }) + : HttpResponse.json( + { + message: 'Whoops, fetching another aws databases error', + }, + { status: 403 } + ); + }) + ); }; const Component = () => { diff --git a/web/packages/teleport/src/Discover/Database/SetupAccess/SetupAccess.story.tsx b/web/packages/teleport/src/Discover/Database/SetupAccess/SetupAccess.story.tsx index 91f46ad136c..56304f9def9 100644 --- a/web/packages/teleport/src/Discover/Database/SetupAccess/SetupAccess.story.tsx +++ b/web/packages/teleport/src/Discover/Database/SetupAccess/SetupAccess.story.tsx @@ -33,18 +33,17 @@ import SetupAccess from './SetupAccess'; export default { title: 'Teleport/Discover/Database/SetupAccess', - parameters: { - msw: { - handlers: { - fetchUser: http.get(cfg.api.userWithUsernamePath, () => - HttpResponse.json({ - name: 'llama', - roles: ['access'], - traits: dynamicTraits, - }) - ), - }, - }, + + beforeEach({ msw }) { + msw.use( + http.get(cfg.api.userWithUsernamePath, () => + HttpResponse.json({ + name: 'llama', + roles: ['access'], + traits: dynamicTraits, + }) + ) + ); }, }; @@ -61,14 +60,8 @@ export const NoTraits = () => { ); }; -NoTraits.parameters = { - msw: { - handlers: { - fetchUser: [ - http.get(cfg.api.userWithUsernamePath, () => HttpResponse.json({})), - ], - }, - }, +NoTraits.beforeEach = ({ msw }) => { + msw.use(http.get(cfg.api.userWithUsernamePath, () => HttpResponse.json({}))); }; export const WithTraitsAwsPostgres = () => ( diff --git a/web/packages/teleport/src/Discover/Kubernetes/EnrollEKSCluster/Dialogs.story.tsx b/web/packages/teleport/src/Discover/Kubernetes/EnrollEKSCluster/Dialogs.story.tsx index d662e726e33..655ac76f467 100644 --- a/web/packages/teleport/src/Discover/Kubernetes/EnrollEKSCluster/Dialogs.story.tsx +++ b/web/packages/teleport/src/Discover/Kubernetes/EnrollEKSCluster/Dialogs.story.tsx @@ -82,14 +82,12 @@ export const AgentWaitingDialogStory = () => ( ); AgentWaitingDialogStory.storyName = 'AgentWaitingDialog'; -AgentWaitingDialogStory.parameters = { - msw: { - handlers: [ - http.get(cfg.api.kubernetesPath, () => { - return delay('infinite'); - }), - ], - }, +AgentWaitingDialogStory.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.api.kubernetesPath, () => { + return delay('infinite'); + }) + ); }; export const AgentWaitingDialogSuccess = () => ( @@ -111,14 +109,12 @@ export const AgentWaitingDialogSuccess = () => ( ); -AgentWaitingDialogSuccess.parameters = { - msw: { - handlers: [ - http.get(cfg.api.kubernetesPath, () => { - return delay('infinite'); - }), - ], - }, +AgentWaitingDialogSuccess.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.api.kubernetesPath, () => { + return delay('infinite'); + }) + ); }; const helmCommandProps = { @@ -191,17 +187,15 @@ export const ManualHelmDialogStory = () => { ); }; ManualHelmDialogStory.storyName = 'ManualHelmDialog'; -ManualHelmDialogStory.parameters = { - msw: { - handlers: [ - http.post(cfg.api.discoveryJoinToken.createV2, () => { - return HttpResponse.json({ - id: 'token-id', - suggestedLabels: [ - { name: INTERNAL_RESOURCE_ID_LABEL_KEY, value: 'resource-id' }, - ], - }); - }), - ], - }, +ManualHelmDialogStory.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.api.discoveryJoinToken.createV2, () => { + return HttpResponse.json({ + id: 'token-id', + suggestedLabels: [ + { name: INTERNAL_RESOURCE_ID_LABEL_KEY, value: 'resource-id' }, + ], + }); + }) + ); }; diff --git a/web/packages/teleport/src/Discover/Kubernetes/EnrollEKSCluster/EnrollEksCluster.story.tsx b/web/packages/teleport/src/Discover/Kubernetes/EnrollEKSCluster/EnrollEksCluster.story.tsx index cb1e125cbce..d9477e67d06 100644 --- a/web/packages/teleport/src/Discover/Kubernetes/EnrollEKSCluster/EnrollEksCluster.story.tsx +++ b/web/packages/teleport/src/Discover/Kubernetes/EnrollEKSCluster/EnrollEksCluster.story.tsx @@ -94,25 +94,23 @@ const discoveryConfigHandler = http.post(cfg.api.discoveryConfigPath, () => export const ClustersList = () => ; -ClustersList.parameters = { - msw: { - handlers: [ - tokenHandler, - successEnrollmentHandler, - discoveryConfigHandler, - http.post(cfg.getListEKSClustersUrl(integrationName), () => { - { - return HttpResponse.json({ clusters: eksClusters }); - } - }), - http.get( - cfg.getKubernetesUrl(getUserContext().cluster.clusterId, {}), - () => { - return HttpResponse.json({ items: kubeServers }); - } - ), - ], - }, +ClustersList.beforeEach = ({ msw }) => { + msw.use( + tokenHandler, + successEnrollmentHandler, + discoveryConfigHandler, + http.post(cfg.getListEKSClustersUrl(integrationName), () => { + { + return HttpResponse.json({ clusters: eksClusters }); + } + }), + http.get( + cfg.getKubernetesUrl(getUserContext().cluster.clusterId, {}), + () => { + return HttpResponse.json({ items: kubeServers }); + } + ) + ); }; export const ClustersListInCloud = () => { @@ -122,121 +120,111 @@ export const ClustersListInCloud = () => { return ; }; -ClustersListInCloud.parameters = { - msw: { - handlers: [ - tokenHandler, - successEnrollmentHandler, - discoveryConfigHandler, - http.post(cfg.getListEKSClustersUrl(integrationName), () => { - { - return HttpResponse.json({ clusters: eksClusters }); - } - }), - http.get( - cfg.getKubernetesUrl(getUserContext().cluster.clusterId, {}), - () => { - return HttpResponse.json({ items: kubeServers }); - } - ), - ], - }, +ClustersListInCloud.beforeEach = ({ msw }) => { + msw.use( + tokenHandler, + successEnrollmentHandler, + discoveryConfigHandler, + http.post(cfg.getListEKSClustersUrl(integrationName), () => { + { + return HttpResponse.json({ clusters: eksClusters }); + } + }), + http.get( + cfg.getKubernetesUrl(getUserContext().cluster.clusterId, {}), + () => { + return HttpResponse.json({ items: kubeServers }); + } + ) + ); }; export const WithAwsPermissionsError = () => ; -WithAwsPermissionsError.parameters = { - msw: { - handlers: [ - tokenHandler, - http.post(cfg.getListEKSClustersUrl(integrationName), () => - HttpResponse.json( - { message: 'StatusCode: 403, RequestID: operation error' }, - { status: 403 } - ) - ), - ], - }, +WithAwsPermissionsError.beforeEach = ({ msw }) => { + msw.use( + tokenHandler, + http.post(cfg.getListEKSClustersUrl(integrationName), () => + HttpResponse.json( + { message: 'StatusCode: 403, RequestID: operation error' }, + { status: 403 } + ) + ) + ); }; export const WithEnrollmentError = () => ; -WithEnrollmentError.parameters = { - msw: { - handlers: [ - tokenHandler, - http.post(cfg.getListEKSClustersUrl(integrationName), () => { - { - return HttpResponse.json({ clusters: eksClusters }); - } - }), - http.get( - cfg.getKubernetesUrl(getUserContext().cluster.clusterId, {}), - () => { - return HttpResponse.json({ items: kubeServers }); - } - ), - http.post(cfg.getEnrollEksClusterUrl(integrationName), async () => { - await delay(1000); - return HttpResponse.json({ - results: [ - { clusterName: 'EKS1', error: 'something bad happened' }, - { clusterName: 'EKS3', error: 'something bad happened' }, - ], - }); - }), - ], - }, +WithEnrollmentError.beforeEach = ({ msw }) => { + msw.use( + tokenHandler, + http.post(cfg.getListEKSClustersUrl(integrationName), () => { + { + return HttpResponse.json({ clusters: eksClusters }); + } + }), + http.get( + cfg.getKubernetesUrl(getUserContext().cluster.clusterId, {}), + () => { + return HttpResponse.json({ items: kubeServers }); + } + ), + http.post(cfg.getEnrollEksClusterUrl(integrationName), async () => { + await delay(1000); + return HttpResponse.json({ + results: [ + { clusterName: 'EKS1', error: 'something bad happened' }, + { clusterName: 'EKS3', error: 'something bad happened' }, + ], + }); + }) + ); }; export const WithAlreadyExistsError = () => ( ); -WithAlreadyExistsError.parameters = { - msw: { - handlers: [ - tokenHandler, - http.post(cfg.getListEKSClustersUrl(integrationName), () => { - { - return HttpResponse.json({ clusters: eksClusters }); - } - }), - http.get( - cfg.getKubernetesUrl(getUserContext().cluster.clusterId, {}), - () => { - return HttpResponse.json({ items: kubeServers }); - } - ), - http.post(cfg.getEnrollEksClusterUrl(integrationName), async () => { - await delay(1000); - return HttpResponse.json({ - results: [ - { - clusterName: 'EKS1', - error: 'teleport-kube-agent is already installed on the cluster', - }, - ], - }); - }), - ], - }, +WithAlreadyExistsError.beforeEach = ({ msw }) => { + msw.use( + tokenHandler, + http.post(cfg.getListEKSClustersUrl(integrationName), () => { + { + return HttpResponse.json({ clusters: eksClusters }); + } + }), + http.get( + cfg.getKubernetesUrl(getUserContext().cluster.clusterId, {}), + () => { + return HttpResponse.json({ items: kubeServers }); + } + ), + http.post(cfg.getEnrollEksClusterUrl(integrationName), async () => { + await delay(1000); + return HttpResponse.json({ + results: [ + { + clusterName: 'EKS1', + error: 'teleport-kube-agent is already installed on the cluster', + }, + ], + }); + }) + ); }; export const WithOtherError = () => ; -WithOtherError.parameters = { - msw: { - handlers: [ - tokenHandler, - http.post(cfg.getListEKSClustersUrl(integrationName), () => - HttpResponse.json( - { - error: { message: 'Whoops, something went wrong.' }, - }, - { status: 503 } - ) - ), - ], - }, +WithOtherError.beforeEach = ({ msw }) => { + msw.use( + tokenHandler, + http.post(cfg.getListEKSClustersUrl(integrationName), () => + HttpResponse.json( + { + error: { message: 'Whoops, something went wrong.' }, + }, + { status: 503 } + ) + ) + ); }; const agentMeta: AgentMeta = { diff --git a/web/packages/teleport/src/Discover/Kubernetes/SelfHosted/HelmChart/HelmChart.story.tsx b/web/packages/teleport/src/Discover/Kubernetes/SelfHosted/HelmChart/HelmChart.story.tsx index b29df93407e..240b4afc8e9 100644 --- a/web/packages/teleport/src/Discover/Kubernetes/SelfHosted/HelmChart/HelmChart.story.tsx +++ b/web/packages/teleport/src/Discover/Kubernetes/SelfHosted/HelmChart/HelmChart.story.tsx @@ -52,18 +52,17 @@ export default { }; export const Polling: StoryObj = { - parameters: { - msw: { - handlers: [ - http.get(kubePathWithoutQuery, async () => { - await delay('infinite'); - }), - http.post(cfg.api.discoveryJoinToken.createV2, () => - HttpResponse.json(rawJoinToken) - ), - ], - }, + beforeEach({ msw }) { + msw.use( + http.get(kubePathWithoutQuery, async () => { + await delay('infinite'); + }), + http.post(cfg.api.discoveryJoinToken.createV2, () => + HttpResponse.json(rawJoinToken) + ) + ); }, + render() { return ( @@ -74,18 +73,17 @@ export const Polling: StoryObj = { }; export const PollingSuccess: StoryObj = { - parameters: { - msw: { - handlers: [ - http.get(kubePathWithoutQuery, () => { - return HttpResponse.json({ items: [{}] }); - }), - http.post(cfg.api.discoveryJoinToken.createV2, () => - HttpResponse.json(rawJoinToken) - ), - ], - }, + beforeEach({ msw }) { + msw.use( + http.get(kubePathWithoutQuery, () => { + return HttpResponse.json({ items: [{}] }); + }), + http.post(cfg.api.discoveryJoinToken.createV2, () => + HttpResponse.json(rawJoinToken) + ) + ); }, + render() { return ( @@ -99,18 +97,17 @@ export const PollingSuccess: StoryObj = { // to reduce this time, requires rewriting component in a way // that can mock the SHOW_HINT_TIMEOUT for window.setTimeout export const PollingError: StoryObj = { - parameters: { - msw: { - handlers: [ - http.get(kubePathWithoutQuery, async () => { - await delay('infinite'); - }), - http.post(cfg.api.discoveryJoinToken.createV2, () => - HttpResponse.json(rawJoinToken) - ), - ], - }, + beforeEach({ msw }) { + msw.use( + http.get(kubePathWithoutQuery, async () => { + await delay('infinite'); + }), + http.post(cfg.api.discoveryJoinToken.createV2, () => + HttpResponse.json(rawJoinToken) + ) + ); }, + render() { return ( @@ -121,15 +118,14 @@ export const PollingError: StoryObj = { }; export const Processing: StoryObj = { - parameters: { - msw: { - handlers: [ - http.post(cfg.api.discoveryJoinToken.createV2, async () => { - await delay('infinite'); - }), - ], - }, + beforeEach({ msw }) { + msw.use( + http.post(cfg.api.discoveryJoinToken.createV2, async () => { + await delay('infinite'); + }) + ); }, + render() { return ( @@ -140,20 +136,19 @@ export const Processing: StoryObj = { }; export const Failed: StoryObj = { - parameters: { - msw: { - handlers: [ - http.post(cfg.api.discoveryJoinToken.createV2, () => - HttpResponse.json( - { - error: { message: 'Whoops, something went wrong.' }, - }, - { status: 400 } - ) - ), - ], - }, + beforeEach({ msw }) { + msw.use( + http.post(cfg.api.discoveryJoinToken.createV2, () => + HttpResponse.json( + { + error: { message: 'Whoops, something went wrong.' }, + }, + { status: 400 } + ) + ) + ); }, + render() { return ( diff --git a/web/packages/teleport/src/Discover/Overview/IaCIntegrationOverview.story.tsx b/web/packages/teleport/src/Discover/Overview/IaCIntegrationOverview.story.tsx index 6142d9628ed..047056b0f53 100644 --- a/web/packages/teleport/src/Discover/Overview/IaCIntegrationOverview.story.tsx +++ b/web/packages/teleport/src/Discover/Overview/IaCIntegrationOverview.story.tsx @@ -224,191 +224,177 @@ const userTaskHandlers = [ export function Default() { return ; } -Default.parameters = { - msw: { - handlers: [statsHandler(), rulesHandler, ...userTaskHandlers], - }, +Default.beforeEach = ({ msw }) => { + msw.use(statsHandler(), rulesHandler, ...userTaskHandlers); }; export function Healthy() { return ; } -Healthy.parameters = { - msw: { - handlers: [ - statsHandler({ - unresolvedUserTasks: 0, - userTasks: [], - awsec2: { - rulesCount: 1, - resourcesFound: 10, - resourcesEnrollmentSuccess: 10, - resourcesEnrollmentFailed: 0, - syncStart: new Date(Date.now() - 3 * 60 * 1000).toISOString(), - syncEnd: new Date(Date.now() - 2 * 60 * 1000).toISOString(), - pollIntervalSeconds: 300, - }, - awsrds: { - rulesCount: 1, - resourcesFound: 5, - resourcesEnrollmentSuccess: 5, - resourcesEnrollmentFailed: 0, - syncStart: new Date(Date.now() - 3 * 60 * 1000).toISOString(), - syncEnd: new Date(Date.now() - 2 * 60 * 1000).toISOString(), - pollIntervalSeconds: 300, - }, - awseks: { - rulesCount: 1, - resourcesFound: 3, - resourcesEnrollmentSuccess: 3, - resourcesEnrollmentFailed: 0, - syncStart: new Date(Date.now() - 3 * 60 * 1000).toISOString(), - syncEnd: new Date(Date.now() - 2 * 60 * 1000).toISOString(), - pollIntervalSeconds: 300, - }, - }), - rulesHandler, - ], - }, +Healthy.beforeEach = ({ msw }) => { + msw.use( + statsHandler({ + unresolvedUserTasks: 0, + userTasks: [], + awsec2: { + rulesCount: 1, + resourcesFound: 10, + resourcesEnrollmentSuccess: 10, + resourcesEnrollmentFailed: 0, + syncStart: new Date(Date.now() - 3 * 60 * 1000).toISOString(), + syncEnd: new Date(Date.now() - 2 * 60 * 1000).toISOString(), + pollIntervalSeconds: 300, + }, + awsrds: { + rulesCount: 1, + resourcesFound: 5, + resourcesEnrollmentSuccess: 5, + resourcesEnrollmentFailed: 0, + syncStart: new Date(Date.now() - 3 * 60 * 1000).toISOString(), + syncEnd: new Date(Date.now() - 2 * 60 * 1000).toISOString(), + pollIntervalSeconds: 300, + }, + awseks: { + rulesCount: 1, + resourcesFound: 3, + resourcesEnrollmentSuccess: 3, + resourcesEnrollmentFailed: 0, + syncStart: new Date(Date.now() - 3 * 60 * 1000).toISOString(), + syncEnd: new Date(Date.now() - 2 * 60 * 1000).toISOString(), + pollIntervalSeconds: 300, + }, + }), + rulesHandler + ); }; export function CurrentlyScanning() { return ; } -CurrentlyScanning.parameters = { - msw: { - handlers: [ - statsHandler({ - unresolvedUserTasks: 0, - userTasks: [], - awsec2: { - rulesCount: 1, - resourcesFound: 10, - resourcesEnrollmentSuccess: 10, - resourcesEnrollmentFailed: 0, - syncStart: new Date(Date.now() - 3 * 60 * 1000).toISOString(), - syncEnd: new Date(Date.now() - 2 * 60 * 1000).toISOString(), - pollIntervalSeconds: 300, - }, - awsrds: { - rulesCount: 1, - resourcesFound: 5, - resourcesEnrollmentSuccess: 1, - resourcesEnrollmentFailed: 0, - syncStart: new Date(Date.now() - 30 * 1000).toISOString(), - pollIntervalSeconds: 300, - }, - awseks: { - rulesCount: 0, - }, - }), - rulesHandler, - ], - }, +CurrentlyScanning.beforeEach = ({ msw }) => { + msw.use( + statsHandler({ + unresolvedUserTasks: 0, + userTasks: [], + awsec2: { + rulesCount: 1, + resourcesFound: 10, + resourcesEnrollmentSuccess: 10, + resourcesEnrollmentFailed: 0, + syncStart: new Date(Date.now() - 3 * 60 * 1000).toISOString(), + syncEnd: new Date(Date.now() - 2 * 60 * 1000).toISOString(), + pollIntervalSeconds: 300, + }, + awsrds: { + rulesCount: 1, + resourcesFound: 5, + resourcesEnrollmentSuccess: 1, + resourcesEnrollmentFailed: 0, + syncStart: new Date(Date.now() - 30 * 1000).toISOString(), + pollIntervalSeconds: 300, + }, + awseks: { + rulesCount: 0, + }, + }), + rulesHandler + ); }; export function Loading() { return ; } -Loading.parameters = { - msw: { - handlers: [ - http.get(cfg.getIntegrationStatsUrl(integrationName), async () => { - await new Promise(() => {}); // Never resolves - }), - ], - }, +Loading.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.getIntegrationStatsUrl(integrationName), async () => { + await new Promise(() => {}); // Never resolves + }) + ); }; export function Error() { return ; } -Error.parameters = { - msw: { - handlers: [ - http.get(cfg.getIntegrationStatsUrl(integrationName), () => { - return HttpResponse.json( - { error: { message: 'Failed to fetch integration stats' } }, - { status: 500 } - ); - }), - ], - }, +Error.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.getIntegrationStatsUrl(integrationName), () => { + return HttpResponse.json( + { error: { message: 'Failed to fetch integration stats' } }, + { status: 500 } + ); + }) + ); }; export function AzureWithWildcardSubscription() { return ; } -AzureWithWildcardSubscription.parameters = { - msw: { - handlers: [ - http.get(cfg.getIntegrationStatsUrl(integrationName), () => - HttpResponse.json({ - name: integrationName, - subKind: IntegrationKind.AzureOidc, - unresolvedUserTasks: 0, - userTasks: [], - azurevm: { - rulesCount: 1, - resourcesFound: 8, - resourcesEnrollmentSuccess: 6, - resourcesEnrollmentFailed: 0, - syncStart: new Date(Date.now() - 3 * 60 * 1000).toISOString(), - syncEnd: new Date(Date.now() - 2 * 60 * 1000).toISOString(), - pollIntervalSeconds: 300, +AzureWithWildcardSubscription.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.getIntegrationStatsUrl(integrationName), () => + HttpResponse.json({ + name: integrationName, + subKind: IntegrationKind.AzureOidc, + unresolvedUserTasks: 0, + userTasks: [], + azurevm: { + rulesCount: 1, + resourcesFound: 8, + resourcesEnrollmentSuccess: 6, + resourcesEnrollmentFailed: 0, + syncStart: new Date(Date.now() - 3 * 60 * 1000).toISOString(), + syncEnd: new Date(Date.now() - 2 * 60 * 1000).toISOString(), + pollIntervalSeconds: 300, + }, + isManagedByTerraform: true, + }) + ), + http.get(`*/integrations/${integrationName}`, () => + HttpResponse.json({ + name: integrationName, + subKind: IntegrationKind.AzureOidc, + azureoidc: { + tenantId: 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee', + clientId: 'ffffffff-0000-1111-2222-333333333333', + managedIdentity: { + resourceGroup: 'my-resource-group', + region: 'eastus', }, - isManagedByTerraform: true, - }) - ), - http.get(`*/integrations/${integrationName}`, () => - HttpResponse.json({ - name: integrationName, - subKind: IntegrationKind.AzureOidc, - azureoidc: { - tenantId: 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee', - clientId: 'ffffffff-0000-1111-2222-333333333333', - managedIdentity: { - resourceGroup: 'my-resource-group', - region: 'eastus', - }, + }, + }) + ), + http.get(`*/integrations/${integrationName}/discoveryrules`, () => + HttpResponse.json({ + rules: [ + { + resourceType: 'vm', + region: 'eastus', + subscriptions: ['*'], + resourceGroups: [], + labelMatcher: [], }, - }) - ), - http.get(`*/integrations/${integrationName}/discoveryrules`, () => - HttpResponse.json({ - rules: [ - { - resourceType: 'vm', - region: 'eastus', - subscriptions: ['*'], - resourceGroups: [], - labelMatcher: [], - }, - ], - }) - ), - ], - }, + ], + }) + ) + ); }; export function SettingsError() { return ; } -SettingsError.parameters = { - msw: { - handlers: [ - statsHandler(), - http.get(`*/integrations/${integrationName}/discoveryrules`, () => { - return HttpResponse.json( - { - error: { - message: 'Failed to load integration rules', - }, +SettingsError.beforeEach = ({ msw }) => { + msw.use( + statsHandler(), + http.get(`*/integrations/${integrationName}/discoveryrules`, () => { + return HttpResponse.json( + { + error: { + message: 'Failed to load integration rules', }, - { status: 500 } - ); - }), - ...userTaskHandlers, - ], - }, + }, + { status: 500 } + ); + }), + ...userTaskHandlers + ); }; diff --git a/web/packages/teleport/src/Discover/Server/DiscoveryConfigSsm/DiscoveryConfigSsm.story.tsx b/web/packages/teleport/src/Discover/Server/DiscoveryConfigSsm/DiscoveryConfigSsm.story.tsx index 4b947988cfd..8e4d5fe4ad2 100644 --- a/web/packages/teleport/src/Discover/Server/DiscoveryConfigSsm/DiscoveryConfigSsm.story.tsx +++ b/web/packages/teleport/src/Discover/Server/DiscoveryConfigSsm/DiscoveryConfigSsm.story.tsx @@ -54,17 +54,15 @@ export const SuccessCloud = () => { cfg.isCloud = true; return ; }; -SuccessCloud.parameters = { - msw: { - handlers: [ - http.post(cfg.api.discoveryJoinToken.createV2, () => - HttpResponse.json({ id: 'token-id' }) - ), - http.post(cfg.api.discoveryConfigPath, () => - HttpResponse.json({ name: 'discovery-cfg-name' }) - ), - ], - }, +SuccessCloud.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.api.discoveryJoinToken.createV2, () => + HttpResponse.json({ id: 'token-id' }) + ), + http.post(cfg.api.discoveryConfigPath, () => + HttpResponse.json({ name: 'discovery-cfg-name' }) + ) + ); }; export const SuccessSelfHosted = () => ( @@ -78,54 +76,48 @@ export const SuccessSelfHosted = () => ( }} /> ); -SuccessSelfHosted.parameters = { - msw: { - handlers: [ - http.post(cfg.api.discoveryJoinToken.createV2, () => - HttpResponse.json({ id: 'token-id' }) - ), - http.post(cfg.api.discoveryConfigPath, () => - HttpResponse.json({ name: 'discovery-cfg-name' }) - ), - ], - }, +SuccessSelfHosted.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.api.discoveryJoinToken.createV2, () => + HttpResponse.json({ id: 'token-id' }) + ), + http.post(cfg.api.discoveryConfigPath, () => + HttpResponse.json({ name: 'discovery-cfg-name' }) + ) + ); }; export const Loading = () => { cfg.isCloud = true; return ; }; -Loading.parameters = { - msw: { - handlers: [ - http.post(cfg.api.discoveryJoinToken.createV2, () => - HttpResponse.json({ id: 'token-id' }) - ), - http.post(cfg.api.discoveryConfigPath, () => delay('infinite')), - ], - }, +Loading.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.api.discoveryJoinToken.createV2, () => + HttpResponse.json({ id: 'token-id' }) + ), + http.post(cfg.api.discoveryConfigPath, () => delay('infinite')) + ); }; export const Failed = () => { cfg.isCloud = true; return ; }; -Failed.parameters = { - msw: { - handlers: [ - http.post(cfg.api.discoveryJoinToken.createV2, () => - HttpResponse.json({ id: 'token-id' }) - ), - http.post(cfg.api.discoveryConfigPath, () => - HttpResponse.json( - { - message: 'Some kind of error message', - }, - { status: 403 } - ) - ), - ], - }, +Failed.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.api.discoveryJoinToken.createV2, () => + HttpResponse.json({ id: 'token-id' }) + ), + http.post(cfg.api.discoveryConfigPath, () => + HttpResponse.json( + { + message: 'Some kind of error message', + }, + { status: 403 } + ) + ) + ); }; const Component = ({ diff --git a/web/packages/teleport/src/Discover/Server/DownloadScript/DownloadScript.story.tsx b/web/packages/teleport/src/Discover/Server/DownloadScript/DownloadScript.story.tsx index 62cb90acde7..0fed5401a87 100644 --- a/web/packages/teleport/src/Discover/Server/DownloadScript/DownloadScript.story.tsx +++ b/web/packages/teleport/src/Discover/Server/DownloadScript/DownloadScript.story.tsx @@ -54,18 +54,17 @@ export default { }; export const Polling: StoryObj = { - parameters: { - msw: { - handlers: [ - http.get(nodesPathWithoutQuery, () => { - return delay('infinite'); - }), - http.post(cfg.api.discoveryJoinToken.createV2, () => { - return HttpResponse.json(joinToken); - }), - ], - }, + beforeEach({ msw }) { + msw.use( + http.get(nodesPathWithoutQuery, () => { + return delay('infinite'); + }), + http.post(cfg.api.discoveryJoinToken.createV2, () => { + return HttpResponse.json(joinToken); + }) + ); }, + render() { return ( @@ -76,19 +75,18 @@ export const Polling: StoryObj = { }; export const PollingSuccess: StoryObj = { - parameters: { - msw: { - handlers: [ - // Use default fetch token handler defined in mocks/handlers - http.get(nodesPathWithoutQuery, () => { - return HttpResponse.json({ items: [{}] }); - }), - http.post(cfg.api.discoveryJoinToken.createV2, () => { - return HttpResponse.json(joinToken); - }), - ], - }, + beforeEach({ msw }) { + msw.use( + // Use default fetch token handler defined in mocks/handlers + http.get(nodesPathWithoutQuery, () => { + return HttpResponse.json({ items: [{}] }); + }), + http.post(cfg.api.discoveryJoinToken.createV2, () => { + return HttpResponse.json(joinToken); + }) + ); }, + render() { return ( @@ -102,18 +100,17 @@ export const PollingSuccess: StoryObj = { // to reduce this time, requires rewriting component in a way // that can mock the SHOW_HINT_TIMEOUT for window.setTimeout export const PollingError: StoryObj = { - parameters: { - msw: { - handlers: [ - http.get(nodesPathWithoutQuery, () => { - return delay('infinite'); - }), - http.post(cfg.api.discoveryJoinToken.createV2, () => { - return HttpResponse.json(joinToken); - }), - ], - }, + beforeEach({ msw }) { + msw.use( + http.get(nodesPathWithoutQuery, () => { + return delay('infinite'); + }), + http.post(cfg.api.discoveryJoinToken.createV2, () => { + return HttpResponse.json(joinToken); + }) + ); }, + render() { return ( @@ -124,15 +121,14 @@ export const PollingError: StoryObj = { }; export const Processing: StoryObj = { - parameters: { - msw: { - handlers: [ - http.post(cfg.api.discoveryJoinToken.createV2, () => { - return delay('infinite'); - }), - ], - }, + beforeEach({ msw }) { + msw.use( + http.post(cfg.api.discoveryJoinToken.createV2, () => { + return delay('infinite'); + }) + ); }, + render() { return ( @@ -143,20 +139,19 @@ export const Processing: StoryObj = { }; export const Failed: StoryObj = { - parameters: { - msw: { - handlers: [ - http.post(cfg.api.discoveryJoinToken.createV2, () => { - return HttpResponse.json( - { - error: { message: 'Whoops, something went wrong.' }, - }, - { status: 500 } - ); - }), - ], - }, + beforeEach({ msw }) { + msw.use( + http.post(cfg.api.discoveryJoinToken.createV2, () => { + return HttpResponse.json( + { + error: { message: 'Whoops, something went wrong.' }, + }, + { status: 500 } + ); + }) + ); }, + render() { return ( diff --git a/web/packages/teleport/src/Discover/Shared/AwsAccount/AwsAccount.story.tsx b/web/packages/teleport/src/Discover/Shared/AwsAccount/AwsAccount.story.tsx index 97c1795299f..1a97ca754f6 100644 --- a/web/packages/teleport/src/Discover/Shared/AwsAccount/AwsAccount.story.tsx +++ b/web/packages/teleport/src/Discover/Shared/AwsAccount/AwsAccount.story.tsx @@ -49,33 +49,27 @@ const handlers = [ ]; export const Success = () => ; -Success.parameters = { - msw: { - handlers, - }, +Success.beforeEach = ({ msw }) => { + msw.use(...handlers); }; export const Loading = () => ; -Loading.parameters = { - msw: { - handlers: [http.get(cfg.getIntegrationsUrl(), () => delay('infinite'))], - }, +Loading.beforeEach = ({ msw }) => { + msw.use(http.get(cfg.getIntegrationsUrl(), () => delay('infinite'))); }; export const Failed = () => ; -Failed.parameters = { - msw: { - handlers: [ - http.get(cfg.getIntegrationsUrl(), () => - HttpResponse.json( - { - message: 'some kind of error', - }, - { status: 403 } - ) - ), - ], - }, +Failed.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.getIntegrationsUrl(), () => + HttpResponse.json( + { + message: 'some kind of error', + }, + { status: 403 } + ) + ) + ); }; export const NoPerm = () => ; diff --git a/web/packages/teleport/src/Discover/Shared/ConfigureDiscoveryService/ConfigureDiscoveryService.story.tsx b/web/packages/teleport/src/Discover/Shared/ConfigureDiscoveryService/ConfigureDiscoveryService.story.tsx index 1adea78c25e..6aec55f4dab 100644 --- a/web/packages/teleport/src/Discover/Shared/ConfigureDiscoveryService/ConfigureDiscoveryService.story.tsx +++ b/web/packages/teleport/src/Discover/Shared/ConfigureDiscoveryService/ConfigureDiscoveryService.story.tsx @@ -55,12 +55,8 @@ export const WithCreateConfig = () => { /> ); }; -WithCreateConfig.parameters = { - msw: { - handlers: [ - http.post(cfg.api.discoveryConfigPath, () => HttpResponse.json({})), - ], - }, +WithCreateConfig.beforeEach = ({ msw }) => { + msw.use(http.post(cfg.api.discoveryConfigPath, () => HttpResponse.json({}))); }; export const WithCreateConfigFailed = () => { @@ -71,23 +67,21 @@ export const WithCreateConfigFailed = () => { /> ); }; -WithCreateConfigFailed.parameters = { - msw: { - handlers: [ - http.post( - cfg.api.discoveryConfigPath, - () => - HttpResponse.json( - { - message: 'Whoops, creating config error', - }, - { status: 403 } - ), - { once: true } - ), - http.post(cfg.api.discoveryConfigPath, () => HttpResponse.json({})), - ], - }, +WithCreateConfigFailed.beforeEach = ({ msw }) => { + msw.use( + http.post( + cfg.api.discoveryConfigPath, + () => + HttpResponse.json( + { + message: 'Whoops, creating config error', + }, + { status: 403 } + ), + { once: true } + ), + http.post(cfg.api.discoveryConfigPath, () => HttpResponse.json({})) + ); }; const Component = ({ diff --git a/web/packages/teleport/src/Instances/Instances.story.tsx b/web/packages/teleport/src/Instances/Instances.story.tsx index 579fb61b128..3eb83a09ac1 100644 --- a/web/packages/teleport/src/Instances/Instances.story.tsx +++ b/web/packages/teleport/src/Instances/Instances.story.tsx @@ -47,39 +47,31 @@ type Story = StoryObj; export default meta; export const Loaded: Story = { - parameters: { - msw: { - handlers: [listInstancesSuccess], - }, + beforeEach({ msw }) { + msw.use(listInstancesSuccess); }, }; export const CacheInitializing: Story = { - parameters: { - msw: { - handlers: [ - listInstancesError( - 503, - 'inventory cache is not yet healthy, please try again in a few minutes' - ), - ], - }, + beforeEach({ msw }) { + msw.use( + listInstancesError( + 503, + 'inventory cache is not yet healthy, please try again in a few minutes' + ) + ); }, }; export const Loading: Story = { - parameters: { - msw: { - handlers: [listInstancesLoading], - }, + beforeEach({ msw }) { + msw.use(listInstancesLoading); }, }; export const Error: Story = { - parameters: { - msw: { - handlers: [listInstancesError(500, 'some error')], - }, + beforeEach({ msw }) { + msw.use(listInstancesError(500, 'some error')); }, }; @@ -88,10 +80,9 @@ export const NoInstancePermissions: Story = { hasInstanceListPermission: false, hasInstanceReadPermission: false, }, - parameters: { - msw: { - handlers: [listOnlyBotInstances], - }, + + beforeEach({ msw }) { + msw.use(listOnlyBotInstances); }, }; @@ -100,10 +91,9 @@ export const NoBotInstancePermissions: Story = { hasBotInstanceListPermission: false, hasBotInstanceReadPermission: false, }, - parameters: { - msw: { - handlers: [listOnlyRegularInstances], - }, + + beforeEach({ msw }) { + msw.use(listOnlyRegularInstances); }, }; @@ -114,10 +104,9 @@ export const NoPermissionsAtAll: Story = { hasBotInstanceListPermission: false, hasBotInstanceReadPermission: false, }, - parameters: { - msw: { - handlers: [listInstancesError(403, 'access denied')], - }, + + beforeEach({ msw }) { + msw.use(listInstancesError(403, 'access denied')); }, }; diff --git a/web/packages/teleport/src/Integrations/Enroll/AwsConsole/Access/Access.story.tsx b/web/packages/teleport/src/Integrations/Enroll/AwsConsole/Access/Access.story.tsx index ad8fed3679e..3daac05b8fc 100644 --- a/web/packages/teleport/src/Integrations/Enroll/AwsConsole/Access/Access.story.tsx +++ b/web/packages/teleport/src/Integrations/Enroll/AwsConsole/Access/Access.story.tsx @@ -59,16 +59,14 @@ export const NoProfiles = () => ( ); -NoProfiles.parameters = { - msw: { - handlers: [ - http.post(cfg.getAwsRolesAnywhereProfilesUrl(raName), () => { - return HttpResponse.json({ - profiles: [], - }); - }), - ], - }, +NoProfiles.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.getAwsRolesAnywhereProfilesUrl(raName), () => { + return HttpResponse.json({ + profiles: [], + }); + }) + ); }; export const WithProfiles = () => ( @@ -94,109 +92,107 @@ export const WithProfiles = () => ( ); -WithProfiles.parameters = { - msw: { - handlers: [ - http.post(cfg.getAwsRolesAnywhereProfilesUrl(raName), () => { - return HttpResponse.json({ - profiles: [ - { - arn: 'arn:aws:rolesanywhere:eu-west-2:123456789012:trust-anchor/foo', - enabled: true, - name: raName, - acceptRoleSessionName: false, - tags: { - 'teleport.dev/cluster': 'foo', - 'teleport.dev/integration': 'bar', - 'teleport.dev/origin': 'baz', - }, - roles: ['RoleA', 'RoleC'], - }, - { - arn: 'arn:aws:rolesanywhere:eu-west-2:123456789012:trust-anchor/bar', - enabled: true, - name: raName, - acceptRoleSessionName: false, - tags: { - 'teleport.dev/cluster': 'foo', - 'teleport.dev/integration': 'bar', - 'teleport.dev/origin': 'baz', - }, - roles: ['RoleB', 'RoleB'], - }, - { - arn: 'arn:aws:rolesanywhere:eu-west-2:123456789012:trust-anchor/baz', - enabled: true, - name: raName, - acceptRoleSessionName: false, - tags: { - 'teleport.dev/cluster': 'foo', - 'teleport.dev/integration': 'bar', - 'teleport.dev/origin': 'baz', - }, - }, - { - arn: 'arn:aws:rolesanywhere:eu-west-2:123456789012:trust-anchor/qux', - enabled: true, - name: raName, - acceptRoleSessionName: false, - roles: ['RoleB', 'RoleB'], - }, - { - arn: 'arn:aws:rolesanywhere:eu-west-2:123456789012:trust-anchor/foo', - enabled: true, - name: raName, - acceptRoleSessionName: false, - tags: { - 'teleport.dev/cluster': 'foo', - 'teleport.dev/integration': 'bar', - 'teleport.dev/origin': 'baz', - }, - roles: ['RoleA', 'RoleC'], - }, - { - arn: 'arn:aws:rolesanywhere:eu-west-2:123456789012:trust-anchor/bar', - enabled: true, - name: raName, - acceptRoleSessionName: false, - tags: { - 'teleport.dev/cluster': 'foo', - 'teleport.dev/integration': 'bar', - 'teleport.dev/origin': 'baz', - }, - roles: ['RoleB', 'RoleB'], - }, - { - arn: 'arn:aws:rolesanywhere:eu-west-2:123456789012:trust-anchor/baz', - enabled: true, - name: raName, - acceptRoleSessionName: false, - tags: { - 'teleport.dev/cluster': 'foo', - 'teleport.dev/integration': 'bar', - 'teleport.dev/origin': 'baz', - }, - }, - { - arn: 'arn:aws:rolesanywhere:eu-west-2:123456789012:trust-anchor/qux', - enabled: true, - name: raName, - acceptRoleSessionName: false, - roles: ['RoleB', 'RoleB'], - }, - ], - }); - }), - http.put(cfg.getIntegrationsUrl(raName), () => { - return HttpResponse.json( +WithProfiles.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.getAwsRolesAnywhereProfilesUrl(raName), () => { + return HttpResponse.json({ + profiles: [ { - error: { message: 'Filter baz invalid.' }, + arn: 'arn:aws:rolesanywhere:eu-west-2:123456789012:trust-anchor/foo', + enabled: true, + name: raName, + acceptRoleSessionName: false, + tags: { + 'teleport.dev/cluster': 'foo', + 'teleport.dev/integration': 'bar', + 'teleport.dev/origin': 'baz', + }, + roles: ['RoleA', 'RoleC'], }, - { status: 400 } - ); - }), - ], - }, + { + arn: 'arn:aws:rolesanywhere:eu-west-2:123456789012:trust-anchor/bar', + enabled: true, + name: raName, + acceptRoleSessionName: false, + tags: { + 'teleport.dev/cluster': 'foo', + 'teleport.dev/integration': 'bar', + 'teleport.dev/origin': 'baz', + }, + roles: ['RoleB', 'RoleB'], + }, + { + arn: 'arn:aws:rolesanywhere:eu-west-2:123456789012:trust-anchor/baz', + enabled: true, + name: raName, + acceptRoleSessionName: false, + tags: { + 'teleport.dev/cluster': 'foo', + 'teleport.dev/integration': 'bar', + 'teleport.dev/origin': 'baz', + }, + }, + { + arn: 'arn:aws:rolesanywhere:eu-west-2:123456789012:trust-anchor/qux', + enabled: true, + name: raName, + acceptRoleSessionName: false, + roles: ['RoleB', 'RoleB'], + }, + { + arn: 'arn:aws:rolesanywhere:eu-west-2:123456789012:trust-anchor/foo', + enabled: true, + name: raName, + acceptRoleSessionName: false, + tags: { + 'teleport.dev/cluster': 'foo', + 'teleport.dev/integration': 'bar', + 'teleport.dev/origin': 'baz', + }, + roles: ['RoleA', 'RoleC'], + }, + { + arn: 'arn:aws:rolesanywhere:eu-west-2:123456789012:trust-anchor/bar', + enabled: true, + name: raName, + acceptRoleSessionName: false, + tags: { + 'teleport.dev/cluster': 'foo', + 'teleport.dev/integration': 'bar', + 'teleport.dev/origin': 'baz', + }, + roles: ['RoleB', 'RoleB'], + }, + { + arn: 'arn:aws:rolesanywhere:eu-west-2:123456789012:trust-anchor/baz', + enabled: true, + name: raName, + acceptRoleSessionName: false, + tags: { + 'teleport.dev/cluster': 'foo', + 'teleport.dev/integration': 'bar', + 'teleport.dev/origin': 'baz', + }, + }, + { + arn: 'arn:aws:rolesanywhere:eu-west-2:123456789012:trust-anchor/qux', + enabled: true, + name: raName, + acceptRoleSessionName: false, + roles: ['RoleB', 'RoleB'], + }, + ], + }); + }), + http.put(cfg.getIntegrationsUrl(raName), () => { + return HttpResponse.json( + { + error: { message: 'Filter baz invalid.' }, + }, + { status: 400 } + ); + }) + ); }; export const NotFoundEnroll = () => ( @@ -216,19 +212,17 @@ export const NotFoundEnroll = () => ( ); -NotFoundEnroll.parameters = { - msw: { - handlers: [ - http.post(cfg.getAwsRolesAnywhereProfilesUrl(raName), () => { - return HttpResponse.json( - { - error: { message: 'Hidden 404 message' }, - }, - { status: 404 } - ); - }), - ], - }, +NotFoundEnroll.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.getAwsRolesAnywhereProfilesUrl(raName), () => { + return HttpResponse.json( + { + error: { message: 'Hidden 404 message' }, + }, + { status: 404 } + ); + }) + ); }; export const Edit = () => ( @@ -257,54 +251,52 @@ export const Edit = () => ( ); -Edit.parameters = { - msw: { - handlers: [ - http.get(cfg.getIntegrationsUrl(raName), () => { - return HttpResponse.json({ - name: raName, - kind: IntegrationKind, - subKind: IntegrationKind.AwsRa, - awsra: { - trustAnchorArn: 'foo', - profileSyncConfig: { - profileNameFilters: ['test-*', 'dev-*', 'staging-*'], - }, +Edit.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.getIntegrationsUrl(raName), () => { + return HttpResponse.json({ + name: raName, + kind: IntegrationKind, + subKind: IntegrationKind.AwsRa, + awsra: { + trustAnchorArn: 'foo', + profileSyncConfig: { + profileNameFilters: ['test-*', 'dev-*', 'staging-*'], }, - }); - }), - http.post(cfg.getAwsRolesAnywhereProfilesUrl(raName), () => { - return HttpResponse.json({ - profiles: [ - { - arn: 'arn:aws:rolesanywhere:eu-west-2:123456789012:trust-anchor/foo', - enabled: true, - name: raName, - acceptRoleSessionName: false, - tags: { - 'teleport.dev/cluster': 'foo', - 'teleport.dev/integration': 'bar', - 'teleport.dev/origin': 'baz', - }, - roles: ['RoleA', 'RoleC'], + }, + }); + }), + http.post(cfg.getAwsRolesAnywhereProfilesUrl(raName), () => { + return HttpResponse.json({ + profiles: [ + { + arn: 'arn:aws:rolesanywhere:eu-west-2:123456789012:trust-anchor/foo', + enabled: true, + name: raName, + acceptRoleSessionName: false, + tags: { + 'teleport.dev/cluster': 'foo', + 'teleport.dev/integration': 'bar', + 'teleport.dev/origin': 'baz', }, - { - arn: 'arn:aws:rolesanywhere:eu-west-2:123456789012:trust-anchor/bar', - enabled: true, - name: raName, - acceptRoleSessionName: false, - tags: { - 'teleport.dev/cluster': 'foo', - 'teleport.dev/integration': 'bar', - 'teleport.dev/origin': 'baz', - }, - roles: ['RoleB', 'RoleB'], + roles: ['RoleA', 'RoleC'], + }, + { + arn: 'arn:aws:rolesanywhere:eu-west-2:123456789012:trust-anchor/bar', + enabled: true, + name: raName, + acceptRoleSessionName: false, + tags: { + 'teleport.dev/cluster': 'foo', + 'teleport.dev/integration': 'bar', + 'teleport.dev/origin': 'baz', }, - ], - }); - }), - ], - }, + roles: ['RoleB', 'RoleB'], + }, + ], + }); + }) + ); }; export const EditError = () => ( @@ -333,57 +325,55 @@ export const EditError = () => ( ); -EditError.parameters = { - msw: { - handlers: [ - http.get(cfg.getIntegrationsUrl(raName), () => { - return HttpResponse.json( +EditError.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.getIntegrationsUrl(raName), () => { + return HttpResponse.json( + { + error: { message: 'Generic Bad Request' }, + }, + { status: 400 } + ); + }), + http.post(cfg.getAwsRolesAnywhereProfilesUrl(raName), () => { + return HttpResponse.json({ + profiles: [ { - error: { message: 'Generic Bad Request' }, + arn: 'arn:aws:rolesanywhere:eu-west-2:123456789012:trust-anchor/foo', + enabled: true, + name: raName, + acceptRoleSessionName: false, + tags: { + 'teleport.dev/cluster': 'foo', + 'teleport.dev/integration': 'bar', + 'teleport.dev/origin': 'baz', + }, + roles: ['RoleA', 'RoleC'], }, - { status: 400 } - ); - }), - http.post(cfg.getAwsRolesAnywhereProfilesUrl(raName), () => { - return HttpResponse.json({ - profiles: [ - { - arn: 'arn:aws:rolesanywhere:eu-west-2:123456789012:trust-anchor/foo', - enabled: true, - name: raName, - acceptRoleSessionName: false, - tags: { - 'teleport.dev/cluster': 'foo', - 'teleport.dev/integration': 'bar', - 'teleport.dev/origin': 'baz', - }, - roles: ['RoleA', 'RoleC'], - }, - { - arn: 'arn:aws:rolesanywhere:eu-west-2:123456789012:trust-anchor/bar', - enabled: true, - name: raName, - acceptRoleSessionName: false, - tags: { - 'teleport.dev/cluster': 'foo', - 'teleport.dev/integration': 'bar', - 'teleport.dev/origin': 'baz', - }, - roles: ['RoleB', 'RoleB'], - }, - ], - }); - }), - http.put(cfg.getIntegrationsUrl(raName), () => { - return HttpResponse.json( { - error: { message: 'Filter baz invalid.' }, + arn: 'arn:aws:rolesanywhere:eu-west-2:123456789012:trust-anchor/bar', + enabled: true, + name: raName, + acceptRoleSessionName: false, + tags: { + 'teleport.dev/cluster': 'foo', + 'teleport.dev/integration': 'bar', + 'teleport.dev/origin': 'baz', + }, + roles: ['RoleB', 'RoleB'], }, - { status: 400 } - ); - }), - ], - }, + ], + }); + }), + http.put(cfg.getIntegrationsUrl(raName), () => { + return HttpResponse.json( + { + error: { message: 'Filter baz invalid.' }, + }, + { status: 400 } + ); + }) + ); }; export const NotFoundEdit = () => ( @@ -420,19 +410,17 @@ export const NotFoundEdit = () => ( ); -NotFoundEdit.parameters = { - msw: { - handlers: [ - http.post(cfg.getAwsRolesAnywhereProfilesUrl(raName), () => { - return HttpResponse.json( - { - error: { message: 'Hidden 404 message' }, - }, - { status: 404 } - ); - }), - ], - }, +NotFoundEdit.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.getAwsRolesAnywhereProfilesUrl(raName), () => { + return HttpResponse.json( + { + error: { message: 'Hidden 404 message' }, + }, + { status: 404 } + ); + }) + ); }; export const BadRequest = () => ( @@ -452,19 +440,17 @@ export const BadRequest = () => ( ); -BadRequest.parameters = { - msw: { - handlers: [ - http.post(cfg.getAwsRolesAnywhereProfilesUrl(raName), () => { - return HttpResponse.json( - { - error: { message: 'Generic Bad Request' }, - }, - { status: 400 } - ); - }), - ], - }, +BadRequest.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.getAwsRolesAnywhereProfilesUrl(raName), () => { + return HttpResponse.json( + { + error: { message: 'Generic Bad Request' }, + }, + { status: 400 } + ); + }) + ); }; export const WithoutAccess = () => { @@ -506,14 +492,12 @@ export const MissingState = () => ( ); -MissingState.parameters = { - msw: { - handlers: [ - http.post(cfg.getAwsRolesAnywhereProfilesUrl(raName), () => { - return HttpResponse.json({ - profiles: [], - }); - }), - ], - }, +MissingState.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.getAwsRolesAnywhereProfilesUrl(raName), () => { + return HttpResponse.json({ + profiles: [], + }); + }) + ); }; diff --git a/web/packages/teleport/src/Integrations/Enroll/AwsConsole/IamIntegration/IamIntegration.story.tsx b/web/packages/teleport/src/Integrations/Enroll/AwsConsole/IamIntegration/IamIntegration.story.tsx index d936b70c8fc..c58ebba0a8a 100644 --- a/web/packages/teleport/src/Integrations/Enroll/AwsConsole/IamIntegration/IamIntegration.story.tsx +++ b/web/packages/teleport/src/Integrations/Enroll/AwsConsole/IamIntegration/IamIntegration.story.tsx @@ -73,58 +73,56 @@ arn:aws:iam::123456789012:role/baz`} ); -Loaded.parameters = { - msw: { - handlers: [ - http.post(cfg.getValidateAWSRolesAnywhereIntegrationUrl('test'), () => { - return HttpResponse.json({}); - }), - http.post(cfg.getValidateAWSRolesAnywhereIntegrationUrl('zero'), () => { - return HttpResponse.json({}); - }), - http.post(cfg.getValidateAWSRolesAnywhereIntegrationUrl('error'), () => { - return HttpResponse.json({}); - }), - http.post( - cfg.getValidateAWSRolesAnywhereIntegrationUrl('duplicate'), - () => { - return HttpResponse.json( - { - message: 'Integration name already exists', - }, - { status: 400 } - ); - } - ), - http.post(cfg.getAwsRolesAnywherePingUrl('test'), () => { - return HttpResponse.json({ - profileCount: 3, - accountID: 'fc2ef183-2ac0-4836-9d7d-ff873c99e733', - arn: 'arn:aws:rolesanywhere:eu-west-2:123456789012:trust-anchor/foo', - userId: 'edd13a04-9956-4ef2-9ef5-7b0169e1cd5b', - }); - }), - http.post(cfg.getAwsRolesAnywherePingUrl('zero'), () => { - return HttpResponse.json({ - profileCount: 0, - accountID: 'fc2ef183-2ac0-4836-9d7d-ff873c99e733', - arn: 'arn:aws:rolesanywhere:eu-west-2:123456789012:trust-anchor/foo', - userId: 'edd13a04-9956-4ef2-9ef5-7b0169e1cd5b', - }); - }), - http.post(cfg.getAwsRolesAnywherePingUrl('error'), () => { +Loaded.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.getValidateAWSRolesAnywhereIntegrationUrl('test'), () => { + return HttpResponse.json({}); + }), + http.post(cfg.getValidateAWSRolesAnywhereIntegrationUrl('zero'), () => { + return HttpResponse.json({}); + }), + http.post(cfg.getValidateAWSRolesAnywhereIntegrationUrl('error'), () => { + return HttpResponse.json({}); + }), + http.post( + cfg.getValidateAWSRolesAnywhereIntegrationUrl('duplicate'), + () => { return HttpResponse.json( { - message: 'some error message', + message: 'Integration name already exists', }, - { status: 500 } + { status: 400 } ); - }), - http.post(cfg.getIntegrationsUrl(), () => { - return HttpResponse.json({ status: 200 }); - }), - ], - }, + } + ), + http.post(cfg.getAwsRolesAnywherePingUrl('test'), () => { + return HttpResponse.json({ + profileCount: 3, + accountID: 'fc2ef183-2ac0-4836-9d7d-ff873c99e733', + arn: 'arn:aws:rolesanywhere:eu-west-2:123456789012:trust-anchor/foo', + userId: 'edd13a04-9956-4ef2-9ef5-7b0169e1cd5b', + }); + }), + http.post(cfg.getAwsRolesAnywherePingUrl('zero'), () => { + return HttpResponse.json({ + profileCount: 0, + accountID: 'fc2ef183-2ac0-4836-9d7d-ff873c99e733', + arn: 'arn:aws:rolesanywhere:eu-west-2:123456789012:trust-anchor/foo', + userId: 'edd13a04-9956-4ef2-9ef5-7b0169e1cd5b', + }); + }), + http.post(cfg.getAwsRolesAnywherePingUrl('error'), () => { + return HttpResponse.json( + { + message: 'some error message', + }, + { status: 500 } + ); + }), + http.post(cfg.getIntegrationsUrl(), () => { + return HttpResponse.json({ status: 200 }); + }) + ); }; export const WithoutAccess = () => { diff --git a/web/packages/teleport/src/Integrations/status/AwsOidc/AwsOidcDashboard.story.tsx b/web/packages/teleport/src/Integrations/status/AwsOidc/AwsOidcDashboard.story.tsx index de726e55424..c076f184546 100644 --- a/web/packages/teleport/src/Integrations/status/AwsOidc/AwsOidcDashboard.story.tsx +++ b/web/packages/teleport/src/Integrations/status/AwsOidc/AwsOidcDashboard.story.tsx @@ -33,17 +33,16 @@ import { makeAwsOidcStatusContextState } from './testHelpers/makeAwsOidcStatusCo export default { title: 'Teleport/Integrations/AwsOidc', - parameters: { - msw: { - handlers: [ - http.get(cfg.getIntegrationsUrl(), () => { - return HttpResponse.json({ - items: [], - nextKey: '', - }); - }), - ], - }, + + beforeEach({ msw }) { + msw.use( + http.get(cfg.getIntegrationsUrl(), () => { + return HttpResponse.json({ + items: [], + nextKey: '', + }); + }) + ); }, }; diff --git a/web/packages/teleport/src/Integrations/status/AwsOidc/Details/Details.story.tsx b/web/packages/teleport/src/Integrations/status/AwsOidc/Details/Details.story.tsx index 7976efbc27e..29628ed967f 100644 --- a/web/packages/teleport/src/Integrations/status/AwsOidc/Details/Details.story.tsx +++ b/web/packages/teleport/src/Integrations/status/AwsOidc/Details/Details.story.tsx @@ -75,20 +75,18 @@ export function EC2() { ); } -EC2.parameters = { - msw: { - handlers: [ - http.get( - cfg.getIntegrationRulesUrl(integrationName, AwsResource.ec2), - () => { - return HttpResponse.json({ - rules: rules, - nextKey: '1', - }); - } - ), - ], - }, +EC2.beforeEach = ({ msw }) => { + msw.use( + http.get( + cfg.getIntegrationRulesUrl(integrationName, AwsResource.ec2), + () => { + return HttpResponse.json({ + rules: rules, + nextKey: '1', + }); + } + ) + ); }; // Empty eks details table @@ -117,20 +115,18 @@ export function EKS() { ); } -EKS.parameters = { - msw: { - handlers: [ - http.get( - cfg.getIntegrationRulesUrl(integrationName, AwsResource.eks), - () => { - return HttpResponse.json({ - rules: rules, - nextKey: '1', - }); - } - ), - ], - }, +EKS.beforeEach = ({ msw }) => { + msw.use( + http.get( + cfg.getIntegrationRulesUrl(integrationName, AwsResource.eks), + () => { + return HttpResponse.json({ + rules: rules, + nextKey: '1', + }); + } + ) + ); }; // Empty rds details table @@ -159,44 +155,42 @@ export function RDS() { ); } -RDS.parameters = { - msw: { - handlers: [ - http.get( - cfg.getIntegrationRulesUrl(integrationName, AwsResource.rds), - () => { - return HttpResponse.json({ - rules: rules, - nextKey: '1', - }); - } - ), - http.post( - cfg.getAwsOidcDatabaseServices(integrationName, AwsResource.rds, []), - () => { - return HttpResponse.json({ - services: [ - { - name: 'dev-db', - matchingLabels: [{ name: 'region', value: 'us-west-2' }], - }, - { - name: 'dev-db', - matchingLabels: [ - { name: 'region', value: 'us-west-1' }, - { name: '*', value: '*' }, - ], - }, - { - name: 'staging-db', - matchingLabels: [{ name: '*', value: '*' }], - }, - ], - }); - } - ), - ], - }, +RDS.beforeEach = ({ msw }) => { + msw.use( + http.get( + cfg.getIntegrationRulesUrl(integrationName, AwsResource.rds), + () => { + return HttpResponse.json({ + rules: rules, + nextKey: '1', + }); + } + ), + http.post( + cfg.getAwsOidcDatabaseServices(integrationName, AwsResource.rds, []), + () => { + return HttpResponse.json({ + services: [ + { + name: 'dev-db', + matchingLabels: [{ name: 'region', value: 'us-west-2' }], + }, + { + name: 'dev-db', + matchingLabels: [ + { name: 'region', value: 'us-west-1' }, + { name: '*', value: '*' }, + ], + }, + { + name: 'staging-db', + matchingLabels: [{ name: '*', value: '*' }], + }, + ], + }); + } + ) + ); }; function getPath(resource: AwsResource) { diff --git a/web/packages/teleport/src/Integrations/status/AwsOidc/Tasks/Tasks.story.tsx b/web/packages/teleport/src/Integrations/status/AwsOidc/Tasks/Tasks.story.tsx index 90ac9c74d54..3f45d83b8df 100644 --- a/web/packages/teleport/src/Integrations/status/AwsOidc/Tasks/Tasks.story.tsx +++ b/web/packages/teleport/src/Integrations/status/AwsOidc/Tasks/Tasks.story.tsx @@ -46,20 +46,18 @@ export function TasksEmpty() { ); } -TasksEmpty.parameters = { - msw: { - handlers: [ - http.get( - cfg.getIntegrationUserTasksListUrl(integrationName, TaskState.Open), - () => { - return HttpResponse.json({ - items: [], - nextKey: '1', - }); - } - ), - ], - }, +TasksEmpty.beforeEach = ({ msw }) => { + msw.use( + http.get( + cfg.getIntegrationUserTasksListUrl(integrationName, TaskState.Open), + () => { + return HttpResponse.json({ + items: [], + nextKey: '1', + }); + } + ) + ); }; // Populated tasks table @@ -76,59 +74,58 @@ export function TaskView() { ); } -TaskView.parameters = { - msw: { - handlers: [ - http.get( - cfg.getIntegrationUserTasksListUrl(integrationName, TaskState.Open), - () => { - return HttpResponse.json({ - items: [ - { - name: 'rds-detail', - taskType: 'discover-rds', - state: TaskState.Open, - issueType: 'rds-auth-disabled', - integration: integrationName, - lastStateChange: '2022-02-12T20:32:19.482607921Z', - // lib/usertasks/descriptions/rds-iam-auth-disabled.md - description: ` - # IAM Auth disabled +TaskView.beforeEach = ({ msw }) => { + msw.use( + http.get( + cfg.getIntegrationUserTasksListUrl(integrationName, TaskState.Open), + () => { + return HttpResponse.json({ + items: [ + { + name: 'rds-detail', + taskType: 'discover-rds', + state: TaskState.Open, + issueType: 'rds-auth-disabled', + integration: integrationName, + lastStateChange: '2022-02-12T20:32:19.482607921Z', + // lib/usertasks/descriptions/rds-iam-auth-disabled.md + description: ` + # IAM Auth disabled The Teleport Database Service uses [IAM authentication](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.html) to communicate with RDS. The following RDS databases do not have IAM authentication enabled. You can enable by modifying the IAM DB Authentication property of the database. - `, - title: 'rds-auth-disabled', - discoverRds: { - databases: { - 'i-01568fcc52b7071cd': { - name: 'i-01568fcc52b7071cd', - is_cluster: true, - engine: 'aurora', - discovery_config: 'ee2f2480-09d3-4409-80f5-183549706446', - discovery_group: 'cloud-discovery-group', - sync_time: { - seconds: -62135596800, - }, - resourceUrl: - 'https://console.aws.amazon.com/ec2/home?region=us-east-2#InstanceDetails:instanceId=i-01568fcc52b7071cd', + `, + title: 'rds-auth-disabled', + discoverRds: { + databases: { + 'i-01568fcc52b7071cd': { + name: 'i-01568fcc52b7071cd', + is_cluster: true, + engine: 'aurora', + discovery_config: 'ee2f2480-09d3-4409-80f5-183549706446', + discovery_group: 'cloud-discovery-group', + sync_time: { + seconds: -62135596800, }, + resourceUrl: + 'https://console.aws.amazon.com/ec2/home?region=us-east-2#InstanceDetails:instanceId=i-01568fcc52b7071cd', }, }, }, - { - name: 'ec2-detail', - taskType: 'discover-ec2', - state: TaskState.Open, - issueType: 'ec2-ssm-invocation-failure', - integration: integrationName, - lastStateChange: '2025-02-11T20:32:19.482607921Z', - title: 'ec2-detail', - // lib/usertasks/descriptions/ec2-ssm-invocation-failure.md - description: ` - # SSM Invocation failed + }, + { + name: 'ec2-detail', + taskType: 'discover-ec2', + state: TaskState.Open, + issueType: 'ec2-ssm-invocation-failure', + integration: integrationName, + lastStateChange: '2025-02-11T20:32:19.482607921Z', + title: 'ec2-detail', + // lib/usertasks/descriptions/ec2-ssm-invocation-failure.md + description: ` + # SSM Invocation failed Teleport failed to access the SSM Agent to auto enroll the instance. Some instances failed to communicate with the AWS Systems Manager service to execute the install script. @@ -150,52 +147,52 @@ Ensure the following actions are allowed in the IAM Role used by the integration Teleport uses an SSM Document to run an installation script. If the document is changed or removed, it might no longer work. `, - discoverEc2: { - instances: { - 'i-01568fcc52b7071cd': { - instance_id: 'i-01568fcc52b7071cd', - discovery_config: 'ee2f2480-09d3-4409-80f5-183549706446', - discovery_group: 'cloud-discovery-group', - sync_time: { - seconds: -62135596800, - }, - resourceUrl: - 'https://console.aws.amazon.com/ec2/home?region=us-east-2#InstanceDetails:instanceId=i-01568fcc52b7071cd', + discoverEc2: { + instances: { + 'i-01568fcc52b7071cd': { + instance_id: 'i-01568fcc52b7071cd', + discovery_config: 'ee2f2480-09d3-4409-80f5-183549706446', + discovery_group: 'cloud-discovery-group', + sync_time: { + seconds: -62135596800, }, - 'i-019e54b3f58bfa9fd': { - instance_id: 'i-019e54b3f58bfa9fd', - name: 'travis-test-tcp4', - discovery_config: 'ee2f2480-09d3-4409-80f5-183549706446', - discovery_group: 'cloud-discovery-group', - sync_time: { - seconds: -62135596800, - }, - resourceUrl: - 'https://console.aws.amazon.com/ec2/home?region=us-east-2#InstanceDetails:instanceId=i-019e54b3f58bfa9fd', + resourceUrl: + 'https://console.aws.amazon.com/ec2/home?region=us-east-2#InstanceDetails:instanceId=i-01568fcc52b7071cd', + }, + 'i-019e54b3f58bfa9fd': { + instance_id: 'i-019e54b3f58bfa9fd', + name: 'travis-test-tcp4', + discovery_config: 'ee2f2480-09d3-4409-80f5-183549706446', + discovery_group: 'cloud-discovery-group', + sync_time: { + seconds: -62135596800, }, + resourceUrl: + 'https://console.aws.amazon.com/ec2/home?region=us-east-2#InstanceDetails:instanceId=i-019e54b3f58bfa9fd', }, }, }, - { - name: 'no match', - state: TaskState.Open, - issueType: 'side panel error', - integration: integrationName, - title: 'no match', - lastStateChange: '0', - instances: [], - }, - { - name: 'eks-detail', - taskType: 'discover-eks', - state: TaskState.Open, - issueType: 'eks-agent-not-connecting', - integration: integrationName, - lastStateChange: '2025-02-11T20:32:13.61608091Z', - title: 'eks-agent-not-connecting', - // lib/usertasks/descriptions/eks-agent-not-connecting.md - description: ` - # Teleport Agent not connecting + }, + { + name: 'no match', + state: TaskState.Open, + issueType: 'side panel error', + integration: integrationName, + title: 'no match', + lastStateChange: '0', + instances: [], + }, + { + name: 'eks-detail', + taskType: 'discover-eks', + state: TaskState.Open, + issueType: 'eks-agent-not-connecting', + integration: integrationName, + lastStateChange: '2025-02-11T20:32:13.61608091Z', + title: 'eks-agent-not-connecting', + // lib/usertasks/descriptions/eks-agent-not-connecting.md + description: ` + # Teleport Agent not connecting The process of automatically enrolling EKS Clusters into Teleport, starts by installing the [\`teleport-kube-agent\`](https://goteleport.com/docs/reference/helm-reference/teleport-kube-agent/) to the cluster. If the installation is successful, the EKS Cluster will appear in your Resources list. @@ -205,37 +202,36 @@ This usually happens when the installation is taking too long or there was an er Open the Teleport Agent to get more information. `, - discoverEks: { - clusters: { - 'i-01568fcc52b7071cd': { - name: 'i-01568fcc52b7071cd', - discovery_config: 'ee2f2480-09d3-4409-80f5-183549706446', - discovery_group: 'cloud-discovery-group', - sync_time: { - seconds: -62135596800, - }, - resourceUrl: - 'https://console.aws.amazon.com/ec2/home?region=us-east-2#InstanceDetails:instanceId=i-01568fcc52b7071cd', + discoverEks: { + clusters: { + 'i-01568fcc52b7071cd': { + name: 'i-01568fcc52b7071cd', + discovery_config: 'ee2f2480-09d3-4409-80f5-183549706446', + discovery_group: 'cloud-discovery-group', + sync_time: { + seconds: -62135596800, }, + resourceUrl: + 'https://console.aws.amazon.com/ec2/home?region=us-east-2#InstanceDetails:instanceId=i-01568fcc52b7071cd', }, }, }, - ], - nextKey: '1', - }); - } - ), - http.get(cfg.getUserTaskUrl('ec2-detail'), () => { - return HttpResponse.json(ec2Detail); - }), - http.get(cfg.getUserTaskUrl('rds-detail'), () => { - return HttpResponse.json(rdsDetail); - }), - http.get(cfg.getUserTaskUrl('eks-detail'), () => { - return HttpResponse.json(eksDetail); - }), - ], - }, + }, + ], + nextKey: '1', + }); + } + ), + http.get(cfg.getUserTaskUrl('ec2-detail'), () => { + return HttpResponse.json(ec2Detail); + }), + http.get(cfg.getUserTaskUrl('rds-detail'), () => { + return HttpResponse.json(rdsDetail); + }), + http.get(cfg.getUserTaskUrl('eks-detail'), () => { + return HttpResponse.json(eksDetail); + }) + ); }; const ec2Detail = { diff --git a/web/packages/teleport/src/Integrations/status/AwsRa/AwsRaDashboard.story.tsx b/web/packages/teleport/src/Integrations/status/AwsRa/AwsRaDashboard.story.tsx index 10c09a98b52..174e8246279 100644 --- a/web/packages/teleport/src/Integrations/status/AwsRa/AwsRaDashboard.story.tsx +++ b/web/packages/teleport/src/Integrations/status/AwsRa/AwsRaDashboard.story.tsx @@ -29,17 +29,16 @@ import { IntegrationKind } from 'teleport/services/integrations'; export default { title: 'Teleport/Integrations/AwsRa', - parameters: { - msw: { - handlers: [ - http.get(cfg.getIntegrationsUrl(), () => { - return HttpResponse.json({ - items: [], - nextKey: '', - }); - }), - ], - }, + + beforeEach({ msw }) { + msw.use( + http.get(cfg.getIntegrationsUrl(), () => { + return HttpResponse.json({ + items: [], + nextKey: '', + }); + }) + ); }, }; @@ -65,54 +64,52 @@ export function Dashboard() { ); } -Dashboard.parameters = { - msw: { - handlers: [ - http.get(cfg.getIntegrationsUrl(raName), () => { - return HttpResponse.json({ - name: raName, - subKind: 'aws-ra', - awsra: { - trustAnchorARN: trustAnchorArn, - profileSyncConfig: { - enabled: true, - profileArn: - 'arn:aws:rolesanywhere:us-east-2:111:profile/31a77874-9f41-4c10-aeae-2aa1140e8ca5', - roleArn: 'arn:aws:iam::111:role/ra-int', - filters: ['*'], - }, - }, - }); - }), - http.get(cfg.getIntegrationStatsUrl(raName), () => { - return HttpResponse.json({ - name: raName, - subKind: 'aws-ra', - awsra: { - trustAnchorARN: trustAnchorArn, - profileSyncConfig: { - enabled: true, - profileArn: - 'arn:aws:rolesanywhere:us-east-2:111:profile/31a77874-9f41-4c10-aeae-2aa1140e8ca5', - roleArn: 'arn:aws:iam::111:role/ra-int', - filters: ['*'], - }, - }, - unresolvedUserTasks: 0, - awsec2: {}, - awsrds: {}, - awseks: {}, - rolesAnywhereProfileSync: { +Dashboard.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.getIntegrationsUrl(raName), () => { + return HttpResponse.json({ + name: raName, + subKind: 'aws-ra', + awsra: { + trustAnchorARN: trustAnchorArn, + profileSyncConfig: { enabled: true, - status: 'SUCCESS', - syncedProfiles: 3, - syncStartTime: '2025-08-25T17:57:29.5993537Z', - syncEndTime: '2025-08-25T17:57:30.538177396Z', + profileArn: + 'arn:aws:rolesanywhere:us-east-2:111:profile/31a77874-9f41-4c10-aeae-2aa1140e8ca5', + roleArn: 'arn:aws:iam::111:role/ra-int', + filters: ['*'], }, - }); - }), - ], - }, + }, + }); + }), + http.get(cfg.getIntegrationStatsUrl(raName), () => { + return HttpResponse.json({ + name: raName, + subKind: 'aws-ra', + awsra: { + trustAnchorARN: trustAnchorArn, + profileSyncConfig: { + enabled: true, + profileArn: + 'arn:aws:rolesanywhere:us-east-2:111:profile/31a77874-9f41-4c10-aeae-2aa1140e8ca5', + roleArn: 'arn:aws:iam::111:role/ra-int', + filters: ['*'], + }, + }, + unresolvedUserTasks: 0, + awsec2: {}, + awsrds: {}, + awseks: {}, + rolesAnywhereProfileSync: { + enabled: true, + status: 'SUCCESS', + syncedProfiles: 3, + syncStartTime: '2025-08-25T17:57:29.5993537Z', + syncEndTime: '2025-08-25T17:57:30.538177396Z', + }, + }); + }) + ); }; export function Failed() { @@ -128,27 +125,25 @@ export function Failed() { ); } -Failed.parameters = { - msw: { - handlers: [ - http.get(cfg.getIntegrationsUrl(raName), () => { - return HttpResponse.json( - { - error: { message: 'Generic Bad Request' }, - }, - { status: 400 } - ); - }), - http.get(cfg.getIntegrationStatsUrl(raName), () => { - return HttpResponse.json( - { - error: { message: 'Generic Bad Request' }, - }, - { status: 400 } - ); - }), - ], - }, +Failed.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.getIntegrationsUrl(raName), () => { + return HttpResponse.json( + { + error: { message: 'Generic Bad Request' }, + }, + { status: 400 } + ); + }), + http.get(cfg.getIntegrationStatsUrl(raName), () => { + return HttpResponse.json( + { + error: { message: 'Generic Bad Request' }, + }, + { status: 400 } + ); + }) + ); }; export function NoData() { @@ -164,38 +159,36 @@ export function NoData() { ); } -NoData.parameters = { - msw: { - handlers: [ - http.get(cfg.getIntegrationsUrl(raName), () => { - return HttpResponse.json({ - name: raName, - subKind: 'aws-ra', - awsra: { - trustAnchorARN: trustAnchorArn, - profileSyncConfig: { - enabled: true, - profileArn: - 'arn:aws:rolesanywhere:us-east-2:111:profile/31a77874-9f41-4c10-aeae-2aa1140e8ca5', - roleArn: 'arn:aws:iam::111:role/ra-int', - filters: ['*'], - }, +NoData.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.getIntegrationsUrl(raName), () => { + return HttpResponse.json({ + name: raName, + subKind: 'aws-ra', + awsra: { + trustAnchorARN: trustAnchorArn, + profileSyncConfig: { + enabled: true, + profileArn: + 'arn:aws:rolesanywhere:us-east-2:111:profile/31a77874-9f41-4c10-aeae-2aa1140e8ca5', + roleArn: 'arn:aws:iam::111:role/ra-int', + filters: ['*'], }, - }); - }), - http.get(cfg.getIntegrationStatsUrl(raName), () => { - return HttpResponse.json({ - name: raName, - subKind: IntegrationKind.AwsRa, - unresolvedUserTasks: 0, - awsra: {}, - awsoidc: {}, - awsec2: {}, - awsrds: {}, - awseks: {}, - rolesAnywhereProfileSync: {}, - }); - }), - ], - }, + }, + }); + }), + http.get(cfg.getIntegrationStatsUrl(raName), () => { + return HttpResponse.json({ + name: raName, + subKind: IntegrationKind.AwsRa, + unresolvedUserTasks: 0, + awsra: {}, + awsoidc: {}, + awsec2: {}, + awsrds: {}, + awseks: {}, + rolesAnywhereProfileSync: {}, + }); + }) + ); }; diff --git a/web/packages/teleport/src/JoinTokens/JoinTokens.story.tsx b/web/packages/teleport/src/JoinTokens/JoinTokens.story.tsx index bc2fe01ebaa..961a2a4af0e 100644 --- a/web/packages/teleport/src/JoinTokens/JoinTokens.story.tsx +++ b/web/packages/teleport/src/JoinTokens/JoinTokens.story.tsx @@ -34,17 +34,15 @@ export const Loaded = () => ( ); -Loaded.parameters = { - msw: { - handlers: [ - http.get(cfg.api.joinToken.list, () => { - return HttpResponse.json({ items: tokens }); - }), - http.put(cfg.api.joinTokenYamlPath, () => { - return HttpResponse.json(editedToken); - }), - ], - }, +Loaded.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.api.joinToken.list, () => { + return HttpResponse.json({ items: tokens }); + }), + http.put(cfg.api.joinTokenYamlPath, () => { + return HttpResponse.json(editedToken); + }) + ); }; const tokens: JoinToken[] = [ diff --git a/web/packages/teleport/src/ManagedUpdates/ManagedUpdates.story.tsx b/web/packages/teleport/src/ManagedUpdates/ManagedUpdates.story.tsx index b2e0e1f2095..6211aa1c4ff 100644 --- a/web/packages/teleport/src/ManagedUpdates/ManagedUpdates.story.tsx +++ b/web/packages/teleport/src/ManagedUpdates/ManagedUpdates.story.tsx @@ -78,14 +78,12 @@ export function LoadedTimeBased() { ); } -LoadedTimeBased.parameters = { - msw: { - handlers: [ - http.get(cfg.getManagedUpdatesUrl(), () => { - return HttpResponse.json(mockManagedUpdatesTimeBased); - }), - ], - }, +LoadedTimeBased.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.getManagedUpdatesUrl(), () => { + return HttpResponse.json(mockManagedUpdatesTimeBased); + }) + ); }; export function LoadedHaltOnError() { @@ -95,14 +93,12 @@ export function LoadedHaltOnError() { ); } -LoadedHaltOnError.parameters = { - msw: { - handlers: [ - http.get(cfg.getManagedUpdatesUrl(), () => { - return HttpResponse.json(mockManagedUpdatesHaltOnError); - }), - ], - }, +LoadedHaltOnError.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.getManagedUpdatesUrl(), () => { + return HttpResponse.json(mockManagedUpdatesHaltOnError); + }) + ); }; export function LoadedAgentsDropped() { @@ -112,14 +108,12 @@ export function LoadedAgentsDropped() { ); } -LoadedAgentsDropped.parameters = { - msw: { - handlers: [ - http.get(cfg.getManagedUpdatesUrl(), () => { - return HttpResponse.json(mockManagedUpdatesAgentsDropped); - }), - ], - }, +LoadedAgentsDropped.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.getManagedUpdatesUrl(), () => { + return HttpResponse.json(mockManagedUpdatesAgentsDropped); + }) + ); }; export function WithOrphanedAgents() { @@ -129,14 +123,12 @@ export function WithOrphanedAgents() { ); } -WithOrphanedAgents.parameters = { - msw: { - handlers: [ - http.get(cfg.getManagedUpdatesUrl(), () => { - return HttpResponse.json(mockManagedUpdatesWithOrphaned); - }), - ], - }, +WithOrphanedAgents.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.getManagedUpdatesUrl(), () => { + return HttpResponse.json(mockManagedUpdatesWithOrphaned); + }) + ); }; export function ImmediateSchedule() { @@ -146,14 +138,12 @@ export function ImmediateSchedule() { ); } -ImmediateSchedule.parameters = { - msw: { - handlers: [ - http.get(cfg.getManagedUpdatesUrl(), () => { - return HttpResponse.json(mockManagedUpdatesImmediate); - }), - ], - }, +ImmediateSchedule.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.getManagedUpdatesUrl(), () => { + return HttpResponse.json(mockManagedUpdatesImmediate); + }) + ); }; export function NotConfigured() { @@ -163,14 +153,12 @@ export function NotConfigured() { ); } -NotConfigured.parameters = { - msw: { - handlers: [ - http.get(cfg.getManagedUpdatesUrl(), () => { - return HttpResponse.json(mockManagedUpdatesNotConfigured); - }), - ], - }, +NotConfigured.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.getManagedUpdatesUrl(), () => { + return HttpResponse.json(mockManagedUpdatesNotConfigured); + }) + ); }; export function Loading() { @@ -180,15 +168,13 @@ export function Loading() { ); } -Loading.parameters = { - msw: { - handlers: [ - http.get(cfg.getManagedUpdatesUrl(), async () => { - await delay('infinite'); - return HttpResponse.json({}); - }), - ], - }, +Loading.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.getManagedUpdatesUrl(), async () => { + await delay('infinite'); + return HttpResponse.json({}); + }) + ); }; export function Error() { @@ -198,14 +184,12 @@ export function Error() { ); } -Error.parameters = { - msw: { - handlers: [ - http.get(cfg.getManagedUpdatesUrl(), () => { - return HttpResponse.json({ message: 'some error' }, { status: 500 }); - }), - ], - }, +Error.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.getManagedUpdatesUrl(), () => { + return HttpResponse.json({ message: 'some error' }, { status: 500 }); + }) + ); }; export function ActionLoading() { @@ -215,21 +199,19 @@ export function ActionLoading() { ); } -ActionLoading.parameters = { - msw: { - handlers: [ - http.get(cfg.getManagedUpdatesUrl(), () => { - return HttpResponse.json(mockManagedUpdatesHaltOnError); - }), - http.post( - '/v1/webapi/managedupdates/groups/:groupName/:action', - async () => { - await delay('infinite'); - return HttpResponse.json({}); - } - ), - ], - }, +ActionLoading.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.getManagedUpdatesUrl(), () => { + return HttpResponse.json(mockManagedUpdatesHaltOnError); + }), + http.post( + '/v1/webapi/managedupdates/groups/:groupName/:action', + async () => { + await delay('infinite'); + return HttpResponse.json({}); + } + ) + ); }; export function ActionError() { @@ -239,20 +221,18 @@ export function ActionError() { ); } -ActionError.parameters = { - msw: { - handlers: [ - http.get(cfg.getManagedUpdatesUrl(), () => { - return HttpResponse.json(mockManagedUpdatesHaltOnError); - }), - http.post('/v1/webapi/managedupdates/groups/:groupName/:action', () => { - return HttpResponse.json( - { message: 'error performing group action' }, - { status: 403 } - ); - }), - ], - }, +ActionError.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.getManagedUpdatesUrl(), () => { + return HttpResponse.json(mockManagedUpdatesHaltOnError); + }), + http.post('/v1/webapi/managedupdates/groups/:groupName/:action', () => { + return HttpResponse.json( + { message: 'error performing group action' }, + { status: 403 } + ); + }) + ); }; const noPermissionsAcl = makeAcl({ @@ -268,14 +248,12 @@ export function NoPermissions() { ); } -NoPermissions.parameters = { - msw: { - handlers: [ - http.get(cfg.getManagedUpdatesUrl(), () => { - return HttpResponse.json(mockManagedUpdatesTimeBased); - }), - ], - }, +NoPermissions.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.getManagedUpdatesUrl(), () => { + return HttpResponse.json(mockManagedUpdatesTimeBased); + }) + ); }; const toolsOnlyAcl = makeAcl({ @@ -291,14 +269,12 @@ export function ToolsPermissionsOnly() { ); } -ToolsPermissionsOnly.parameters = { - msw: { - handlers: [ - http.get(cfg.getManagedUpdatesUrl(), () => { - return HttpResponse.json(mockManagedUpdatesTimeBased); - }), - ], - }, +ToolsPermissionsOnly.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.getManagedUpdatesUrl(), () => { + return HttpResponse.json(mockManagedUpdatesTimeBased); + }) + ); }; const rolloutOnlyAcl = makeAcl({ @@ -314,12 +290,10 @@ export function RolloutPermissionsOnly() { ); } -RolloutPermissionsOnly.parameters = { - msw: { - handlers: [ - http.get(cfg.getManagedUpdatesUrl(), () => { - return HttpResponse.json(mockManagedUpdatesTimeBased); - }), - ], - }, +RolloutPermissionsOnly.beforeEach = ({ msw }) => { + msw.use( + http.get(cfg.getManagedUpdatesUrl(), () => { + return HttpResponse.json(mockManagedUpdatesTimeBased); + }) + ); }; diff --git a/web/packages/teleport/src/Notifications/Notification.story.tsx b/web/packages/teleport/src/Notifications/Notification.story.tsx index a4c2e2eecb5..99aa1ac4a60 100644 --- a/web/packages/teleport/src/Notifications/Notification.story.tsx +++ b/web/packages/teleport/src/Notifications/Notification.story.tsx @@ -127,85 +127,77 @@ export const NotificationTypes = () => { }; export const NotificationsList = () => ; -NotificationsList.parameters = { - msw: { - handlers: [ - http.get( - notificationsPathWithoutQuery, - () => HttpResponse.json(mockNotificationsResponseFirstPage), - { once: true } - ), - http.put(cfg.api.notificationLastSeenTimePath, async () => { - await delay(2000); - return HttpResponse.json({ time: Date.now() }); - }), - http.put(cfg.api.notificationStatePath, async ({ request }) => { - const body = (await request.json()) as UpsertNotificationStateRequest; - return HttpResponse.json({ notificationState: body.notificationState }); - }), - http.get(notificationsPathWithoutQuery, async () => { - await delay(2000); - return HttpResponse.json(mockNotificationsResponseSecondPage); - }), - ], - }, +NotificationsList.beforeEach = ({ msw }) => { + msw.use( + http.get( + notificationsPathWithoutQuery, + () => HttpResponse.json(mockNotificationsResponseFirstPage), + { once: true } + ), + http.put(cfg.api.notificationLastSeenTimePath, async () => { + await delay(2000); + return HttpResponse.json({ time: Date.now() }); + }), + http.put(cfg.api.notificationStatePath, async ({ request }) => { + const body = (await request.json()) as UpsertNotificationStateRequest; + return HttpResponse.json({ notificationState: body.notificationState }); + }), + http.get(notificationsPathWithoutQuery, async () => { + await delay(2000); + return HttpResponse.json(mockNotificationsResponseSecondPage); + }) + ); }; export const NotificationListNotificationStateErrors = () => ; -NotificationListNotificationStateErrors.parameters = { - msw: { - handlers: [ - http.get(notificationsPathWithoutQuery, () => - HttpResponse.json(mockNotificationsResponseFirstPage) - ), - http.put(cfg.api.notificationLastSeenTimePath, () => - HttpResponse.json({ time: Date.now() }) - ), - http.put(cfg.api.notificationStatePath, () => - HttpResponse.json( - { - message: 'failed to update state', - }, - { status: 403 } - ) - ), - http.get(notificationsPathWithoutQuery, async () => { - await delay(2000); - return HttpResponse.json(mockNotificationsResponseSecondPage); - }), - ], - }, +NotificationListNotificationStateErrors.beforeEach = ({ msw }) => { + msw.use( + http.get(notificationsPathWithoutQuery, () => + HttpResponse.json(mockNotificationsResponseFirstPage) + ), + http.put(cfg.api.notificationLastSeenTimePath, () => + HttpResponse.json({ time: Date.now() }) + ), + http.put(cfg.api.notificationStatePath, () => + HttpResponse.json( + { + message: 'failed to update state', + }, + { status: 403 } + ) + ), + http.get(notificationsPathWithoutQuery, async () => { + await delay(2000); + return HttpResponse.json(mockNotificationsResponseSecondPage); + }) + ); }; export const NotificationsListEmpty = () => ; -NotificationsListEmpty.parameters = { - msw: { - handlers: [ - http.get(notificationsPathWithoutQuery, () => - HttpResponse.json({ - nextKey: '', - userLastSeenNotification: subDays(Date.now(), 15).toISOString(), // 15 days ago - notifications: [], - }) - ), - ], - }, +NotificationsListEmpty.beforeEach = ({ msw }) => { + msw.use( + http.get(notificationsPathWithoutQuery, () => + HttpResponse.json({ + nextKey: '', + userLastSeenNotification: subDays(Date.now(), 15).toISOString(), // 15 days ago + notifications: [], + }) + ) + ); }; export const NotificationsListError = () => ; -NotificationsListError.parameters = { - msw: { - handlers: [ - http.get(notificationsPathWithoutQuery, () => - HttpResponse.json( - { - message: 'Error encountered: failed to fetch notifications', - }, - { status: 403 } - ) - ), - ], - }, +NotificationsListError.beforeEach = ({ msw }) => { + msw.use( + http.get(notificationsPathWithoutQuery, () => + HttpResponse.json( + { + message: 'Error encountered: failed to fetch notifications', + }, + { status: 403 } + ) + ) + ); }; const ListComponent = () => { diff --git a/web/packages/teleport/src/Roles/RoleEditor/RoleEditor.story.tsx b/web/packages/teleport/src/Roles/RoleEditor/RoleEditor.story.tsx index 02049984ad8..5bfdfae8b3e 100644 --- a/web/packages/teleport/src/Roles/RoleEditor/RoleEditor.story.tsx +++ b/web/packages/teleport/src/Roles/RoleEditor/RoleEditor.story.tsx @@ -103,10 +103,9 @@ export const NewRole: StoryObj = { render() { return ; }, - parameters: { - msw: { - handlers: [yamlifyHandler, parseHandler], - }, + + beforeEach({ msw }) { + msw.use(yamlifyHandler, parseHandler); }, }; @@ -121,10 +120,9 @@ export const ExistingRole: StoryObj = { /> ); }, - parameters: { - msw: { - handlers: [yamlifyHandler, parseHandler], - }, + + beforeEach({ msw }) { + msw.use(yamlifyHandler, parseHandler); }, }; @@ -137,16 +135,15 @@ export const yamlifyProcessing: StoryObj = { ); }, - parameters: { - msw: { - handlers: [ - http.post( - cfg.getYamlStringifyUrl(YamlSupportedResourceKind.Role), - async () => await delay('infinite') - ), - parseHandler, - ], - }, + + beforeEach({ msw }) { + msw.use( + http.post( + cfg.getYamlStringifyUrl(YamlSupportedResourceKind.Role), + async () => await delay('infinite') + ), + parseHandler + ); }, }; @@ -159,16 +156,15 @@ export const yamlifyError: StoryObj = { ); }, - parameters: { - msw: { - handlers: [ - http.post( - cfg.getYamlStringifyUrl(YamlSupportedResourceKind.Role), - serverErrorResponse - ), - parseHandler, - ], - }, + + beforeEach({ msw }) { + msw.use( + http.post( + cfg.getYamlStringifyUrl(YamlSupportedResourceKind.Role), + serverErrorResponse + ), + parseHandler + ); }, }; @@ -189,16 +185,15 @@ export const parseProcessing: StoryObj = { ); }, - parameters: { - msw: { - handlers: [ - yamlifyHandler, - http.post( - cfg.getYamlParseUrl(YamlSupportedResourceKind.Role), - async () => await delay('infinite') - ), - ], - }, + + beforeEach({ msw }) { + msw.use( + yamlifyHandler, + http.post( + cfg.getYamlParseUrl(YamlSupportedResourceKind.Role), + async () => await delay('infinite') + ) + ); }, }; @@ -219,16 +214,15 @@ export const parseError: StoryObj = { ); }, - parameters: { - msw: { - handlers: [ - yamlifyHandler, - http.post( - cfg.getYamlParseUrl(YamlSupportedResourceKind.Role), - serverErrorResponse - ), - ], - }, + + beforeEach({ msw }) { + msw.use( + yamlifyHandler, + http.post( + cfg.getYamlParseUrl(YamlSupportedResourceKind.Role), + serverErrorResponse + ) + ); }, }; @@ -247,10 +241,9 @@ export const saving: StoryObj = { ); }, - parameters: { - msw: { - handlers: [yamlifyHandler, parseHandler], - }, + + beforeEach({ msw }) { + msw.use(yamlifyHandler, parseHandler); }, }; @@ -273,10 +266,9 @@ export const savingError: StoryObj = { ); }, - parameters: { - msw: { - handlers: [yamlifyHandler, parseHandler], - }, + + beforeEach({ msw }) { + msw.use(yamlifyHandler, parseHandler); }, }; @@ -291,10 +283,12 @@ export const noAccess: StoryObj = { /> ); }, + + beforeEach({ msw }) { + msw.use(yamlifyHandler, parseHandler); + }, + parameters: { - msw: { - handlers: [yamlifyHandler, parseHandler], - }, acl: { list: true, create: false, @@ -355,11 +349,11 @@ export const Dialog: StoryObj = { ); }, - parameters: { - msw: { - handlers: [yamlifyHandler, parseHandler], - }, + + beforeEach({ msw }) { + msw.use(yamlifyHandler, parseHandler); }, + argTypes: { roleDiffState: { control: { type: 'select' }, @@ -367,6 +361,7 @@ export const Dialog: StoryObj = { mapping: RoleDiffState, }, }, + args: { roleDiffEnabled: false, roleDiffState: RoleDiffState.Disabled, diff --git a/web/packages/teleport/src/SessionRecordings/list/ListSessionRecordingsRoute.story.tsx b/web/packages/teleport/src/SessionRecordings/list/ListSessionRecordingsRoute.story.tsx index 4f9f6c39a08..dd20e382229 100644 --- a/web/packages/teleport/src/SessionRecordings/list/ListSessionRecordingsRoute.story.tsx +++ b/web/packages/teleport/src/SessionRecordings/list/ListSessionRecordingsRoute.story.tsx @@ -37,72 +37,83 @@ export default { }; export const List: StoryObj = { + beforeEach({ msw }) { + msw.use(withMockCluster(), withMockEvents(), withMockThumbnails()); + }, + parameters: { layout: 'fullscreen', - msw: { - handlers: [withMockCluster(), withMockEvents(), withMockThumbnails()], - }, }, + render, }; export const ListError: StoryObj = { name: 'List with error fetching recordings', + + beforeEach({ msw }) { + msw.use( + withMockCluster(), + http.get(cfg.api.clusterEventsRecordingsPath, () => { + return HttpResponse.json( + { + error: { + message: 'Internal Server Error', + }, + }, + { status: 500 } + ); + }) + ); + }, + parameters: { layout: 'fullscreen', - msw: { - handlers: [ - withMockCluster(), - http.get(cfg.api.clusterEventsRecordingsPath, () => { - return HttpResponse.json( - { - error: { - message: 'Internal Server Error', - }, - }, - { status: 500 } - ); - }), - ], - }, }, + render, }; export const ListClusterError: StoryObj = { name: 'List with error fetching clusters', + + beforeEach({ msw }) { + msw.use( + http.get(cfg.api.clustersPath, () => { + return HttpResponse.json( + { + error: { + message: 'Failed to fetch clusters', + }, + }, + { status: 500 } + ); + }), + withMockEvents() + ); + }, + parameters: { layout: 'fullscreen', - msw: { - handlers: [ - http.get(cfg.api.clustersPath, () => { - return HttpResponse.json( - { - error: { - message: 'Failed to fetch clusters', - }, - }, - { status: 500 } - ); - }), - withMockEvents(), - ], - }, }, + render, }; export const ListLoading: StoryObj = { name: 'List loading state', + + beforeEach({ msw }) { + msw.use( + withMockCluster(), + http.get(cfg.api.clusterEventsRecordingsPath, () => delay('infinite')) + ); + }, + parameters: { layout: 'fullscreen', - msw: { - handlers: [ - withMockCluster(), - http.get(cfg.api.clusterEventsRecordingsPath, () => delay('infinite')), - ], - }, }, + render, }; diff --git a/web/packages/teleport/src/Users/UserAddEdit/UserAddEdit.story.tsx b/web/packages/teleport/src/Users/UserAddEdit/UserAddEdit.story.tsx index fb4fd7200e7..a8a894d6374 100644 --- a/web/packages/teleport/src/Users/UserAddEdit/UserAddEdit.story.tsx +++ b/web/packages/teleport/src/Users/UserAddEdit/UserAddEdit.story.tsx @@ -65,16 +65,15 @@ const roles: RoleResource[] = [ ]; export const Edit: StoryObj = { - parameters: { - msw: { - handlers: [ - successGetRoles({ - startKey: '', - items: roles, - }), - ], - }, + beforeEach({ msw }) { + msw.use( + successGetRoles({ + startKey: '', + items: roles, + }) + ); }, + render() { return ( @@ -85,11 +84,10 @@ export const Edit: StoryObj = { }; export const Processing: StoryObj = { - parameters: { - msw: { - handlers: [handleUpdateUser(() => delay('infinite'))], - }, + beforeEach({ msw }) { + msw.use(handleUpdateUser(() => delay('infinite'))); }, + render() { return ( @@ -100,11 +98,10 @@ export const Processing: StoryObj = { }; export const Failed: StoryObj = { - parameters: { - msw: { - handlers: [handleUpdateUser(() => delay('infinite'))], - }, + beforeEach({ msw }) { + msw.use(handleUpdateUser(() => delay('infinite'))); }, + render() { return ( diff --git a/web/packages/teleport/src/Users/UserDelete/UserDelete.story.tsx b/web/packages/teleport/src/Users/UserDelete/UserDelete.story.tsx index 63dafa8ff7e..58ad94b06d7 100644 --- a/web/packages/teleport/src/Users/UserDelete/UserDelete.story.tsx +++ b/web/packages/teleport/src/Users/UserDelete/UserDelete.story.tsx @@ -29,11 +29,10 @@ export default { }; export const Processing: StoryObj = { - parameters: { - msw: { - handlers: [handleDeleteUser(() => delay('infinite'))], - }, + beforeEach({ msw }) { + msw.use(handleDeleteUser(() => delay('infinite'))); }, + render() { return ( @@ -44,11 +43,10 @@ export const Processing: StoryObj = { }; export const Confirm: StoryObj = { - parameters: { - msw: { - handlers: [handleDeleteUser(() => delay('infinite'))], - }, + beforeEach({ msw }) { + msw.use(handleDeleteUser(() => delay('infinite'))); }, + render() { return ( @@ -59,11 +57,10 @@ export const Confirm: StoryObj = { }; export const Failed: StoryObj = { - parameters: { - msw: { - handlers: [errorDeleteUser('server error')], - }, + beforeEach({ msw }) { + msw.use(errorDeleteUser('server error')); }, + render() { return ( diff --git a/web/packages/teleport/src/Users/UserDetails/UserDetails.story.tsx b/web/packages/teleport/src/Users/UserDetails/UserDetails.story.tsx index 39ec1f92d6f..e91ae4e0a1f 100644 --- a/web/packages/teleport/src/Users/UserDetails/UserDetails.story.tsx +++ b/web/packages/teleport/src/Users/UserDetails/UserDetails.story.tsx @@ -270,15 +270,13 @@ function Story(props: UserDetailsStoryProps) { } export const BasicUser: Story = { - parameters: { - msw: { - handlers: [ - http.get('/v2/webapi/sites/:clusterId/locks', () => { - return HttpResponse.json({ - items: [], - }); - }), - ], - }, + beforeEach({ msw }) { + msw.use( + http.get('/v2/webapi/sites/:clusterId/locks', () => { + return HttpResponse.json({ + items: [], + }); + }) + ); }, }; diff --git a/web/packages/teleport/src/Users/Users.story.tsx b/web/packages/teleport/src/Users/Users.story.tsx index b86fc352fd4..1d84dfc592b 100644 --- a/web/packages/teleport/src/Users/Users.story.tsx +++ b/web/packages/teleport/src/Users/Users.story.tsx @@ -83,44 +83,40 @@ const users = [ ]; export const Loaded: StoryObj = { - parameters: { - msw: { - handlers: [successGetUsers(users)], - }, + beforeEach({ msw }) { + msw.use(successGetUsers(users)); }, + render() { return renderUsers(sample); }, }; export const UsersNotEqualMauNotice: StoryObj = { - parameters: { - msw: { - handlers: [successGetUsers(users)], - }, + beforeEach({ msw }) { + msw.use(successGetUsers(users)); }, + render() { return renderUsers({ ...sample, showMauInfo: true }); }, }; export const Processing: StoryObj = { - parameters: { - msw: { - handlers: [handleGetUsers(async () => await delay('infinite'))], - }, + beforeEach({ msw }) { + msw.use(handleGetUsers(async () => await delay('infinite'))); }, + render() { return renderUsers(sample); }, }; export const Failed: StoryObj = { - parameters: { - msw: { - handlers: [errorGetUsers('Something went wrong')], - }, + beforeEach({ msw }) { + msw.use(errorGetUsers('Something went wrong')); }, + render() { return renderUsers(sample); }, diff --git a/web/packages/teleport/src/WorkloadIdentity/WorkloadIdentities.story.tsx b/web/packages/teleport/src/WorkloadIdentity/WorkloadIdentities.story.tsx index 3095432b732..bbbf803e5f7 100644 --- a/web/packages/teleport/src/WorkloadIdentity/WorkloadIdentities.story.tsx +++ b/web/packages/teleport/src/WorkloadIdentity/WorkloadIdentities.story.tsx @@ -45,81 +45,59 @@ type Story = StoryObj; export default meta; export const Happy: Story = { - parameters: { - msw: { - handlers: [listWorkloadIdentitiesSuccess()], - }, + beforeEach({ msw }) { + msw.use(listWorkloadIdentitiesSuccess()); }, }; export const Empty: Story = { - parameters: { - msw: { - handlers: [ - listWorkloadIdentitiesSuccess({ - items: [], - next_page_token: null, - }), - ], - }, + beforeEach({ msw }) { + msw.use( + listWorkloadIdentitiesSuccess({ + items: [], + next_page_token: null, + }) + ); }, }; export const NoListPermission: Story = { args: { hasListPermission: false }, - parameters: { - msw: { - handlers: [ - /* should never make a call */ - ], - }, - }, }; export const Error: Story = { - parameters: { - msw: { - handlers: [listWorkloadIdentitiesError(500, 'something went wrong')], - }, + beforeEach({ msw }) { + msw.use(listWorkloadIdentitiesError(500, 'something went wrong')); }, }; export const OutdatedProxy: Story = { - parameters: { - msw: { - handlers: [ - listWorkloadIdentitiesError(404, 'path not found', { - proxyVersion: { - major: 18, - minor: 0, - patch: 0, - preRelease: '', - string: '18.0.0', - }, - }), - ], - }, + beforeEach({ msw }) { + msw.use( + listWorkloadIdentitiesError(404, 'path not found', { + proxyVersion: { + major: 18, + minor: 0, + patch: 0, + preRelease: '', + string: '18.0.0', + }, + }) + ); }, }; export const UnsupportedSort: Story = { - parameters: { - msw: { - handlers: [ - listWorkloadIdentitiesError( - 400, - 'unsupported sort, with some more info' - ), - ], - }, + beforeEach({ msw }) { + msw.use( + listWorkloadIdentitiesError(400, 'unsupported sort, with some more info') + ); }, }; export const Loading: Story = { - parameters: { - msw: { - handlers: [listWorkloadIdentitiesForever()], - }, + beforeEach({ msw }) { + msw.use(listWorkloadIdentitiesForever()); }, }; diff --git a/web/packages/teleport/src/components/FormLogin/FormLogin.story.tsx b/web/packages/teleport/src/components/FormLogin/FormLogin.story.tsx index 1790d4e74db..5ce520afcbb 100644 --- a/web/packages/teleport/src/components/FormLogin/FormLogin.story.tsx +++ b/web/packages/teleport/src/components/FormLogin/FormLogin.story.tsx @@ -277,15 +277,13 @@ export const IdentifierFirstRememberedUser = () => { return ; }; -IdentifierFirstRememberedUser.parameters = { - msw: { - handlers: [ - http.post(cfg.api.authConnectorsPath, async () => { - await delay(600); // Simulate loading state - return HttpResponse.json([connectorsResp]); - }), - ], - }, +IdentifierFirstRememberedUser.beforeEach = ({ msw }) => { + msw.use( + http.post(cfg.api.authConnectorsPath, async () => { + await delay(600); // Simulate loading state + return HttpResponse.json([connectorsResp]); + }) + ); }; const connectorsResp = { diff --git a/web/packages/teleport/src/lib/locks/ResourceLockAndUnlock.story.tsx b/web/packages/teleport/src/lib/locks/ResourceLockAndUnlock.story.tsx index a84bcee08f6..c79f942273f 100644 --- a/web/packages/teleport/src/lib/locks/ResourceLockAndUnlock.story.tsx +++ b/web/packages/teleport/src/lib/locks/ResourceLockAndUnlock.story.tsx @@ -57,16 +57,15 @@ export const LockingDialogs: Story = { targetKind: 'user', targetName: 'example-user', }, - parameters: { - msw: { - handlers: [ - listV2LocksSuccess({ - locks: [], - }), - removeLockSuccess(), - createLockSuccess(), - ], - }, + + beforeEach({ msw }) { + msw.use( + listV2LocksSuccess({ + locks: [], + }), + removeLockSuccess(), + createLockSuccess() + ); }, }; @@ -75,40 +74,39 @@ export const UnlockNotSupported: Story = { targetKind: 'user', targetName: 'example-user', }, - parameters: { - msw: { - handlers: [ - listV2LocksSuccess({ - locks: [ - { - name: '785d167d-cb2b-4de4-8268-efb6d8932dde', - message: 'Locking bots until security alert is resolved.', - expires: '2023-01-01T00:00:00Z', - createdAt: '2023-01-01T00:00:00Z', - targets: { - user: 'example-user', - }, + + beforeEach({ msw }) { + msw.use( + listV2LocksSuccess({ + locks: [ + { + name: '785d167d-cb2b-4de4-8268-efb6d8932dde', + message: 'Locking bots until security alert is resolved.', + expires: '2023-01-01T00:00:00Z', + createdAt: '2023-01-01T00:00:00Z', + targets: { + user: 'example-user', }, - { - name: '0ef9909f-4980-40f7-bc85-ad9ef72bc059', - expires: '2023-01-01T00:00:00Z', - targets: { - user: 'example-user', - }, + }, + { + name: '0ef9909f-4980-40f7-bc85-ad9ef72bc059', + expires: '2023-01-01T00:00:00Z', + targets: { + user: 'example-user', }, - { - name: '0e07e3f6-55bc-421d-ab24-1b521a0b6452', - message: - 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', - createdAt: '2023-01-01T00:00:00Z', - targets: { - user: 'example-user', - }, + }, + { + name: '0e07e3f6-55bc-421d-ab24-1b521a0b6452', + message: + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', + createdAt: '2023-01-01T00:00:00Z', + targets: { + user: 'example-user', }, - ], - }), - ], - }, + }, + ], + }) + ); }, }; diff --git a/web/packages/teleport/src/lib/locks/ResourceLockIndicator.story.tsx b/web/packages/teleport/src/lib/locks/ResourceLockIndicator.story.tsx index bedfe903c66..7093a01cefe 100644 --- a/web/packages/teleport/src/lib/locks/ResourceLockIndicator.story.tsx +++ b/web/packages/teleport/src/lib/locks/ResourceLockIndicator.story.tsx @@ -46,25 +46,24 @@ export const LockedSingle: Story = { targetKind: 'user', targetName: 'example-user', }, - parameters: { - msw: { - handlers: [ - listV2LocksSuccess({ - locks: [ - { - name: '76bc5cc7-b9bf-4a03-935f-8018c0a2bc05', - message: 'This is a test message', - expires: '2023-12-31T23:59:59Z', - targets: { - user: 'example-user', - }, - createdAt: '2023-01-01T00:00:00Z', - createdBy: 'admin', + + beforeEach({ msw }) { + msw.use( + listV2LocksSuccess({ + locks: [ + { + name: '76bc5cc7-b9bf-4a03-935f-8018c0a2bc05', + message: 'This is a test message', + expires: '2023-12-31T23:59:59Z', + targets: { + user: 'example-user', }, - ], - }), - ], - }, + createdAt: '2023-01-01T00:00:00Z', + createdBy: 'admin', + }, + ], + }) + ); }, }; @@ -73,35 +72,34 @@ export const LockedMultiple: Story = { targetKind: 'user', targetName: 'example-user', }, - parameters: { - msw: { - handlers: [ - listV2LocksSuccess({ - locks: [ - { - name: '76bc5cc7-b9bf-4a03-935f-8018c0a2bc05', - message: 'This is a test message', - expires: '2023-12-31T23:59:59Z', - targets: { - user: 'example-user', - }, - createdAt: '2023-01-01T00:00:00Z', - createdBy: 'admin', + + beforeEach({ msw }) { + msw.use( + listV2LocksSuccess({ + locks: [ + { + name: '76bc5cc7-b9bf-4a03-935f-8018c0a2bc05', + message: 'This is a test message', + expires: '2023-12-31T23:59:59Z', + targets: { + user: 'example-user', }, - { - name: '76bc5cc7-b9bf-4a03-935f-8018c0a2bc05', - message: 'This is a test message', - expires: '2023-12-31T23:59:59Z', - targets: { - user: 'example-user', - }, - createdAt: '2023-01-01T00:00:00Z', - createdBy: 'admin', + createdAt: '2023-01-01T00:00:00Z', + createdBy: 'admin', + }, + { + name: '76bc5cc7-b9bf-4a03-935f-8018c0a2bc05', + message: 'This is a test message', + expires: '2023-12-31T23:59:59Z', + targets: { + user: 'example-user', }, - ], - }), - ], - }, + createdAt: '2023-01-01T00:00:00Z', + createdBy: 'admin', + }, + ], + }) + ); }, };