diff --git a/src/renderer/components/dock/__test__/log-tab.store.test.ts b/src/renderer/components/dock/__test__/log-tab.store.test.ts index a923df0a09..12e3c5e99b 100644 --- a/src/renderer/components/dock/__test__/log-tab.store.test.ts +++ b/src/renderer/components/dock/__test__/log-tab.store.test.ts @@ -5,18 +5,18 @@ import { podsStore } from "../../+workloads-pods/pods.store"; import { Pod } from "../../../api/endpoints"; import { dockStore } from "../dock.store"; -import { LogTabStore } from "../log-tab.store"; -import { deploymentPod1, deploymentPod2, dockerPod } from "./pod.mock"; +import { logTabStore } from "../log-tab.store"; +import { deploymentPod1, deploymentPod2, deploymentPod3, dockerPod } from "./pod.mock"; -let logTabStore: LogTabStore = null; podsStore.items.push(new Pod(dockerPod)); podsStore.items.push(new Pod(deploymentPod1)); podsStore.items.push(new Pod(deploymentPod2)); describe("log tab store", () => { - beforeEach(async () => { - logTabStore = new LogTabStore(); + afterEach(() => { + logTabStore.reset(); + dockStore.reset(); }); it("creates log tab without sibling pods", () => { @@ -55,4 +55,59 @@ describe("log tab store", () => { previous: false }); }); + + it("removes item from pods list if pod deleted from store", () => { + const selectedPod = new Pod(deploymentPod1); + const selectedContainer = selectedPod.getInitContainers()[0]; + + logTabStore.createPodTab({ + selectedPod, + selectedContainer + }); + + podsStore.items.pop(); + + expect(logTabStore.getData(dockStore.selectedTabId)).toEqual({ + pods: [selectedPod], + selectedPod, + selectedContainer, + showTimestamps: false, + previous: false + }); + }); + + it("adds item into pods list if new sibling pod added to store", () => { + const selectedPod = new Pod(deploymentPod1); + const selectedContainer = selectedPod.getInitContainers()[0]; + + logTabStore.createPodTab({ + selectedPod, + selectedContainer + }); + + podsStore.items.push(new Pod(deploymentPod3)); + + expect(logTabStore.getData(dockStore.selectedTabId)).toEqual({ + pods: [selectedPod, deploymentPod3], + selectedPod, + selectedContainer, + showTimestamps: false, + previous: false + }); + }); + + it("closes tab if no pods left in store", () => { + const selectedPod = new Pod(deploymentPod1); + const selectedContainer = selectedPod.getInitContainers()[0]; + + logTabStore.createPodTab({ + selectedPod, + selectedContainer + }); + + podsStore.items.clear(); + + expect(logTabStore.getData(dockStore.selectedTabId)).toBeUndefined(); + expect(dockStore.getTabById(dockStore.selectedTabId)).toBeUndefined(); + }); }); \ No newline at end of file diff --git a/src/renderer/components/dock/__test__/pod.mock.ts b/src/renderer/components/dock/__test__/pod.mock.ts index d6f0757e06..1675772133 100644 --- a/src/renderer/components/dock/__test__/pod.mock.ts +++ b/src/renderer/components/dock/__test__/pod.mock.ts @@ -152,4 +152,52 @@ export const deploymentPod2 = { podIP: "dummy", startTime: "dummy", } +}; + +export const deploymentPod3 = { + apiVersion: "v1", + kind: "dummy", + metadata: { + uid: "deploymentPod3", + name: "deploymentPod3", + creationTimestamp: "dummy", + resourceVersion: "dummy", + namespace: "default", + ownerReferences: [{ + apiVersion: "v1", + kind: "Deployment", + name: "super-deployment", + uid: "uuid", + controller: true, + blockOwnerDeletion: true, + }] + }, + spec: { + containers: [ + { + name: "node-exporter", + image: "docker.io/prom/node-exporter:v1.0.0-rc.0", + imagePullPolicy: "pull" + }, + { + name: "node-exporter-1", + image: "docker.io/prom/node-exporter:v1.0.0-rc.0", + imagePullPolicy: "pull" + } + ], + serviceAccountName: "dummy", + serviceAccount: "dummy", + }, + status: { + phase: "Running", + conditions: [{ + type: "Running", + status: "Running", + lastProbeTime: 1, + lastTransitionTime: "Some time", + }], + hostIP: "dummy", + podIP: "dummy", + startTime: "dummy", + } }; \ No newline at end of file diff --git a/src/renderer/components/dock/log-resource-selector.tsx b/src/renderer/components/dock/log-resource-selector.tsx index 95e83da493..a9d1366eba 100644 --- a/src/renderer/components/dock/log-resource-selector.tsx +++ b/src/renderer/components/dock/log-resource-selector.tsx @@ -1,6 +1,6 @@ import "./log-resource-selector.scss"; -import React from "react"; +import React, { useEffect } from "react"; import { observer } from "mobx-react"; import { Pod } from "../../api/endpoints"; @@ -33,24 +33,20 @@ export const LogResourceSelector = observer((props: Props) => { reload(); }; + const selectFirstContainer = () => { + save({ selectedContainer: pod.getAllContainers()[0] }); + }; + + const renameTab = () => { + dockStore.renameTab(tabId, `Pod ${pod.getName()}`); + }; + const onPodChange = (option: SelectOption) => { const selectedPod = podsStore.getByName(option.value, pod.getNs()); - if (!selectedPod) { - return; - } - - save({ - selectedPod, - selectedContainer: selectedPod.getAllContainers()[0] - }); - - dockStore.renameTab(tabId, `Pod ${option.value}`); - - reload(); + save({ selectedPod }); }; - const getSelectOptions = (items: string[]) => { return items.map(item => { return { @@ -78,6 +74,12 @@ export const LogResourceSelector = observer((props: Props) => { } ]; + useEffect(() => { + selectFirstContainer(); + renameTab(); + reload(); + }, [selectedPod]); + return (