From 6b09ee49379b1918b9a330f608b05f00318c6f65 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Thu, 16 Jun 2022 14:43:35 -0400 Subject: [PATCH] start cleaningup ipc work Signed-off-by: Sebastian Malton --- .../connection-status.test.ts.snap | 69 ++++++++++++ .../cluster/connection-status.test.ts | 103 ++++++++++++++++++ .../cluster/connection-status.test.tsx | 43 ++++++-- .../cluster-manager/cluster-status.tsx | 5 +- 4 files changed, 207 insertions(+), 13 deletions(-) create mode 100644 src/features/cluster/__snapshots__/connection-status.test.ts.snap create mode 100644 src/features/cluster/connection-status.test.ts 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()}