diff --git a/src/behaviours/helm-charts/__snapshots__/activate-helm-repository-from-list-in-preferences.test.ts.snap b/src/behaviours/helm-charts/__snapshots__/activate-helm-repository-from-list-in-preferences.test.ts.snap
index 33cb389643..7433d2fe39 100644
--- a/src/behaviours/helm-charts/__snapshots__/activate-helm-repository-from-list-in-preferences.test.ts.snap
+++ b/src/behaviours/helm-charts/__snapshots__/activate-helm-repository-from-list-in-preferences.test.ts.snap
@@ -1063,7 +1063,9 @@ exports[`activate helm repository from list in preferences when navigating to pr
-
+
some-url
+
+
+ delete
+
+
+
@@ -1626,7 +1642,9 @@ exports[`activate helm repository from list in preferences when navigating to pr
-
+
some-url
+
+
+ delete
+
+
+
@@ -2238,7 +2270,9 @@ exports[`activate helm repository from list in preferences when navigating to pr
-
+
some-url
+
+
+ delete
+
+
+
@@ -3362,7 +3410,9 @@ exports[`activate helm repository from list in preferences when navigating to pr
-
+
some-url
+
+
+ delete
+
+
+
-
+
some-other-url
+
+
+ delete
+
+
+
@@ -3938,7 +4018,9 @@ exports[`activate helm repository from list in preferences when navigating to pr
-
+
some-url
+
+
+ delete
+
+
+
-
+
some-other-url
+
+
+ delete
+
+
+
@@ -4573,7 +4685,9 @@ exports[`activate helm repository from list in preferences when navigating to pr
-
+
some-url
+
+
+ delete
+
+
+
-
+
some-other-url
+
+
+ delete
+
+
+
diff --git a/src/behaviours/helm-charts/__snapshots__/deactivate-helm-repository-from-list-of-active-repository-in-preferences.test.ts.snap b/src/behaviours/helm-charts/__snapshots__/deactivate-helm-repository-from-list-of-active-repository-in-preferences.test.ts.snap
new file mode 100644
index 0000000000..7afbf7ef6b
--- /dev/null
+++ b/src/behaviours/helm-charts/__snapshots__/deactivate-helm-repository-from-list-of-active-repository-in-preferences.test.ts.snap
@@ -0,0 +1,2281 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`deactivate helm repository from list of active repositories in preferences when navigating to preferences containing helm repositories renders 1`] = `
+
+
+
+
+
+
+
+
+
+ Kubernetes
+
+
+
+ Kubectl binary download
+
+
+
+
+
+
+ Download mirror
+
+
+
+
+
+
+
+
+ Download mirror for kubectl
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Directory for binaries
+
+
+
+
+
+
+
+ The directory to download binaries into.
+
+
+
+
+ Path to kubectl binary
+
+
+
+
+
+
+
+
+
+
+
+ Kubeconfig Syncs
+
+
+
+
+
+ Synced Items
+
+
+
+
+ No files and folders have been synced yet
+
+
+
+
+
+
+ Helm Charts
+
+
+
+
+
+
+
+
+
+ Repositories
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Repositories
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ close
+
+
+
+
+ ESC
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`deactivate helm repository from list of active repositories in preferences when navigating to preferences containing helm repositories when active repositories resolve renders 1`] = `
+
+
+
+
+
+
+
+
+
+ Kubernetes
+
+
+
+ Kubectl binary download
+
+
+
+
+
+
+ Download mirror
+
+
+
+
+
+
+
+
+ Download mirror for kubectl
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Directory for binaries
+
+
+
+
+
+
+
+ The directory to download binaries into.
+
+
+
+
+ Path to kubectl binary
+
+
+
+
+
+
+
+
+
+
+
+ Kubeconfig Syncs
+
+
+
+
+
+ Synced Items
+
+
+
+
+ No files and folders have been synced yet
+
+
+
+
+
+
+ Helm Charts
+
+
+
+
+
+
+
+
+
+ Repositories
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Repositories
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ some-active-repository
+
+
+ some-url
+
+
+
+ delete
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ close
+
+
+
+
+ ESC
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`deactivate helm repository from list of active repositories in preferences when navigating to preferences containing helm repositories when active repositories resolve when deactivating repository renders 1`] = `
+
+
+
+
+
+
+
+
+
+ Kubernetes
+
+
+
+ Kubectl binary download
+
+
+
+
+
+
+ Download mirror
+
+
+
+
+
+
+
+
+ Download mirror for kubectl
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Directory for binaries
+
+
+
+
+
+
+
+ The directory to download binaries into.
+
+
+
+
+ Path to kubectl binary
+
+
+
+
+
+
+
+
+
+
+
+ Kubeconfig Syncs
+
+
+
+
+
+ Synced Items
+
+
+
+
+ No files and folders have been synced yet
+
+
+
+
+
+
+ Helm Charts
+
+
+
+
+
+
+
+
+
+ Repositories
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Repositories
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ some-active-repository
+
+
+ some-url
+
+
+
+ delete
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ close
+
+
+
+
+ ESC
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`deactivate helm repository from list of active repositories in preferences when navigating to preferences containing helm repositories when active repositories resolve when deactivating repository when deactivating resolves renders 1`] = `
+
+
+
+
+
+
+
+
+
+ Kubernetes
+
+
+
+ Kubectl binary download
+
+
+
+
+
+
+ Download mirror
+
+
+
+
+
+
+
+
+ Download mirror for kubectl
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Directory for binaries
+
+
+
+
+
+
+
+ The directory to download binaries into.
+
+
+
+
+ Path to kubectl binary
+
+
+
+
+
+
+
+
+
+
+
+ Kubeconfig Syncs
+
+
+
+
+
+ Synced Items
+
+
+
+
+ No files and folders have been synced yet
+
+
+
+
+
+
+ Helm Charts
+
+
+
+
+
+
+
+
+
+ Repositories
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Repositories
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ close
+
+
+
+
+ ESC
+
+
+
+
+
+
+
+
+
+`;
diff --git a/src/behaviours/helm-charts/deactivate-helm-repository-from-list-of-active-repository-in-preferences.test.ts b/src/behaviours/helm-charts/deactivate-helm-repository-from-list-of-active-repository-in-preferences.test.ts
new file mode 100644
index 0000000000..c71adf628c
--- /dev/null
+++ b/src/behaviours/helm-charts/deactivate-helm-repository-from-list-of-active-repository-in-preferences.test.ts
@@ -0,0 +1,117 @@
+/**
+ * Copyright (c) OpenLens Authors. All rights reserved.
+ * Licensed under MIT License. See LICENSE in root directory for more information.
+ */
+import type { RenderResult } from "@testing-library/react";
+import { fireEvent } from "@testing-library/react";
+import type { ApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder";
+import { getApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder";
+import type { AsyncFnMock } from "@async-fn/jest";
+import asyncFn from "@async-fn/jest";
+import execFileInjectable from "../../common/fs/exec-file.injectable";
+import helmBinaryPathInjectable from "../../main/helm/helm-binary-path.injectable";
+import getActiveHelmRepositoriesInjectable from "../../main/helm/repositories/get-active-helm-repositories/get-active-helm-repositories.injectable";
+import type { HelmRepo } from "../../common/helm-repo";
+import callForPublicHelmRepositoriesInjectable from "../../renderer/components/+preferences/kubernetes/helm-charts/activation-of-public-helm-repository/public-helm-repositories/call-for-public-helm-repositories.injectable";
+
+describe("deactivate helm repository from list of active repositories in preferences", () => {
+ let applicationBuilder: ApplicationBuilder;
+ let rendered: RenderResult;
+ let getActiveHelmRepositoriesMock: AsyncFnMock<() => Promise>;
+ let execFileMock: AsyncFnMock<
+ ReturnType
+ >;
+
+ beforeEach(async () => {
+ applicationBuilder = getApplicationBuilder();
+
+ execFileMock = asyncFn();
+ getActiveHelmRepositoriesMock = asyncFn();
+
+ applicationBuilder.beforeApplicationStart(({ mainDi, rendererDi }) => {
+ rendererDi.override(callForPublicHelmRepositoriesInjectable, () => async () => []);
+
+ mainDi.override(
+ getActiveHelmRepositoriesInjectable,
+ () => getActiveHelmRepositoriesMock,
+ );
+
+ mainDi.override(execFileInjectable, () => execFileMock);
+ mainDi.override(helmBinaryPathInjectable, () => "some-helm-binary-path");
+ });
+
+ rendered = await applicationBuilder.render();
+ });
+
+ describe("when navigating to preferences containing helm repositories", () => {
+ beforeEach(async () => {
+ applicationBuilder.preferences.navigate();
+ applicationBuilder.preferences.navigation.click("kubernetes");
+ });
+
+ it("renders", () => {
+ expect(rendered.baseElement).toMatchSnapshot();
+ });
+
+ describe("when active repositories resolve", () => {
+ beforeEach(async () => {
+ getActiveHelmRepositoriesMock.resolve([
+ { name: "some-active-repository", url: "some-url" },
+ ]);
+ });
+
+ it("renders", () => {
+ expect(rendered.baseElement).toMatchSnapshot();
+ });
+
+ describe("when deactivating repository", () => {
+ beforeEach(() => {
+ execFileMock.mockClear();
+ getActiveHelmRepositoriesMock.mockClear();
+
+ const deactiveButton = rendered.getByTestId(
+ "deactivate-helm-repository-some-active-repository",
+ );
+
+ fireEvent.click(deactiveButton);
+ });
+
+ it("renders", () => {
+ expect(rendered.baseElement).toMatchSnapshot();
+ });
+
+ it("deactivates the repository", () => {
+ expect(execFileMock).toHaveBeenCalledWith(
+ "some-helm-binary-path",
+ ["repo", "remove", "some-active-repository"],
+ );
+ });
+
+ it("does not reload active repositories yet", () => {
+ expect(getActiveHelmRepositoriesMock).not.toHaveBeenCalled();
+ });
+
+ describe("when deactivating resolves", () => {
+ beforeEach(async () => {
+ await execFileMock.resolveSpecific(
+ [
+ "some-helm-binary-path",
+ ["repo", "remove", "some-active-repository"],
+ ],
+
+ "",
+ );
+ });
+
+ it("renders", () => {
+ expect(rendered.baseElement).toMatchSnapshot();
+ });
+
+ it("reloads active repositories", () => {
+ expect(getActiveHelmRepositoriesMock).toHaveBeenCalled();
+ });
+ });
+ });
+ });
+ });
+});
diff --git a/src/renderer/components/+preferences/kubernetes/helm-charts/activation-of-public-helm-repository/select-helm-repository/select-helm-repository.injectable.ts b/src/renderer/components/+preferences/kubernetes/helm-charts/activation-of-public-helm-repository/select-helm-repository/select-helm-repository.injectable.ts
index 95261e9678..dd2e9c3aa5 100644
--- a/src/renderer/components/+preferences/kubernetes/helm-charts/activation-of-public-helm-repository/select-helm-repository/select-helm-repository.injectable.ts
+++ b/src/renderer/components/+preferences/kubernetes/helm-charts/activation-of-public-helm-repository/select-helm-repository/select-helm-repository.injectable.ts
@@ -7,7 +7,7 @@ import activateHelmRepositoryInjectable from "./activate-helm-repository.injecta
import type { SelectOption } from "../../../../../select";
import type { HelmRepo } from "../../../../../../../common/helm-repo";
import type { SingleValue } from "react-select";
-import deactivateHelmRepositoryInjectable from "./deactivate-helm-repository.injectable";
+import deactivateHelmRepositoryInjectable from "../../deactivate-helm-repository.injectable";
const selectHelmRepositoryInjectable = getInjectable({
id: "select-helm-repository",
diff --git a/src/renderer/components/+preferences/kubernetes/helm-charts/activation-of-public-helm-repository/select-helm-repository/deactivate-helm-repository.injectable.ts b/src/renderer/components/+preferences/kubernetes/helm-charts/deactivate-helm-repository.injectable.ts
similarity index 76%
rename from src/renderer/components/+preferences/kubernetes/helm-charts/activation-of-public-helm-repository/select-helm-repository/deactivate-helm-repository.injectable.ts
rename to src/renderer/components/+preferences/kubernetes/helm-charts/deactivate-helm-repository.injectable.ts
index 3b9bb2f088..3a1f7c000a 100644
--- a/src/renderer/components/+preferences/kubernetes/helm-charts/activation-of-public-helm-repository/select-helm-repository/deactivate-helm-repository.injectable.ts
+++ b/src/renderer/components/+preferences/kubernetes/helm-charts/deactivate-helm-repository.injectable.ts
@@ -3,10 +3,10 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
-import type { HelmRepo } from "../../../../../../../common/helm-repo";
-import { requestFromChannelInjectionToken } from "../../../../../../../common/utils/channel/request-from-channel-injection-token";
-import activeHelmRepositoriesInjectable from "../../active-helm-repositories.injectable";
-import deactivateHelmRepositoryChannelInjectable from "../../../../../../../common/helm/deactivate-helm-repository-channel.injectable";
+import type { HelmRepo } from "../../../../../common/helm-repo";
+import { requestFromChannelInjectionToken } from "../../../../../common/utils/channel/request-from-channel-injection-token";
+import activeHelmRepositoriesInjectable from "./active-helm-repositories.injectable";
+import deactivateHelmRepositoryChannelInjectable from "../../../../../common/helm/deactivate-helm-repository-channel.injectable";
const activatePublicHelmRepositoryInjectable = getInjectable({
id: "deactivate-public-helm-repository",
diff --git a/src/renderer/components/+preferences/kubernetes/helm-charts/helm-repositories.tsx b/src/renderer/components/+preferences/kubernetes/helm-charts/helm-repositories.tsx
index bcb6bfcbd2..aab7cb9152 100644
--- a/src/renderer/components/+preferences/kubernetes/helm-charts/helm-repositories.tsx
+++ b/src/renderer/components/+preferences/kubernetes/helm-charts/helm-repositories.tsx
@@ -15,12 +15,15 @@ import { Spinner } from "../../../spinner";
import type { HelmRepo } from "../../../../../common/helm-repo";
import { Notice } from "../../../+extensions/notice";
import { isEmpty } from "lodash/fp";
+import { RemovableItem } from "../../removable-item";
+import deactivateHelmRepositoryInjectable from "./deactivate-helm-repository.injectable";
interface Dependencies {
activeHelmRepositories: IAsyncComputed;
+ deactivateRepository: (repository: HelmRepo) => Promise;
}
-const NonInjectedActiveHelmRepositories = observer(({ activeHelmRepositories }: Dependencies) => {
+const NonInjectedActiveHelmRepositories = observer(({ activeHelmRepositories, deactivateRepository }: Dependencies) => {
if (activeHelmRepositories.pending.get()) {
return ;
}
@@ -40,13 +43,18 @@ const NonInjectedActiveHelmRepositories = observer(({ activeHelmRepositories }:
return (