Making apiBase injectable (#6022)

* Making apiBase injectable

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Convert all of Helm functions to be DI

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Make PortForward's use of apiBase fully injectable

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Convert all metric requests to be injectable

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Replace resource applier with injectables

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Switch KubeJsonApi.forCluster to be injectable but do not use

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Convert the rest of shell sessions to be DI-ed

- This is a prerequesit for using the new
  createKubeJsonApiForClusterInjectable

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Use new createKubeJsonApiForClusterInjectable for openNodeShellSession

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Make KubeconfigDialog injectable

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Remove jest-fetch-mock and make fetch injectable

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix tests with new global override

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Add new injectable for create KubeJsonApi and JsonApi instances

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix showing-details-for-helm-release behavioural tests

- Remove HelmChartStore in favour of all injectables

- Create a model for UpgradeChartDockTab

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix show details and updating helm releases tests

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix residual typing issues related to metrics

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix crash on load due to circular dependency

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix create resource tab not working

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Remove legacy apiBase global

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Introduce and use isDebuggingInjectable

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Introduce and use windowLocationInjectable

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Remove global legacy apiKube

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Improve injectable filenames compared to the injectables inside

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Remove modifying input in requestActivePortForwardInjectable

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Introduce and use get(Milli)SecondsFromUnixEpochInjectable

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Switch to non-reactive way of gettting possible helm release versions

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix typo

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix bug in KubeApi constructor

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Convert all KubeApi related tests to use asyncFn

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix unit tests after introducing new injectables that have side effects

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix bad rebase causing tests to fail

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Improve expects for multiple field values

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix crash will looking up api refs

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix breaking change on KubeApi.list

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Better fix for formatting urls

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Remove injectable for time since we should just use useMockTime

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Add happy path behavioural tests for upgrade chart tab

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Remove debug message

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Update snapshots

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* fix showing-details-for-helm-release tests

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix installing-helm-chart-from-new-tab tests

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix tests relating to hosted cluster id

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Update snapshots to recent changes in master

Co-authored-by: Janne Savolainen <janne.savolainen@live.fi>

Signed-off-by: Iku-turso <mikko.aspiala@gmail.com>

* Reupdated upgrade chart new tab test snapshots

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix flakiness in unit test when using <Animated>

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix flakiness and improve tests for DeleteClusterDialog

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix kubeconfig-sync tests

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix <Extensions> tests by removing mockFs and making everything injectable

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix build issues

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix getElectronAppPathInjectable override not returning absolute paths

- Also fixes the listing-active-helm-repos-in-prefs tests

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Replace all uses of getAbsolutePath with joinPaths as it is more correct and less confusing

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix opening application window tests by making override properly absolute

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Update snapshots relating no longer using getAbsolutePath

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix and add behavioural tests for RenderDelay

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix extension discovery tests

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix test flakiness because of path side effects, propagate uses to as many places

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix extension-discovery tests

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Add global override to fix some tests

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Rewrite and fix implementation of KubeconfigManager and its tests

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix tests by global override pathExists

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix unit tests failing on windows by using injectable verions of path functions

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Attempt to fix test timeout by using runInAction

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Update snapshots after rebase

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Update snapshots after rebase

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix tests after rebase

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix setupIpcMainHandlers usage

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Update snapshots

Signed-off-by: Sebastian Malton <sebastian@malton.name>

Signed-off-by: Sebastian Malton <sebastian@malton.name>
Signed-off-by: Iku-turso <mikko.aspiala@gmail.com>
Co-authored-by: Iku-turso <mikko.aspiala@gmail.com>
This commit is contained in:
authored and GitHub committed 2022-10-05 08:10:36 -04:00
1 parent ed073d6562
commit 76066c5ebf
367 files changed
+16701 -5302

No files matched your search

@@ -484,6 +484,7 @@ exports[`cluster - order of sidebar items when rendered renders 1`] = `
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -493,7 +494,9 @@ exports[`cluster - order of sidebar items when rendered renders 1`] = `
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -1096,6 +1099,7 @@ exports[`cluster - order of sidebar items when rendered when parent is expanded
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -1105,7 +1109,9 @@ exports[`cluster - order of sidebar items when rendered when parent is expanded
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -457,6 +457,7 @@ exports[`cluster - sidebar and tab navigation for core given core registrations
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -466,7 +467,9 @@ exports[`cluster - sidebar and tab navigation for core given core registrations
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -990,6 +993,7 @@ exports[`cluster - sidebar and tab navigation for core given core registrations
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -999,7 +1003,9 @@ exports[`cluster - sidebar and tab navigation for core given core registrations
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -1543,6 +1549,7 @@ exports[`cluster - sidebar and tab navigation for core given core registrations
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -1552,7 +1559,9 @@ exports[`cluster - sidebar and tab navigation for core given core registrations
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -1976,6 +1985,7 @@ exports[`cluster - sidebar and tab navigation for core given core registrations
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -1985,7 +1995,9 @@ exports[`cluster - sidebar and tab navigation for core given core registrations
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -2388,6 +2400,7 @@ exports[`cluster - sidebar and tab navigation for core given core registrations
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -2397,7 +2410,9 @@ exports[`cluster - sidebar and tab navigation for core given core registrations
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -2941,6 +2956,7 @@ exports[`cluster - sidebar and tab navigation for core given core registrations
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -2950,7 +2966,9 @@ exports[`cluster - sidebar and tab navigation for core given core registrations
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -3474,6 +3492,7 @@ exports[`cluster - sidebar and tab navigation for core given core registrations
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -3483,7 +3502,9 @@ exports[`cluster - sidebar and tab navigation for core given core registrations
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -457,6 +457,7 @@ exports[`cluster - sidebar and tab navigation for extensions given extension wit
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -466,7 +467,9 @@ exports[`cluster - sidebar and tab navigation for extensions given extension wit
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -990,6 +993,7 @@ exports[`cluster - sidebar and tab navigation for extensions given extension wit
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -999,7 +1003,9 @@ exports[`cluster - sidebar and tab navigation for extensions given extension wit
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -1559,6 +1565,7 @@ exports[`cluster - sidebar and tab navigation for extensions given extension wit
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -1568,7 +1575,9 @@ exports[`cluster - sidebar and tab navigation for extensions given extension wit
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -2047,6 +2056,7 @@ exports[`cluster - sidebar and tab navigation for extensions given extension wit
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -2056,7 +2066,9 @@ exports[`cluster - sidebar and tab navigation for extensions given extension wit
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -2535,6 +2547,7 @@ exports[`cluster - sidebar and tab navigation for extensions given extension wit
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -2544,7 +2557,9 @@ exports[`cluster - sidebar and tab navigation for extensions given extension wit
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -2986,6 +3001,7 @@ exports[`cluster - sidebar and tab navigation for extensions given extension wit
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -2995,7 +3011,9 @@ exports[`cluster - sidebar and tab navigation for extensions given extension wit
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -3555,6 +3573,7 @@ exports[`cluster - sidebar and tab navigation for extensions given extension wit
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -3564,7 +3583,9 @@ exports[`cluster - sidebar and tab navigation for extensions given extension wit
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -4088,6 +4109,7 @@ exports[`cluster - sidebar and tab navigation for extensions given extension wit
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -4097,7 +4119,9 @@ exports[`cluster - sidebar and tab navigation for extensions given extension wit
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -429,6 +429,7 @@ exports[`cluster - visibility of sidebar items given kube resource for route is
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -438,7 +439,9 @@ exports[`cluster - visibility of sidebar items given kube resource for route is
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -974,6 +977,7 @@ exports[`cluster - visibility of sidebar items given kube resource for route is
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -983,7 +987,9 @@ exports[`cluster - visibility of sidebar items given kube resource for route is
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -484,6 +484,7 @@ exports[`workload overview when navigating to workload overview renders 1`] = `
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -493,7 +494,9 @@ exports[`workload overview when navigating to workload overview renders 1`] = `
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -0,0 +1,20 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import type { ClusterId } from "../../../../common/cluster-types";
import type { RequestChannel } from "../../../../common/utils/channel/request-channel-injection-token";
import { requestChannelInjectionToken } from "../../../../common/utils/channel/request-channel-injection-token";
export type ClearClusterAsDeletingChannel = RequestChannel<ClusterId, void>;
const clearClusterAsDeletingChannelInjectable = getInjectable({
id: "clear-cluster-as-deleting-channel",
instantiate: (): ClearClusterAsDeletingChannel => ({
id: "clear-cluster-as-deleting",
}),
injectionToken: requestChannelInjectionToken,
});
export default clearClusterAsDeletingChannelInjectable;
@@ -0,0 +1,20 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import type { ClusterId } from "../../../../common/cluster-types";
import type { RequestChannel } from "../../../../common/utils/channel/request-channel-injection-token";
import { requestChannelInjectionToken } from "../../../../common/utils/channel/request-channel-injection-token";
export type DeleteClusterChannel = RequestChannel<ClusterId, void>;
const deleteClusterChannelInjectable = getInjectable({
id: "delete-cluster-channel",
instantiate: (): DeleteClusterChannel => ({
id: "delete-cluster",
}),
injectionToken: requestChannelInjectionToken,
});
export default deleteClusterChannelInjectable;
@@ -0,0 +1,20 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import type { ClusterId } from "../../../../common/cluster-types";
import type { RequestChannel } from "../../../../common/utils/channel/request-channel-injection-token";
import { requestChannelInjectionToken } from "../../../../common/utils/channel/request-channel-injection-token";
export type SetClusterAsDeletingChannel = RequestChannel<ClusterId, void>;
const setClusterAsDeletingChannelInjectable = getInjectable({
id: "set-cluster-as-deleting-channel",
instantiate: (): SetClusterAsDeletingChannel => ({
id: "set-cluster-as-deleting",
}),
injectionToken: requestChannelInjectionToken,
});
export default setClusterAsDeletingChannelInjectable;
@@ -0,0 +1,284 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import "@testing-library/jest-dom/extend-expect";
import { KubeConfig } from "@kubernetes/client-node";
import type { RenderResult } from "@testing-library/react";
import type { CreateCluster } from "../../../common/cluster/create-cluster-injection-token";
import { createClusterInjectionToken } from "../../../common/cluster/create-cluster-injection-token";
import createContextHandlerInjectable from "../../../main/context-handler/create-context-handler.injectable";
import createKubeconfigManagerInjectable from "../../../main/kubeconfig-manager/create-kubeconfig-manager.injectable";
import normalizedPlatformInjectable from "../../../common/vars/normalized-platform.injectable";
import kubectlBinaryNameInjectable from "../../../main/kubectl/binary-name.injectable";
import kubectlDownloadingNormalizedArchInjectable from "../../../main/kubectl/normalized-arch.injectable";
import openDeleteClusterDialogInjectable, { type OpenDeleteClusterDialog } from "../../../renderer/components/delete-cluster-dialog/open.injectable";
import { type ApplicationBuilder, getApplicationBuilder } from "../../../renderer/components/test-utils/get-application-builder";
import storesAndApisCanBeCreatedInjectable from "../../../renderer/stores-apis-can-be-created.injectable";
import type { Cluster } from "../../../common/cluster/cluster";
import navigateToCatalogInjectable from "../../../common/front-end-routing/routes/catalog/navigate-to-catalog.injectable";
import appEventBusInjectable from "../../../common/app-event-bus/app-event-bus.injectable";
import directoryForKubeConfigsInjectable from "../../../common/app-paths/directory-for-kube-configs/directory-for-kube-configs.injectable";
import joinPathsInjectable from "../../../common/path/join-paths.injectable";
const currentClusterServerUrl = "https://localhost";
const nonCurrentClusterServerUrl = "http://localhost";
const multiClusterConfig = `
apiVersion: v1
clusters:
- cluster:
server: ${currentClusterServerUrl}
name: some-current-context-cluster
- cluster:
server: ${nonCurrentClusterServerUrl}
name: some-non-current-context-cluster
contexts:
- context:
cluster: some-current-context-cluster
user: some-user
name: some-current-context
- context:
cluster: some-non-current-context-cluster
user: some-user
name: some-non-current-context
current-context: some-current-context
kind: Config
preferences: {}
users:
- name: some-user
user:
token: kubeconfig-user-q4lm4:xxxyyyy
`;
const singleClusterServerUrl = "http://localhost";
const singleClusterConfig = `
apiVersion: v1
clusters:
- cluster:
server: ${singleClusterServerUrl}
name: some-cluster
contexts:
- context:
cluster: some-cluster
user: some-user
name: some-context
current-context: some-context
kind: Config
preferences: {}
users:
- name: some-user
user:
token: kubeconfig-user-q4lm4:xxxyyyy
`;
describe("Deleting a cluster", () => {
let builder: ApplicationBuilder;
let openDeleteClusterDialog: OpenDeleteClusterDialog;
let createCluster: CreateCluster;
let rendered: RenderResult;
let config: KubeConfig;
beforeEach(async () => {
config = new KubeConfig();
builder = getApplicationBuilder();
builder.beforeApplicationStart((mainDi) => {
mainDi.override(createContextHandlerInjectable, () => () => undefined as never);
mainDi.override(createKubeconfigManagerInjectable, () => () => undefined as never);
mainDi.override(kubectlBinaryNameInjectable, () => "kubectl");
mainDi.override(kubectlDownloadingNormalizedArchInjectable, () => "amd64");
mainDi.override(normalizedPlatformInjectable, () => "darwin");
});
builder.beforeWindowStart((windowDi) => {
windowDi.override(storesAndApisCanBeCreatedInjectable, () => true);
openDeleteClusterDialog = windowDi.inject(openDeleteClusterDialogInjectable);
// TODO: remove this line when all global uses of appEventBus are removed
windowDi.permitSideEffects(appEventBusInjectable);
});
builder.afterWindowStart(windowDi => {
createCluster = windowDi.inject(createClusterInjectionToken);
const navigateToCatalog = windowDi.inject(navigateToCatalogInjectable);
navigateToCatalog();
});
rendered = await builder.render();
});
describe("when the kubeconfig has multiple clusters", () => {
let currentCluster: Cluster;
let nonCurrentCluster: Cluster;
beforeEach(() => {
config.loadFromString(multiClusterConfig);
currentCluster = createCluster({
id: "some-current-context-cluster",
contextName: "some-current-context",
preferences: {
clusterName: "some-current-context-cluster",
},
kubeConfigPath: "./temp-kube-config",
}, {
clusterServerUrl: currentClusterServerUrl,
});
nonCurrentCluster = createCluster({
id: "some-non-current-context-cluster",
contextName: "some-non-current-context",
preferences: {
clusterName: "some-non-current-context-cluster",
},
kubeConfigPath: "./temp-kube-config",
}, {
clusterServerUrl: currentClusterServerUrl,
});
});
describe("when the dialog is opened for the current cluster", () => {
// TODO: replace with actual behaviour instead of technical use
beforeEach(async () => {
openDeleteClusterDialog({
cluster: currentCluster,
config,
});
await rendered.findByTestId("delete-cluster-dialog");
});
it("renders", () => {
expect(rendered.baseElement).toMatchSnapshot();
});
it("shows context switcher", () => {
expect(rendered.queryByText("Select new context...")).toBeInTheDocument();
});
it("shows warning", () => {
expect(rendered.queryByTestId("current-context-warning")).toBeInTheDocument();
});
});
describe("when the dialog is opened for not the current cluster", () => {
// TODO: replace with actual behaviour instead of technical use
beforeEach(async () => {
openDeleteClusterDialog({
cluster: nonCurrentCluster,
config,
});
await rendered.findByTestId("delete-cluster-dialog");
});
it("renders", () => {
expect(rendered.baseElement).toMatchSnapshot();
});
it("shows warning", () => {
expect(rendered.queryByTestId("kubeconfig-change-warning")).toBeInTheDocument();
});
it("does not show context switcher", () => {
expect(rendered.queryByText("Select new context...")).not.toBeInTheDocument();
});
describe("when context switching checkbox is clicked", () => {
beforeEach(() => {
rendered.getByTestId("delete-cluster-dialog-context-switch").click();
});
it("renders", () => {
expect(rendered.baseElement).toMatchSnapshot();
});
it("shows context switcher", () => {
expect(rendered.queryByText("Select new context...")).toBeInTheDocument();
});
});
});
});
describe("when an internal kubeconfig cluster is used", () => {
let currentCluster: Cluster;
beforeEach(() => {
config.loadFromString(singleClusterConfig);
const directoryForKubeConfigs = builder.applicationWindow.only.di.inject(directoryForKubeConfigsInjectable);
const joinPaths = builder.applicationWindow.only.di.inject(joinPathsInjectable);
currentCluster = createCluster({
id: "some-cluster",
contextName: "some-context",
preferences: {
clusterName: "some-cluster",
},
kubeConfigPath: joinPaths(directoryForKubeConfigs, "some-cluster.json"),
}, {
clusterServerUrl: singleClusterServerUrl,
});
});
describe("when the dialog is opened", () => {
// TODO: replace with actual behaviour instead of technical use
beforeEach(async () => {
openDeleteClusterDialog({
cluster: currentCluster,
config,
});
await rendered.findByTestId("delete-cluster-dialog");
});
it("renders", () => {
expect(rendered.baseElement).toMatchSnapshot();
});
it("shows warning", () => {
expect(rendered.queryByTestId("internal-kubeconfig-warning")).toBeInTheDocument();
});
});
});
describe("when the kubeconfig has only one cluster", () => {
let currentCluster: Cluster;
beforeEach(() => {
config.loadFromString(singleClusterConfig);
currentCluster = createCluster({
id: "some-cluster",
contextName: "some-context",
preferences: {
clusterName: "some-cluster",
},
kubeConfigPath: "./temp-kube-config",
}, {
clusterServerUrl: singleClusterServerUrl,
});
});
describe("when the dialog is opened", () => {
// TODO: replace with actual behaviour instead of technical use
beforeEach(async () => {
openDeleteClusterDialog({
cluster: currentCluster,
config,
});
await rendered.findByTestId("delete-cluster-dialog");
});
it("renders", () => {
expect(rendered.baseElement).toMatchSnapshot();
});
it("shows warning", () => {
expect(rendered.queryByTestId("no-more-contexts-warning")).toBeInTheDocument();
});
});
});
});
@@ -0,0 +1,23 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import { requestChannelListenerInjectionToken } from "../../../../common/utils/channel/request-channel-listener-injection-token";
import clustersThatAreBeingDeletedInjectable from "../../../../main/cluster/are-being-deleted.injectable";
import clearClusterAsDeletingChannelInjectable from "../common/clear-as-deleting-channel.injectable";
const clearClusterAsDeletingChannelHandlerInjectable = getInjectable({
id: "clear-cluster-as-deleting-channel-handler",
instantiate: (di) => {
const clustersThatAreBeingDeleted = di.inject(clustersThatAreBeingDeletedInjectable);
return {
channel: di.inject(clearClusterAsDeletingChannelInjectable),
handler: (clusterId) => clustersThatAreBeingDeleted.delete(clusterId),
};
},
injectionToken: requestChannelListenerInjectionToken,
});
export default clearClusterAsDeletingChannelHandlerInjectable;
@@ -0,0 +1,56 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import appEventBusInjectable from "../../../../common/app-event-bus/app-event-bus.injectable";
import clusterFramesInjectable from "../../../../common/cluster-frames.injectable";
import clusterStoreInjectable from "../../../../common/cluster-store/cluster-store.injectable";
import directoryForLensLocalStorageInjectable from "../../../../common/directory-for-lens-local-storage/directory-for-lens-local-storage.injectable";
import deleteFileInjectable from "../../../../common/fs/delete-file.injectable";
import joinPathsInjectable from "../../../../common/path/join-paths.injectable";
import { requestChannelListenerInjectionToken } from "../../../../common/utils/channel/request-channel-listener-injection-token";
import deleteClusterChannelInjectable from "../common/delete-channel.injectable";
const deleteClusterChannelHandlerInjectable = getInjectable({
id: "delete-cluster-channel-handler",
instantiate: (di) => {
const appEventBus = di.inject(appEventBusInjectable);
const clusterStore = di.inject(clusterStoreInjectable);
const clusterFrames = di.inject(clusterFramesInjectable);
const joinPaths = di.inject(joinPathsInjectable);
const directoryForLensLocalStorage = di.inject(directoryForLensLocalStorageInjectable);
const deleteFile = di.inject(deleteFileInjectable);
return {
channel: di.inject(deleteClusterChannelInjectable),
handler: async (clusterId) =>{
appEventBus.emit({ name: "cluster", action: "remove" });
const cluster = clusterStore.getById(clusterId);
if (!cluster) {
return;
}
cluster.disconnect();
clusterFrames.delete(cluster.id);
// Remove from the cluster store as well, this should clear any old settings
clusterStore.clusters.delete(cluster.id);
try {
// remove the local storage file
const localStorageFilePath = joinPaths(directoryForLensLocalStorage, `${cluster.id}.json`);
await deleteFile(localStorageFilePath);
} catch {
// ignore error
}
},
};
},
injectionToken: requestChannelListenerInjectionToken,
});
export default deleteClusterChannelHandlerInjectable;
@@ -0,0 +1,23 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import { requestChannelListenerInjectionToken } from "../../../../common/utils/channel/request-channel-listener-injection-token";
import clustersThatAreBeingDeletedInjectable from "../../../../main/cluster/are-being-deleted.injectable";
import setClusterAsDeletingChannelInjectable from "../common/set-as-deleting-channel.injectable";
const setClusterAsDeletingChannelHandlerInjectable = getInjectable({
id: "set-cluster-as-deleting-channel-handler",
instantiate: (di) => {
const clustersThatAreBeingDeleted = di.inject(clustersThatAreBeingDeletedInjectable);
return {
channel: di.inject(setClusterAsDeletingChannelInjectable),
handler: (clusterId) => clustersThatAreBeingDeleted.add(clusterId),
};
},
injectionToken: requestChannelListenerInjectionToken,
});
export default setClusterAsDeletingChannelHandlerInjectable;
@@ -0,0 +1,22 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import type { ClusterId } from "../../../../common/cluster-types";
import requestFromChannelInjectable from "../../../../renderer/utils/channel/request-from-channel.injectable";
import clearClusterAsDeletingChannelInjectable from "../common/clear-as-deleting-channel.injectable";
export type RequestClearClusterAsDeleting = (clusterId: ClusterId) => Promise<void>;
const requestClearClusterAsDeletingInjectable = getInjectable({
id: "request-clear-cluster-as-deleting",
instantiate: (di): RequestClearClusterAsDeleting => {
const requestChannel = di.inject(requestFromChannelInjectable);
const clearClusterAsDeletingChannel = di.inject(clearClusterAsDeletingChannelInjectable);
return (clusterId) => requestChannel(clearClusterAsDeletingChannel, clusterId);
},
});
export default requestClearClusterAsDeletingInjectable;
@@ -0,0 +1,22 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import type { ClusterId } from "../../../../common/cluster-types";
import requestFromChannelInjectable from "../../../../renderer/utils/channel/request-from-channel.injectable";
import deleteClusterChannelInjectable from "../common/delete-channel.injectable";
export type RequestDeleteCluster = (clusterId: ClusterId) => Promise<void>;
const requestDeleteClusterInjectable = getInjectable({
id: "request-delete-cluster",
instantiate: (di): RequestDeleteCluster => {
const requestChannel = di.inject(requestFromChannelInjectable);
const deleteClusterChannel = di.inject(deleteClusterChannelInjectable);
return (clusterId) => requestChannel(deleteClusterChannel, clusterId);
},
});
export default requestDeleteClusterInjectable;
@@ -0,0 +1,22 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import type { ClusterId } from "../../../../common/cluster-types";
import requestFromChannelInjectable from "../../../../renderer/utils/channel/request-from-channel.injectable";
import setClusterAsDeletingChannelInjectable from "../common/set-as-deleting-channel.injectable";
export type RequestSetClusterAsDeleting = (clusterId: ClusterId) => Promise<void>;
const requestSetClusterAsDeletingInjectable = getInjectable({
id: "request-set-cluster-as-deleting",
instantiate: (di): RequestSetClusterAsDeleting => {
const requestChannel = di.inject(requestFromChannelInjectable);
const setClusterAsDeletingChannel = di.inject(setClusterAsDeletingChannelInjectable);
return (clusterId) => requestChannel(setClusterAsDeletingChannel, clusterId);
},
});
export default requestSetClusterAsDeletingInjectable;
@@ -310,6 +310,7 @@ exports[`disable-cluster-pages-when-cluster-is-not-relevant given extension shou
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -319,7 +320,9 @@ exports[`disable-cluster-pages-when-cluster-is-not-relevant given extension shou
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -817,6 +820,7 @@ exports[`disable-cluster-pages-when-cluster-is-not-relevant given extension shou
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -826,7 +830,9 @@ exports[`disable-cluster-pages-when-cluster-is-not-relevant given extension shou
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -1324,6 +1330,7 @@ exports[`disable-cluster-pages-when-cluster-is-not-relevant given not yet known
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -1333,7 +1340,9 @@ exports[`disable-cluster-pages-when-cluster-is-not-relevant given not yet known
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -448,6 +448,7 @@ exports[`disable sidebar items when cluster is not relevant given extension shou
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -457,7 +458,9 @@ exports[`disable sidebar items when cluster is not relevant given extension shou
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -955,6 +958,7 @@ exports[`disable sidebar items when cluster is not relevant given extension shou
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -964,7 +968,9 @@ exports[`disable sidebar items when cluster is not relevant given extension shou
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -1462,6 +1468,7 @@ exports[`disable sidebar items when cluster is not relevant given not yet known
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -1471,7 +1478,9 @@ exports[`disable sidebar items when cluster is not relevant given not yet known
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -367,6 +367,7 @@ exports[`disable kube object detail items when cluster is not relevant given ext
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -376,7 +377,9 @@ exports[`disable kube object detail items when cluster is not relevant given ext
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -849,6 +852,7 @@ exports[`disable kube object detail items when cluster is not relevant given ext
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -858,7 +862,9 @@ exports[`disable kube object detail items when cluster is not relevant given ext
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -1331,6 +1337,7 @@ exports[`disable kube object detail items when cluster is not relevant given not
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -1340,7 +1347,9 @@ exports[`disable kube object detail items when cluster is not relevant given not
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -315,6 +315,7 @@ exports[`disable kube object menu items when cluster is not relevant given exten
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -324,7 +325,9 @@ exports[`disable kube object menu items when cluster is not relevant given exten
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -701,6 +704,7 @@ exports[`disable kube object menu items when cluster is not relevant given exten
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -710,7 +714,9 @@ exports[`disable kube object menu items when cluster is not relevant given exten
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -1087,6 +1093,7 @@ exports[`disable kube object menu items when cluster is not relevant given not y
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -1096,7 +1103,9 @@ exports[`disable kube object menu items when cluster is not relevant given not y
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -304,6 +304,7 @@ exports[`show status for a kube object given application starts and in test page
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -313,7 +314,9 @@ exports[`show status for a kube object given application starts and in test page
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -725,6 +728,7 @@ exports[`show status for a kube object given application starts and in test page
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -734,7 +738,9 @@ exports[`show status for a kube object given application starts and in test page
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -1146,6 +1152,7 @@ exports[`show status for a kube object given application starts and in test page
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -1155,7 +1162,9 @@ exports[`show status for a kube object given application starts and in test page
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -1527,6 +1536,7 @@ exports[`show status for a kube object given application starts and in test page
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -1536,7 +1546,9 @@ exports[`show status for a kube object given application starts and in test page
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -1908,6 +1920,7 @@ exports[`show status for a kube object given application starts and in test page
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -1917,7 +1930,9 @@ exports[`show status for a kube object given application starts and in test page
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -2329,6 +2344,7 @@ exports[`show status for a kube object given application starts and in test page
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -2338,7 +2354,9 @@ exports[`show status for a kube object given application starts and in test page
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -344,6 +344,7 @@ exports[`disable kube object statuses when cluster is not relevant given extensi
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -353,7 +354,9 @@ exports[`disable kube object statuses when cluster is not relevant given extensi
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -725,6 +728,7 @@ exports[`disable kube object statuses when cluster is not relevant given extensi
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -734,7 +738,9 @@ exports[`disable kube object statuses when cluster is not relevant given extensi
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -1106,6 +1112,7 @@ exports[`disable kube object statuses when cluster is not relevant given not yet
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -1115,7 +1122,9 @@ exports[`disable kube object statuses when cluster is not relevant given not yet
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -548,6 +548,7 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-some-first-tab-id"
tabindex="0"
>
<span
@@ -557,7 +558,9 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-some-first-tab-id"
>
Close ⌘+W
</div>
</div>
@@ -1183,6 +1186,7 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-some-first-tab-id"
tabindex="0"
>
<span
@@ -1192,7 +1196,9 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-some-first-tab-id"
>
Close ⌘+W
</div>
</div>
@@ -1823,6 +1829,7 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-some-first-tab-id"
tabindex="0"
>
<span
@@ -1832,7 +1839,9 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-some-first-tab-id"
>
Close ⌘+W
</div>
</div>
@@ -2532,6 +2541,7 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-some-first-tab-id"
tabindex="0"
>
<span
@@ -2541,7 +2551,9 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-some-first-tab-id"
>
Close ⌘+W
</div>
</div>
@@ -2581,6 +2593,7 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-some-second-tab-id"
tabindex="0"
>
<span
@@ -2590,7 +2603,9 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-some-second-tab-id"
>
Close ⌘+W
</div>
</div>
@@ -3216,6 +3231,7 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-some-first-tab-id"
tabindex="0"
>
<span
@@ -3225,7 +3241,9 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-some-first-tab-id"
>
Close ⌘+W
</div>
</div>
@@ -3265,6 +3283,7 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-some-second-tab-id"
tabindex="0"
>
<span
@@ -3274,7 +3293,9 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-some-second-tab-id"
>
Close ⌘+W
</div>
</div>
@@ -3972,6 +3993,7 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-some-first-tab-id"
tabindex="0"
>
<span
@@ -3981,7 +4003,9 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-some-first-tab-id"
>
Close ⌘+W
</div>
</div>
@@ -4021,6 +4045,7 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-some-second-tab-id"
tabindex="0"
>
<span
@@ -4030,7 +4055,9 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-some-second-tab-id"
>
Close ⌘+W
</div>
</div>
@@ -4730,6 +4757,7 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-some-first-tab-id"
tabindex="0"
>
<span
@@ -4739,7 +4767,9 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-some-first-tab-id"
>
Close ⌘+W
</div>
</div>
@@ -5453,6 +5483,7 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-some-first-tab-id"
tabindex="0"
>
<span
@@ -5462,7 +5493,9 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-some-first-tab-id"
>
Close ⌘+W
</div>
</div>
@@ -6171,6 +6204,7 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-some-first-tab-id"
tabindex="0"
>
<span
@@ -6180,7 +6214,9 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-some-first-tab-id"
>
Close ⌘+W
</div>
</div>
@@ -6880,6 +6916,7 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-some-first-tab-id"
tabindex="0"
>
<span
@@ -6889,7 +6926,9 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-some-first-tab-id"
>
Close ⌘+W
</div>
</div>
@@ -7589,6 +7628,7 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-some-first-tab-id"
tabindex="0"
>
<span
@@ -7598,7 +7638,9 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-some-first-tab-id"
>
Close ⌘+W
</div>
</div>
@@ -8845,6 +8887,7 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-some-first-tab-id"
tabindex="0"
>
<span
@@ -8854,7 +8897,9 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-some-first-tab-id"
>
Close ⌘+W
</div>
</div>
@@ -10657,6 +10702,7 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-some-first-tab-id"
tabindex="0"
>
<span
@@ -10666,7 +10712,9 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-some-first-tab-id"
>
Close ⌘+W
</div>
</div>
@@ -455,6 +455,7 @@ exports[`cluster/namespaces - edit namespaces from previously opened tab given t
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-some-first-tab-id"
tabindex="0"
>
<span
@@ -464,7 +465,9 @@ exports[`cluster/namespaces - edit namespaces from previously opened tab given t
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-some-first-tab-id"
>
Close ⌘+W
</div>
</div>
@@ -997,6 +1000,7 @@ exports[`cluster/namespaces - edit namespaces from previously opened tab given t
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-some-first-tab-id"
tabindex="0"
>
<span
@@ -1006,7 +1010,9 @@ exports[`cluster/namespaces - edit namespaces from previously opened tab given t
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-some-first-tab-id"
>
Close ⌘+W
</div>
</div>
@@ -22,7 +22,6 @@ import pathExistsInjectable from "../../common/fs/path-exists.injectable";
import readJsonFileInjectable from "../../common/fs/read-json-file.injectable";
import { navigateToRouteInjectionToken } from "../../common/front-end-routing/navigate-to-route-injection-token";
import sidebarStorageInjectable from "../../renderer/components/layout/sidebar-storage/sidebar-storage.injectable";
import hostedClusterIdInjectable from "../../renderer/cluster-frame-context/hosted-cluster-id.injectable";
import { advanceFakeTime, useFakeTime } from "../../common/test-utils/use-fake-time";
import storageSaveDelayInjectable from "../../renderer/utils/create-storage/storage-save-delay.injectable";
@@ -38,7 +37,6 @@ describe("cluster - sidebar and tab navigation for core", () => {
builder.setEnvironmentToClusterFrame();
builder.beforeWindowStart((windowDi) => {
windowDi.override(hostedClusterIdInjectable, () => "some-hosted-cluster-id");
windowDi.override(storageSaveDelayInjectable, () => 250);
windowDi.override(
@@ -98,7 +96,7 @@ describe("cluster - sidebar and tab navigation for core", () => {
const writeJsonFileFake = windowDi.inject(writeJsonFileInjectable);
await writeJsonFileFake(
"/some-directory-for-lens-local-storage/some-hosted-cluster-id.json",
"/some-directory-for-lens-local-storage/some-cluster-id.json",
{
sidebar: {
expanded: { "some-parent-id": true },
@@ -286,7 +284,7 @@ describe("cluster - sidebar and tab navigation for core", () => {
const readJsonFileFake = windowDi.inject(readJsonFileInjectable);
const actual = await readJsonFileFake(
"/some-directory-for-lens-local-storage/some-hosted-cluster-id.json",
"/some-directory-for-lens-local-storage/some-cluster-id.json",
);
expect(actual).toEqual({
@@ -15,7 +15,6 @@ import pathExistsInjectable from "../../common/fs/path-exists.injectable";
import readJsonFileInjectable from "../../common/fs/read-json-file.injectable";
import { navigateToRouteInjectionToken } from "../../common/front-end-routing/navigate-to-route-injection-token";
import assert from "assert";
import hostedClusterIdInjectable from "../../renderer/cluster-frame-context/hosted-cluster-id.injectable";
import { advanceFakeTime, useFakeTime } from "../../common/test-utils/use-fake-time";
import type { IObservableValue } from "mobx";
import { runInAction, computed, observable } from "mobx";
@@ -34,7 +33,6 @@ describe("cluster - sidebar and tab navigation for extensions", () => {
applicationBuilder.setEnvironmentToClusterFrame();
applicationBuilder.beforeWindowStart((windowDi) => {
windowDi.override(hostedClusterIdInjectable, () => "some-hosted-cluster-id");
windowDi.override(storageSaveDelayInjectable, () => 250);
windowDi.override(
@@ -178,7 +176,7 @@ describe("cluster - sidebar and tab navigation for extensions", () => {
const writeJsonFileFake = windowDi.inject(writeJsonFileInjectable);
await writeJsonFileFake(
"/some-directory-for-lens-local-storage/some-hosted-cluster-id.json",
"/some-directory-for-lens-local-storage/some-cluster-id.json",
{
sidebar: {
expanded: { "some-extension-name-some-parent-id": true },
@@ -214,7 +212,7 @@ describe("cluster - sidebar and tab navigation for extensions", () => {
const writeJsonFileFake = windowDi.inject(writeJsonFileInjectable);
await writeJsonFileFake(
"/some-directory-for-lens-local-storage/some-hosted-cluster-id.json",
"/some-directory-for-lens-local-storage/some-cluster-id.json",
{
sidebar: {
expanded: { "some-extension-name-some-unknown-parent-id": true },
@@ -244,7 +242,7 @@ describe("cluster - sidebar and tab navigation for extensions", () => {
const writeJsonFileFake = windowDi.inject(writeJsonFileInjectable);
await writeJsonFileFake(
"/some-directory-for-lens-local-storage/some-hosted-cluster-id.json",
"/some-directory-for-lens-local-storage/some-cluster-id.json",
{
someThingButSidebar: {},
},
@@ -390,7 +388,7 @@ describe("cluster - sidebar and tab navigation for extensions", () => {
const pathExistsFake = windowDi.inject(pathExistsInjectable);
const actual = await pathExistsFake(
"/some-directory-for-lens-local-storage/some-hosted-cluster-id.json",
"/some-directory-for-lens-local-storage/some-cluster-id.json",
);
expect(actual).toBe(false);
@@ -402,7 +400,7 @@ describe("cluster - sidebar and tab navigation for extensions", () => {
const readJsonFileFake = windowDi.inject(readJsonFileInjectable);
const actual = await readJsonFileFake(
"/some-directory-for-lens-local-storage/some-hosted-cluster-id.json",
"/some-directory-for-lens-local-storage/some-cluster-id.json",
);
expect(actual).toEqual({
@@ -435,6 +435,7 @@ exports[`disable workloads overview details when cluster is not relevant given e
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -444,7 +445,9 @@ exports[`disable workloads overview details when cluster is not relevant given e
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -942,6 +945,7 @@ exports[`disable workloads overview details when cluster is not relevant given e
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -951,7 +955,9 @@ exports[`disable workloads overview details when cluster is not relevant given e
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>
@@ -1449,6 +1455,7 @@ exports[`disable workloads overview details when cluster is not relevant given n
>
<i
class="Icon material interactive focusable small"
data-testid="dock-tab-close-for-terminal"
tabindex="0"
>
<span
@@ -1458,7 +1465,9 @@ exports[`disable workloads overview details when cluster is not relevant given n
close
</span>
</i>
<div>
<div
data-testid="tooltip-content-for-dock-tab-close-for-terminal"
>
Close ⌘+W
</div>
</div>