diff --git a/packages/renderer/src/lib/pod/DeployPodToKube.spec.ts b/packages/renderer/src/lib/pod/DeployPodToKube.spec.ts index dd1d6f8e7c7e..89862309f628 100644 --- a/packages/renderer/src/lib/pod/DeployPodToKube.spec.ts +++ b/packages/renderer/src/lib/pod/DeployPodToKube.spec.ts @@ -25,6 +25,7 @@ import { test, expect, vi, beforeEach, afterEach } from 'vitest'; import { render, screen, fireEvent, waitFor } from '@testing-library/svelte'; import DeployPodToKube from './DeployPodToKube.svelte'; import * as jsYaml from 'js-yaml'; +import { router } from 'tinro'; const generatePodmanKubeMock = vi.fn(); const kubernetesGetCurrentContextNameMock = vi.fn(); @@ -37,6 +38,17 @@ const kubernetesCreateIngressMock = vi.fn(); const kubernetesCreateServiceMock = vi.fn(); const kubernetesIsAPIGroupSupported = vi.fn(); const listSimpleContainersByLabelMock = vi.fn(); +const kubernetesReadNamespacedPodMock = vi.fn(); +const queryCommandSupportedMock = vi.fn(); + +// mock the router +vi.mock('tinro', () => { + return { + router: { + goto: vi.fn(), + }, + }; +}); beforeEach(() => { Object.defineProperty(window, 'generatePodmanKube', { @@ -48,7 +60,9 @@ beforeEach(() => { Object.defineProperty(window, 'kubernetesGetCurrentNamespace', { value: kubernetesGetCurrentNamespaceMock, }); - + Object.defineProperty(window, 'kubernetesReadNamespacedPod', { + value: kubernetesReadNamespacedPodMock, + }); Object.defineProperty(window, 'kubernetesListNamespaces', { value: kubernetesListNamespacesMock, }); @@ -73,6 +87,9 @@ beforeEach(() => { Object.defineProperty(window, 'listSimpleContainersByLabel', { value: listSimpleContainersByLabelMock, }); + Object.defineProperty(document, 'queryCommandSupported', { + value: queryCommandSupportedMock, + }); // podYaml with volumes const podYaml = { @@ -325,3 +342,40 @@ test('Fail to deploy ingress if service is not selected', async () => { // Expect kubernetesCreateIngress to not be called since we error out as service wasn't selected await waitFor(() => expect(kubernetesCreateIngressMock).not.toHaveBeenCalled()); }); + +test('Should display Open pod button after successful deployment', async () => { + await waitFor(() => kubernetesGetCurrentContextNameMock.mockResolvedValue('default')); + await waitRender({}); + const createButton = screen.getByRole('button', { name: 'Deploy' }); + expect(createButton).toBeInTheDocument(); + expect(createButton).toBeEnabled(); + + await waitFor(() => + kubernetesCreatePodMock.mockResolvedValue({ + metadata: { name: 'hello', namespace: 'default' }, + }), + ); + await waitFor(() => + kubernetesReadNamespacedPodMock.mockResolvedValue({ + metadata: { name: 'hello' }, + status: { + phase: 'Running', + }, + }), + ); + + vi.useFakeTimers(); + await fireEvent.click(createButton); + await vi.runAllTimersAsync(); + + const doneButton = screen.getByRole('button', { name: 'Done' }); + expect(doneButton).toBeInTheDocument(); + expect(doneButton).toBeEnabled(); + + const openPodButton = screen.getByRole('button', { name: 'Open Pod' }); + expect(openPodButton).toBeInTheDocument(); + expect(openPodButton).toBeEnabled(); + + await fireEvent.click(openPodButton); + expect(router.goto).toHaveBeenCalledWith(`/pods/kubernetes/hello/default/logs`); +}); diff --git a/packages/renderer/src/lib/pod/DeployPodToKube.svelte b/packages/renderer/src/lib/pod/DeployPodToKube.svelte index f11969f8c4ee..bf842e92fdc3 100644 --- a/packages/renderer/src/lib/pod/DeployPodToKube.svelte +++ b/packages/renderer/src/lib/pod/DeployPodToKube.svelte @@ -11,6 +11,7 @@ import { ensureRestrictedSecurityContext } from '/@/lib/pod/pod-utils'; import Button from '../ui/Button.svelte'; import { faExternalLink, faRocket } from '@fortawesome/free-solid-svg-icons'; import Link from '../ui/Link.svelte'; +import { router } from 'tinro'; export let resourceId: string; export let engineId: string; @@ -136,6 +137,13 @@ function goBackToHistory(): void { window.history.go(-1); } +function openPodDetails(): void { + if (!createdPod?.metadata?.name || !defaultContextName) { + return; + } + router.goto(`/pods/kubernetes/${encodeURI(createdPod.metadata.name)}/${encodeURI(defaultContextName)}/logs`); +} + function openRoute(route: V1Route) { window.openExternal(`http://${route.spec.host}`); } @@ -585,8 +593,10 @@ function updateKubeResult() { {/if} {#if deployFinished} -
- +
+ +
{/if}