Skip to content

Commit

Permalink
Navigate to aws status dash from integrations list
Browse files Browse the repository at this point in the history
  • Loading branch information
michellescripts committed Dec 6, 2024
1 parent 2dd2dcb commit 3e5c84f
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 14 deletions.
56 changes: 56 additions & 0 deletions web/packages/teleport/src/Integrations/IntegrationList.test.tsx
Original file line number Diff line number Diff line change
@@ -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 <http://www.gnu.org/licenses/>.
*/

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(
<MemoryRouter>
<IntegrationList
list={[
{
resourceType: 'integration',
name: 'aws',
kind: IntegrationKind.AwsOidc,
statusCode: IntegrationStatusCode.Running,
spec: { roleArn: '', issuerS3Prefix: '', issuerS3Bucket: '' },
},
]}
/>
</MemoryRouter>
);

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();
});
27 changes: 19 additions & 8 deletions web/packages/teleport/src/Integrations/IntegrationList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -154,15 +154,26 @@ export function IntegrationList(props: Props<IntegrationLike>) {
return (
<Cell align="right">
<MenuButton>
{/* Currently, only AWSOIDC supports editing. */}
{/* Currently, only AWS OIDC supports editing & status dash */}
{item.kind === IntegrationKind.AwsOidc && (
<MenuItem
onClick={() =>
props.integrationOps.onEditIntegration(item)
}
>
Edit...
</MenuItem>
<>
<MenuItem
as={InternalRouteLink}
to={cfg.getIntegrationStatusRoute(
item.kind,
item.name
)}
>
View Status
</MenuItem>
<MenuItem
onClick={() =>
props.integrationOps.onEditIntegration(item)
}
>
Edit...
</MenuItem>
</>
)}
<MenuItem
onClick={() =>
Expand Down
14 changes: 8 additions & 6 deletions web/packages/teleport/src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,13 @@ import generateResourcePath from './generateResourcePath';

import { defaultEntitlements } from './entitlement';

import {
AwsOidcPolicyPreset,
IntegrationKind,
PluginKind,
Regions,
} from './services/integrations';

import type {
Auth2faType,
AuthProvider,
Expand All @@ -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';
Expand Down Expand Up @@ -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 });
},

Expand Down

0 comments on commit 3e5c84f

Please sign in to comment.