diff --git a/src/features/cluster/__snapshots__/connection-status.test.ts.snap b/src/features/cluster/__snapshots__/connection-status.test.ts.snap
new file mode 100644
index 0000000000..e51080682b
--- /dev/null
+++ b/src/features/cluster/__snapshots__/connection-status.test.ts.snap
@@ -0,0 +1,69 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`cluster connection status renders 1`] = `
+
+
+
+`;
+
+exports[`cluster connection status when navigating to cluster connection renders 1`] = `
+
+
+
+
+
+
+
+ minikube
+
+
+
+
+ Connecting
+ …
+
+
+
+
+
+
+
+
+
+`;
diff --git a/src/features/cluster/connection-status.test.ts b/src/features/cluster/connection-status.test.ts
new file mode 100644
index 0000000000..50ecf67891
--- /dev/null
+++ b/src/features/cluster/connection-status.test.ts
@@ -0,0 +1,103 @@
+/**
+ * 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 type { ClusterStore } from "../../common/cluster-store/cluster-store";
+import clusterStoreInjectable from "../../common/cluster-store/cluster-store.injectable";
+import type { ClusterId } from "../../common/cluster-types";
+import type { Cluster } from "../../common/cluster/cluster";
+import navigateToClusterViewInjectable from "../../common/front-end-routing/routes/cluster-view/navigate-to-cluster-view.injectable";
+import type { ReadFileSync } from "../../common/fs/read-file-sync.injectable";
+import readFileSyncInjectable from "../../common/fs/read-file-sync.injectable";
+import type { ApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder";
+import { getApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder";
+import createClusterInjectable from "../../renderer/create-cluster/create-cluster.injectable";
+
+describe("cluster connection status", () => {
+ let clusterStore: ClusterStore;
+ let clusters: Map;
+ let cluster: Cluster;
+ let applicationBuilder: ApplicationBuilder;
+ let result: RenderResult;
+
+ beforeEach(async () => {
+ applicationBuilder = getApplicationBuilder();
+
+ const readFileSyncMock: ReadFileSync = (filePath) => {
+ expect(filePath).toBe("/some/file/path");
+
+ return JSON.stringify({
+ apiVersion: "v1",
+ clusters: [{
+ name: "minikube",
+ cluster: {
+ server: "https://192.168.64.3:8443",
+ },
+ }],
+ contexts: [{
+ context: {
+ cluster: "minikube",
+ user: "minikube",
+ },
+ name: "minikube",
+ }],
+ users: [{
+ name: "minikube",
+ }],
+ kind: "Config",
+ preferences: {},
+ });
+ };
+
+ applicationBuilder.dis.rendererDi.override(readFileSyncInjectable, () => readFileSyncMock);
+
+ clusterStore = ({
+ clusters,
+ get clustersList() {
+ return [...clusters.values()];
+ },
+ getById: (id) => clusters.get(id),
+ }) as ClusterStore;
+
+ applicationBuilder.dis.mainDi.override(clusterStoreInjectable, () => clusterStore);
+ applicationBuilder.dis.rendererDi.override(clusterStoreInjectable, () => clusterStore);
+
+ result = await applicationBuilder.render();
+
+ const createCluster = applicationBuilder.dis.rendererDi.inject(createClusterInjectable);
+
+ cluster = createCluster({
+ contextName: "minikube",
+ id: "some-cluster-id",
+ kubeConfigPath: "/some/file/path",
+ }, {
+ clusterServerUrl: "https://localhost:1234",
+ });
+
+ clusters = new Map();
+
+ clusters.set(cluster.id, cluster);
+ });
+
+ it("renders", () => {
+ expect(result.baseElement).toMatchSnapshot();
+ });
+
+ describe("when navigating to cluster connection", () => {
+ beforeEach(() => {
+ const navigateToClusterView = applicationBuilder.dis.rendererDi.inject(navigateToClusterViewInjectable);
+
+ navigateToClusterView(cluster.id);
+ });
+
+ it("renders", () => {
+ expect(result.baseElement).toMatchSnapshot();
+ });
+
+ it("shows cluster status screen", () => {
+ expect(result.queryByTestId("cluster-status")).not.toBeNull();
+ });
+ });
+});
diff --git a/src/features/cluster/connection-status.test.tsx b/src/features/cluster/connection-status.test.tsx
index 521408e113..50ecf67891 100644
--- a/src/features/cluster/connection-status.test.tsx
+++ b/src/features/cluster/connection-status.test.tsx
@@ -3,6 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
+import type { RenderResult } from "@testing-library/react";
import type { ClusterStore } from "../../common/cluster-store/cluster-store";
import clusterStoreInjectable from "../../common/cluster-store/cluster-store.injectable";
import type { ClusterId } from "../../common/cluster-types";
@@ -19,6 +20,7 @@ describe("cluster connection status", () => {
let clusters: Map;
let cluster: Cluster;
let applicationBuilder: ApplicationBuilder;
+ let result: RenderResult;
beforeEach(async () => {
applicationBuilder = getApplicationBuilder();
@@ -51,7 +53,19 @@ describe("cluster connection status", () => {
applicationBuilder.dis.rendererDi.override(readFileSyncInjectable, () => readFileSyncMock);
- const navigateToClusterView = applicationBuilder.dis.rendererDi.inject(navigateToClusterViewInjectable);
+ clusterStore = ({
+ clusters,
+ get clustersList() {
+ return [...clusters.values()];
+ },
+ getById: (id) => clusters.get(id),
+ }) as ClusterStore;
+
+ applicationBuilder.dis.mainDi.override(clusterStoreInjectable, () => clusterStore);
+ applicationBuilder.dis.rendererDi.override(clusterStoreInjectable, () => clusterStore);
+
+ result = await applicationBuilder.render();
+
const createCluster = applicationBuilder.dis.rendererDi.inject(createClusterInjectable);
cluster = createCluster({
@@ -65,20 +79,25 @@ describe("cluster connection status", () => {
clusters = new Map();
clusters.set(cluster.id, cluster);
+ });
- clusterStore = ({
- clusters,
- get clustersList() {
- return [...clusters.values()];
- },
- getById: (id) => clusters.get(id),
- }) as ClusterStore;
+ it("renders", () => {
+ expect(result.baseElement).toMatchSnapshot();
+ });
- applicationBuilder.dis.mainDi.override(clusterStoreInjectable, () => clusterStore);
- applicationBuilder.dis.rendererDi.override(clusterStoreInjectable, () => clusterStore);
+ describe("when navigating to cluster connection", () => {
+ beforeEach(() => {
+ const navigateToClusterView = applicationBuilder.dis.rendererDi.inject(navigateToClusterViewInjectable);
- await applicationBuilder.render();
+ navigateToClusterView(cluster.id);
+ });
- navigateToClusterView(cluster.id);
+ it("renders", () => {
+ expect(result.baseElement).toMatchSnapshot();
+ });
+
+ it("shows cluster status screen", () => {
+ expect(result.queryByTestId("cluster-status")).not.toBeNull();
+ });
});
});
diff --git a/src/renderer/components/cluster-manager/cluster-status.tsx b/src/renderer/components/cluster-manager/cluster-status.tsx
index 811a30478b..f7890a973d 100644
--- a/src/renderer/components/cluster-manager/cluster-status.tsx
+++ b/src/renderer/components/cluster-manager/cluster-status.tsx
@@ -130,7 +130,10 @@ const NonInjectedClusterStatus = observer((props: ClusterStatusProps & Dependenc
};
return (
-
+
{clusterName}
{renderStatusIcon()}