diff --git a/src/common/cluster-store/cluster-store.global-override-for-injectable.ts b/src/common/cluster-store/cluster-store.global-override-for-injectable.ts index 32a1ee62a1..5812cbd430 100644 --- a/src/common/cluster-store/cluster-store.global-override-for-injectable.ts +++ b/src/common/cluster-store/cluster-store.global-override-for-injectable.ts @@ -5,13 +5,33 @@ import { getGlobalOverride } from "../test-utils/get-global-override"; import clusterStoreInjectable from "./cluster-store.injectable"; import type { Cluster } from "../cluster/cluster"; +import { observable } from "mobx"; +import type { ClusterId } from "../cluster-types"; import type { ClusterStore } from "./cluster-store"; export default getGlobalOverride( clusterStoreInjectable, - () => - ({ + () => { + const clusters = observable.map(); + + return { + displayName: "ClusterStore", provideInitialFromMain: () => {}, - getById: (id) => (void id, {}) as Cluster, - } as ClusterStore), + loadInitialOnRenderer: async () => {}, + pushStateToViewsAutomatically: () => {}, + registerIpcListener: () => {}, + unregisterIpcListener: () => {}, + pushState: () => {}, + getById: (id) => clusters.get(id), + get clustersList() { + return Array.from(clusters.values()); + }, + get connectedClustersList() { + return Array.from(clusters.values()).filter(c => !c.disconnected); + }, + hasClusters: () => clusters.size > 0, + addCluster: () => { throw new Error("addCluster is not yet supported"); }, + clusters, + } as Partial as ClusterStore; + }, ); diff --git a/src/features/cluster/connection-status.test.ts b/src/features/cluster/connection-status.test.ts index fc33f73a09..3cbc4ccd73 100644 --- a/src/features/cluster/connection-status.test.ts +++ b/src/features/cluster/connection-status.test.ts @@ -32,17 +32,18 @@ describe("cluster connection status", () => { beforeEach(async () => { applicationBuilder = getApplicationBuilder(); - applicationBuilder.dis.mainDi.override(createKubeconfigManagerInjectable, () => () => ({} as KubeconfigManager)); - applicationBuilder.dis.mainDi.override(createKubectlInjectable, () => () => ({} as Kubectl)); - applicationBuilder.dis.mainDi.override(createContextHandlerInjectable, () => () => ({} as ContextHandler)); + applicationBuilder.mainDi.override(createKubeconfigManagerInjectable, () => () => ({} as KubeconfigManager)); + applicationBuilder.mainDi.override(createKubectlInjectable, () => () => ({} as Kubectl)); + applicationBuilder.mainDi.override(createContextHandlerInjectable, () => () => ({} as ContextHandler)); - applicationBuilder.beforeRender(() => { - clusterStore = applicationBuilder.dis.mainDi.inject(clusterStoreInjectable); - navigateToClusterView = applicationBuilder.dis.rendererDi.inject(navigateToClusterViewInjectable); + applicationBuilder.beforeWindowStart((windowDi) => { + clusterStore = applicationBuilder.mainDi.inject(clusterStoreInjectable); + navigateToClusterView = windowDi.inject(navigateToClusterViewInjectable); + windowDi.override(clusterStoreInjectable, () => clusterStore); - const createCluster = applicationBuilder.dis.mainDi.inject(createClusterInjectable); + const createCluster = applicationBuilder.mainDi.inject(createClusterInjectable); - applicationBuilder.dis.rendererDi.inject(catalogEntityRegistryInjectable).updateItems([ + windowDi.inject(catalogEntityRegistryInjectable).updateItems([ new KubernetesCluster({ metadata: { labels: {}, diff --git a/src/features/cluster/connection-status.test.tsx b/src/features/cluster/connection-status.test.tsx deleted file mode 100644 index 50ecf67891..0000000000 --- a/src/features/cluster/connection-status.test.tsx +++ /dev/null @@ -1,103 +0,0 @@ -/** - * 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/renderer/components/test-utils/get-application-builder.tsx b/src/renderer/components/test-utils/get-application-builder.tsx index 891a4b8d9c..2cf3f6aed0 100644 --- a/src/renderer/components/test-utils/get-application-builder.tsx +++ b/src/renderer/components/test-utils/get-application-builder.tsx @@ -150,6 +150,8 @@ export const getApplicationBuilder = () => { let environment = environments.application; + mainDi.register(mainExtensionsStateInjectable); + mainDi.override(mainExtensionsInjectable, (di) => { const mainExtensionsState = di.inject(mainExtensionsStateInjectable);