From 3e5c84f609ed8285258c4fd0cf1ec34ef7f0bf02 Mon Sep 17 00:00:00 2001 From: Michelle Bergquist Date: Fri, 6 Dec 2024 13:42:51 -0700 Subject: [PATCH] Navigate to aws status dash from integrations list --- .../src/Integrations/IntegrationList.test.tsx | 56 +++++++++++++++++++ .../src/Integrations/IntegrationList.tsx | 27 ++++++--- web/packages/teleport/src/config.ts | 14 +++-- 3 files changed, 83 insertions(+), 14 deletions(-) create mode 100644 web/packages/teleport/src/Integrations/IntegrationList.test.tsx diff --git a/web/packages/teleport/src/Integrations/IntegrationList.test.tsx b/web/packages/teleport/src/Integrations/IntegrationList.test.tsx new file mode 100644 index 0000000000000..ab96dc061e265 --- /dev/null +++ b/web/packages/teleport/src/Integrations/IntegrationList.test.tsx @@ -0,0 +1,56 @@ +/** + * Teleport + * Copyright (C) 2023 Gravitational, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import React from 'react'; + +import { fireEvent, render, screen } from 'design/utils/testing'; + +import { MemoryRouter } from 'react-router'; + +import { IntegrationList } from 'teleport/Integrations/IntegrationList'; +import { + IntegrationKind, + IntegrationStatusCode, +} from 'teleport/services/integrations'; + +test('integration list shows edit and view action menu for aws-oidc', () => { + render( + + + + ); + + fireEvent.click(screen.getByRole('button', { name: 'Options' })); + expect(screen.getByText('View Status')).toBeInTheDocument(); + expect(screen.getByText('View Status')).toHaveAttribute( + 'href', + '/web/integrations/status/aws-oidc/aws' + ); + expect(screen.getByText('Edit...')).toBeInTheDocument(); + expect(screen.getByText('Delete...')).toBeInTheDocument(); +}); diff --git a/web/packages/teleport/src/Integrations/IntegrationList.tsx b/web/packages/teleport/src/Integrations/IntegrationList.tsx index 8e3e41526ac77..b4d9c407efaae 100644 --- a/web/packages/teleport/src/Integrations/IntegrationList.tsx +++ b/web/packages/teleport/src/Integrations/IntegrationList.tsx @@ -154,15 +154,26 @@ export function IntegrationList(props: Props) { return ( - {/* Currently, only AWSOIDC supports editing. */} + {/* Currently, only AWS OIDC supports editing & status dash */} {item.kind === IntegrationKind.AwsOidc && ( - - props.integrationOps.onEditIntegration(item) - } - > - Edit... - + <> + + View Status + + + props.integrationOps.onEditIntegration(item) + } + > + Edit... + + )} diff --git a/web/packages/teleport/src/config.ts b/web/packages/teleport/src/config.ts index 817f1a090c7e2..62964f0258031 100644 --- a/web/packages/teleport/src/config.ts +++ b/web/packages/teleport/src/config.ts @@ -24,6 +24,13 @@ import generateResourcePath from './generateResourcePath'; import { defaultEntitlements } from './entitlement'; +import { + AwsOidcPolicyPreset, + IntegrationKind, + PluginKind, + Regions, +} from './services/integrations'; + import type { Auth2faType, AuthProvider, @@ -35,11 +42,6 @@ import type { import type { SortType } from 'teleport/services/agents'; import type { RecordingType } from 'teleport/services/recordings'; import type { WebauthnAssertionResponse } from './services/auth'; -import type { - PluginKind, - Regions, - AwsOidcPolicyPreset, -} from './services/integrations'; import type { ParticipantMode } from 'teleport/services/session'; import type { YamlSupportedResourceKind } from './services/yaml/types'; import type { KubeResourceKind } from './services/kube/types'; @@ -532,7 +534,7 @@ const cfg = { return generatePath(cfg.routes.integrationEnroll, { type }); }, - getIntegrationStatusRoute(type: PluginKind, name: string) { + getIntegrationStatusRoute(type: PluginKind | IntegrationKind, name: string) { return generatePath(cfg.routes.integrationStatus, { type, name }); },