From 9f25c64170c813b1a45e099117a62137bcbca5bf Mon Sep 17 00:00:00 2001 From: Philippe Martin Date: Thu, 30 Nov 2023 17:49:06 +0100 Subject: [PATCH] fix: update current context reactively (#5055) * fix: update current context reactively Signed-off-by: Philippe Martin * fix: use find istead of filter Signed-off-by: Philippe Martin --- ...erencesKubernetesContextsRendering.spec.ts | 38 ++++++++++++++++++- ...ferencesKubernetesContextsRendering.svelte | 7 +--- 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/packages/renderer/src/lib/preferences/PreferencesKubernetesContextsRendering.spec.ts b/packages/renderer/src/lib/preferences/PreferencesKubernetesContextsRendering.spec.ts index bdf65af49761..f44855a1414d 100644 --- a/packages/renderer/src/lib/preferences/PreferencesKubernetesContextsRendering.spec.ts +++ b/packages/renderer/src/lib/preferences/PreferencesKubernetesContextsRendering.spec.ts @@ -18,7 +18,7 @@ import '@testing-library/jest-dom/vitest'; import { beforeEach, expect, test, vi } from 'vitest'; -import { render, screen } from '@testing-library/svelte'; +import { fireEvent, render, screen, within } from '@testing-library/svelte'; import PreferencesKubernetesContextsRendering from './PreferencesKubernetesContextsRendering.svelte'; import { kubernetesContexts } from '/@/stores/kubernetes-contexts'; import type { KubeContext } from '../../../../main/src/plugin/kubernetes-context'; @@ -79,3 +79,39 @@ test('Test that context-name2 is the current context', async () => { expect(spanContextName).toBeInTheDocument(); expect(spanContextName.parentElement).toEqual(currentContext.parentElement); }); + +test('when deleting the current context, a popup should ask confirmation', async () => { + const showMessageBoxMock = vi.fn(); + (window as any).showMessageBox = showMessageBoxMock; + showMessageBoxMock.mockResolvedValue({ result: 1 }); + + render(PreferencesKubernetesContextsRendering, {}); + const currentContext = screen.getAllByRole('row')[1]; + expect(currentContext).toBeInTheDocument(); + + const label = within(currentContext).queryByLabelText('current-context'); + expect(label).toBeInTheDocument(); + + const deleteBtn = within(currentContext).getByRole('button', { name: 'Delete Context' }); + expect(deleteBtn).toBeInTheDocument(); + await fireEvent.click(deleteBtn); + expect(showMessageBoxMock).toHaveBeenCalledOnce(); +}); + +test('when deleting the non current context, no popup should ask confirmation', async () => { + const showMessageBoxMock = vi.fn(); + (window as any).showMessageBox = showMessageBoxMock; + showMessageBoxMock.mockResolvedValue({ result: 1 }); + + render(PreferencesKubernetesContextsRendering, {}); + const currentContext = screen.getAllByRole('row')[0]; + expect(currentContext).toBeInTheDocument(); + + const label = within(currentContext).queryByLabelText('current-context'); + expect(label).not.toBeInTheDocument(); + + const deleteBtn = within(currentContext).getByRole('button', { name: 'Delete Context' }); + expect(deleteBtn).toBeInTheDocument(); + await fireEvent.click(deleteBtn); + expect(showMessageBoxMock).not.toHaveBeenCalled(); +}); diff --git a/packages/renderer/src/lib/preferences/PreferencesKubernetesContextsRendering.svelte b/packages/renderer/src/lib/preferences/PreferencesKubernetesContextsRendering.svelte index 3c606af54b77..4e8c05498644 100644 --- a/packages/renderer/src/lib/preferences/PreferencesKubernetesContextsRendering.svelte +++ b/packages/renderer/src/lib/preferences/PreferencesKubernetesContextsRendering.svelte @@ -2,7 +2,6 @@ import SettingsPage from './SettingsPage.svelte'; import EngineIcon from '../ui/EngineIcon.svelte'; import EmptyScreen from '../ui/EmptyScreen.svelte'; -import { onMount } from 'svelte'; import Link from '../ui/Link.svelte'; import { faTrash, faRightToBracket } from '@fortawesome/free-solid-svg-icons'; import ListItemButtonIcon from '../ui/ListItemButtonIcon.svelte'; @@ -10,11 +9,7 @@ import ErrorMessage from '../ui/ErrorMessage.svelte'; import { kubernetesContexts } from '../../stores/kubernetes-contexts'; import { clearKubeUIContextErrors, setKubeUIContextError } from '../kube/KubeContextUI'; -let currentContextName: string | undefined; - -onMount(async () => { - currentContextName = await window.kubernetesGetCurrentContextName(); -}); +$: currentContextName = $kubernetesContexts.find(c => c.currentContext)?.name; async function handleSetContext(contextName: string) { $kubernetesContexts = clearKubeUIContextErrors($kubernetesContexts);