mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
chore: Extract @k8slens/kube-object package
Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
1 parent
576373b16b
commit
1bf24db797
466 files changed
+6838
-6375
No files matched your search
+6
-13
@@ -3,22 +3,15 @@
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
import type { RenderResult } from "@testing-library/react";
|
||||
import type {
|
||||
ApplicationBuilder,
|
||||
} from "../../../../renderer/components/test-utils/get-application-builder";
|
||||
import {
|
||||
getApplicationBuilder,
|
||||
} from "../../../../renderer/components/test-utils/get-application-builder";
|
||||
import type { ApplicationBuilder } from "../../../../renderer/components/test-utils/get-application-builder";
|
||||
import { getApplicationBuilder } from "../../../../renderer/components/test-utils/get-application-builder";
|
||||
import React from "react";
|
||||
import { KubeObject } from "../../../../common/k8s-api/kube-object";
|
||||
import { KubeObject } from "@k8slens/kube-object";
|
||||
import apiManagerInjectable from "../../../../common/k8s-api/api-manager/manager.injectable";
|
||||
import type { KubeObjectStore } from "../../../../common/k8s-api/kube-object.store";
|
||||
import type { KubeApi } from "../../../../common/k8s-api/kube-api";
|
||||
import showDetailsInjectable
|
||||
from "../../../../renderer/components/kube-detail-params/show-details.injectable";
|
||||
import type {
|
||||
FakeExtensionOptions,
|
||||
} from "../../../../renderer/components/test-utils/get-extension-fake";
|
||||
import showDetailsInjectable from "../../../../renderer/components/kube-detail-params/show-details.injectable";
|
||||
import type { FakeExtensionOptions } from "../../../../renderer/components/test-utils/get-extension-fake";
|
||||
import { observable } from "mobx";
|
||||
|
||||
describe("disable kube object detail items when cluster is not relevant", () => {
|
||||
@@ -37,7 +30,7 @@ describe("disable kube object detail items when cluster is not relevant", () =>
|
||||
} as Partial<KubeApi<KubeObject>> as KubeApi<KubeObject>;
|
||||
const store = {
|
||||
api,
|
||||
loadFromPath: async () => getKubeObjectStub("some-kind", "some-api-version"),
|
||||
loadFromPath: async () => Promise.resolve(getKubeObjectStub("some-kind", "some-api-version")),
|
||||
getByPath() {
|
||||
},
|
||||
} as Partial<KubeObjectStore<KubeObject>> as KubeObjectStore<KubeObject>;
|
||||
|
||||
+2
-2
@@ -8,7 +8,7 @@ import { getApplicationBuilder } from "../../../../renderer/components/test-util
|
||||
import type { IObservableValue } from "mobx";
|
||||
import { runInAction, computed, observable } from "mobx";
|
||||
import React from "react";
|
||||
import { KubeObject } from "../../../../common/k8s-api/kube-object";
|
||||
import { KubeObject } from "@k8slens/kube-object";
|
||||
import apiManagerInjectable from "../../../../common/k8s-api/api-manager/manager.injectable";
|
||||
import type { KubeObjectStore } from "../../../../common/k8s-api/kube-object.store";
|
||||
import type { KubeApi } from "../../../../common/k8s-api/kube-api";
|
||||
@@ -33,7 +33,7 @@ describe("reactively hide kube object detail item", () => {
|
||||
} as Partial<KubeApi<KubeObject>> as KubeApi<KubeObject>;
|
||||
const store = {
|
||||
api,
|
||||
loadFromPath: async () => getKubeObjectStub("some-kind", "some-api-version"),
|
||||
loadFromPath: async () => Promise.resolve(getKubeObjectStub("some-kind", "some-api-version")),
|
||||
getByPath() {
|
||||
},
|
||||
} as Partial<KubeObjectStore<KubeObject>> as KubeObjectStore<KubeObject>;
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@ import { computed, runInAction } from "mobx";
|
||||
import React from "react";
|
||||
import { navigateToRouteInjectionToken } from "../../../../common/front-end-routing/navigate-to-route-injection-token";
|
||||
import { routeSpecificComponentInjectionToken } from "../../../../renderer/routes/route-specific-component-injection-token";
|
||||
import { KubeObject } from "../../../../common/k8s-api/kube-object";
|
||||
import { KubeObject } from "@k8slens/kube-object";
|
||||
import { KubeObjectMenu } from "../../../../renderer/components/kube-object-menu";
|
||||
|
||||
describe("disable kube object menu items when cluster is not relevant", () => {
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ import { observable, runInAction, computed } from "mobx";
|
||||
import React from "react";
|
||||
import { navigateToRouteInjectionToken } from "../../../../common/front-end-routing/navigate-to-route-injection-token";
|
||||
import { routeSpecificComponentInjectionToken } from "../../../../renderer/routes/route-specific-component-injection-token";
|
||||
import { KubeObject } from "../../../../common/k8s-api/kube-object";
|
||||
import { KubeObject } from "@k8slens/kube-object";
|
||||
import { KubeObjectMenu } from "../../../../renderer/components/kube-object-menu";
|
||||
|
||||
describe("reactively hide kube object menu item", () => {
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@ import React from "react";
|
||||
import { navigateToRouteInjectionToken } from "../../../../common/front-end-routing/navigate-to-route-injection-token";
|
||||
import { routeSpecificComponentInjectionToken } from "../../../../renderer/routes/route-specific-component-injection-token";
|
||||
import { KubeObjectStatusIcon } from "../../../../renderer/components/kube-object-status-icon/kube-object-status-icon";
|
||||
import { KubeObject } from "../../../../common/k8s-api/kube-object";
|
||||
import { KubeObject } from "@k8slens/kube-object";
|
||||
import { KubeObjectStatusLevel } from "../../../../common/k8s-api/kube-object-status";
|
||||
|
||||
describe("disable kube object statuses when cluster is not relevant", () => {
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ import { observable, runInAction, computed } from "mobx";
|
||||
import React from "react";
|
||||
import { navigateToRouteInjectionToken } from "../../../../common/front-end-routing/navigate-to-route-injection-token";
|
||||
import { routeSpecificComponentInjectionToken } from "../../../../renderer/routes/route-specific-component-injection-token";
|
||||
import { KubeObject } from "../../../../common/k8s-api/kube-object";
|
||||
import { KubeObject } from "@k8slens/kube-object";
|
||||
import { KubeObjectStatusLevel } from "../../../../common/k8s-api/kube-object-status";
|
||||
import { KubeObjectStatusIcon } from "../../../../renderer/components/kube-object-status-icon";
|
||||
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
import { KubeObjectStatusLevel } from "../../../common/k8s-api/kube-object-status";
|
||||
import { KubeObject } from "../../../common/k8s-api/kube-object";
|
||||
import { KubeObject } from "@k8slens/kube-object";
|
||||
import React from "react";
|
||||
import type { DiContainer } from "@ogre-tools/injectable";
|
||||
import { getInjectable } from "@ogre-tools/injectable";
|
||||
|
||||
@@ -13,7 +13,7 @@ import getRandomIdForEditResourceTabInjectable from "../../../renderer/component
|
||||
import type { AsyncFnMock } from "@async-fn/jest";
|
||||
import asyncFn from "@async-fn/jest";
|
||||
import dockStoreInjectable from "../../../renderer/components/dock/dock/store.injectable";
|
||||
import { Namespace } from "../../../common/k8s-api/endpoints";
|
||||
import { Namespace } from "@k8slens/kube-object";
|
||||
import showSuccessNotificationInjectable from "../../../renderer/components/notifications/show-success-notification.injectable";
|
||||
import showErrorNotificationInjectable from "../../../renderer/components/notifications/show-error-notification.injectable";
|
||||
import readJsonFileInjectable from "../../../common/fs/read-json-file.injectable";
|
||||
@@ -23,8 +23,7 @@ import type { ApiKubePatch } from "../../../renderer/k8s/api-kube-patch.injectab
|
||||
import type { ApiKubeGet } from "../../../renderer/k8s/api-kube-get.injectable";
|
||||
import apiKubePatchInjectable from "../../../renderer/k8s/api-kube-patch.injectable";
|
||||
import apiKubeGetInjectable from "../../../renderer/k8s/api-kube-get.injectable";
|
||||
import type { KubeJsonApiData } from "../../../common/k8s-api/kube-json-api";
|
||||
import type { BaseKubeJsonApiObjectMetadata, KubeObjectScope } from "../../../common/k8s-api/kube-object";
|
||||
import type { BaseKubeJsonApiObjectMetadata, KubeObjectScope, KubeJsonApiData } from "@k8slens/kube-object";
|
||||
import { JsonApiErrorParsed } from "../../../common/k8s-api/json-api";
|
||||
import type { ShowNotification } from "../../../renderer/components/notifications";
|
||||
import React from "react";
|
||||
@@ -542,9 +541,9 @@ metadata:
|
||||
readJsonFileInjectable,
|
||||
);
|
||||
|
||||
const actual = (await readJsonFile(
|
||||
const actual = await readJsonFile(
|
||||
"/some-directory-for-lens-local-storage/some-cluster-id.json",
|
||||
)) as any;
|
||||
) as Record<string, Record<string, unknown>>;
|
||||
|
||||
expect(
|
||||
actual.edit_resource_store["some-first-tab-id"],
|
||||
|
||||
+1
-1
@@ -13,7 +13,7 @@ import requestKubeResourceInjectable from "../../../renderer/components/dock/edi
|
||||
import directoryForLensLocalStorageInjectable from "../../../common/directory-for-lens-local-storage/directory-for-lens-local-storage.injectable";
|
||||
import writeJsonFileInjectable from "../../../common/fs/write-json-file.injectable";
|
||||
import { TabKind } from "../../../renderer/components/dock/dock/store";
|
||||
import { Namespace } from "../../../common/k8s-api/endpoints";
|
||||
import { Namespace } from "@k8slens/kube-object";
|
||||
|
||||
describe("cluster/namespaces - edit namespaces from previously opened tab", () => {
|
||||
let builder: ApplicationBuilder;
|
||||
|
||||
@@ -7,9 +7,11 @@ import type { RenderResult } from "@testing-library/react";
|
||||
import navigateToPodsInjectable from "../../../common/front-end-routing/routes/cluster/workloads/pods/navigate-to-pods.injectable";
|
||||
import { type ApplicationBuilder, getApplicationBuilder } from "../../../renderer/components/test-utils/get-application-builder";
|
||||
import podStoreInjectable from "../../../renderer/components/workloads-pods/store.injectable";
|
||||
import type { PodMetrics } from "../../../common/k8s-api/endpoints";
|
||||
import { Pod } from "../../../common/k8s-api/endpoints";
|
||||
import type { PodMetrics, PodStatus } from "@k8slens/kube-object";
|
||||
import { Pod } from "@k8slens/kube-object";
|
||||
import type { PodMetricsApi } from "../../../common/k8s-api/endpoints/pod-metrics.api";
|
||||
import podMetricsApiInjectable from "../../../common/k8s-api/endpoints/pod-metrics.api.injectable";
|
||||
import type { RequestMetrics } from "../../../common/k8s-api/endpoints/metrics.api/request-metrics.injectable";
|
||||
import requestMetricsInjectable from "../../../common/k8s-api/endpoints/metrics.api/request-metrics.injectable";
|
||||
import apiManagerInjectable from "../../../common/k8s-api/api-manager/manager.injectable";
|
||||
|
||||
@@ -18,7 +20,7 @@ describe("workloads / pods", () => {
|
||||
let applicationBuilder: ApplicationBuilder;
|
||||
const podMetrics: PodMetrics[] = [];
|
||||
|
||||
beforeEach(async () => {
|
||||
beforeEach(() => {
|
||||
applicationBuilder = getApplicationBuilder().setEnvironmentToClusterFrame();
|
||||
applicationBuilder.namespaces.add("default");
|
||||
applicationBuilder.beforeWindowStart(({ windowDi }) => {
|
||||
@@ -28,8 +30,8 @@ describe("workloads / pods", () => {
|
||||
});
|
||||
|
||||
windowDi.override(podMetricsApiInjectable, () => ({
|
||||
list: async () => podMetrics,
|
||||
} as any));
|
||||
list: async () => Promise.resolve(podMetrics),
|
||||
} as PodMetricsApi));
|
||||
|
||||
const apiManager = windowDi.inject(apiManagerInjectable);
|
||||
const podStore = windowDi.inject(podStoreInjectable);
|
||||
@@ -79,7 +81,7 @@ describe("workloads / pods", () => {
|
||||
expect(rendered.baseElement).toMatchSnapshot();
|
||||
});
|
||||
|
||||
it("shows item list is empty", async () => {
|
||||
it("shows item list is empty", () => {
|
||||
expect(rendered.getByText("Item list is empty")).toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
@@ -87,7 +89,7 @@ describe("workloads / pods", () => {
|
||||
describe("given a namespace has pods", () => {
|
||||
beforeEach(async () => {
|
||||
applicationBuilder.afterWindowStart(({ windowDi }) => {
|
||||
windowDi.override(requestMetricsInjectable, () => () => ({} as any));
|
||||
windowDi.override(requestMetricsInjectable, () => (() => Promise.resolve({})) as unknown as RequestMetrics);
|
||||
|
||||
const podStore = windowDi.inject(podStoreInjectable);
|
||||
|
||||
@@ -111,7 +113,7 @@ describe("workloads / pods", () => {
|
||||
},
|
||||
],
|
||||
},
|
||||
status: {} as any,
|
||||
status: {} as PodStatus,
|
||||
}));
|
||||
podStore.isLoaded = true;
|
||||
});
|
||||
|
||||
@@ -27,7 +27,7 @@ import stopLoadingLogsInjectable from "../../renderer/components/dock/logs/stop-
|
||||
import { dockerPod } from "../../renderer/components/dock/logs/__test__/pod.mock";
|
||||
import showErrorNotificationInjectable from "../../renderer/components/notifications/show-error-notification.injectable";
|
||||
import type { DiContainer } from "@ogre-tools/injectable";
|
||||
import type { Container } from "../../common/k8s-api/endpoints";
|
||||
import type { Container } from "@k8slens/kube-object";
|
||||
|
||||
describe("download logs options in logs dock tab", () => {
|
||||
let windowDi: DiContainer;
|
||||
@@ -36,7 +36,7 @@ describe("download logs options in logs dock tab", () => {
|
||||
let openSaveFileDialogMock: jest.MockedFunction<() => void>;
|
||||
let callForLogsMock: jest.MockedFunction<CallForLogs>;
|
||||
let getLogsMock: jest.Mock;
|
||||
let getSplittedLogsMock: jest.Mock;
|
||||
let getSplitLogsMock: jest.Mock;
|
||||
let showErrorNotificationMock: jest.Mock;
|
||||
const logs = new Map([["timestamp", "some-logs"]]);
|
||||
const pod = dockerPod;
|
||||
@@ -55,7 +55,7 @@ describe("download logs options in logs dock tab", () => {
|
||||
|
||||
callForLogsMock = jest.fn();
|
||||
getLogsMock = jest.fn();
|
||||
getSplittedLogsMock = jest.fn();
|
||||
getSplitLogsMock = jest.fn();
|
||||
|
||||
builder.beforeWindowStart(({ windowDi }) => {
|
||||
windowDi.override(callForLogsInjectable, () => callForLogsMock);
|
||||
@@ -63,7 +63,7 @@ describe("download logs options in logs dock tab", () => {
|
||||
// Overriding internals of logsViewModelInjectable
|
||||
windowDi.override(getLogsInjectable, () => getLogsMock);
|
||||
windowDi.override(getLogsWithoutTimestampsInjectable, () => getLogsMock);
|
||||
windowDi.override(getTimestampSplitLogsInjectable, () => getSplittedLogsMock);
|
||||
windowDi.override(getTimestampSplitLogsInjectable, () => getSplitLogsMock);
|
||||
windowDi.override(reloadLogsInjectable, () => jest.fn());
|
||||
windowDi.override(getLogTabDataInjectable, () => () => ({
|
||||
selectedPodId: selectedPod.getId(),
|
||||
@@ -106,11 +106,11 @@ describe("download logs options in logs dock tab", () => {
|
||||
});
|
||||
|
||||
describe("when logs not available", () => {
|
||||
beforeEach(async () => {
|
||||
beforeEach(() => {
|
||||
const createLogsTab = windowDi.inject(createPodLogsTabInjectable);
|
||||
|
||||
getLogsMock.mockReturnValue([]);
|
||||
getSplittedLogsMock.mockReturnValue([]);
|
||||
getSplitLogsMock.mockReturnValue([]);
|
||||
|
||||
createLogsTab({
|
||||
selectedPod: pod,
|
||||
@@ -130,11 +130,11 @@ describe("download logs options in logs dock tab", () => {
|
||||
});
|
||||
|
||||
describe("when logs available", () => {
|
||||
beforeEach(async () => {
|
||||
beforeEach(() => {
|
||||
const createLogsTab = windowDi.inject(createPodLogsTabInjectable);
|
||||
|
||||
getLogsMock.mockReturnValue(["some-logs"]);
|
||||
getSplittedLogsMock.mockReturnValue([...logs]);
|
||||
getSplitLogsMock.mockReturnValue([...logs]);
|
||||
|
||||
createLogsTab({
|
||||
selectedPod: pod,
|
||||
@@ -174,13 +174,13 @@ describe("download logs options in logs dock tab", () => {
|
||||
});
|
||||
|
||||
describe("when call for all logs resolves with logs", () => {
|
||||
beforeEach(async () => {
|
||||
beforeEach(() => {
|
||||
callForLogsMock.mockResolvedValue("all-logs");
|
||||
});
|
||||
|
||||
describe("when selected 'download all logs'", () => {
|
||||
beforeEach(async () => {
|
||||
await act(async () => {
|
||||
beforeEach(() => {
|
||||
act(() => {
|
||||
const button = rendered.getByTestId("download-all-logs");
|
||||
|
||||
button.click();
|
||||
@@ -194,11 +194,11 @@ describe("download logs options in logs dock tab", () => {
|
||||
);
|
||||
});
|
||||
|
||||
it("shows save dialog with proper attributes", async () => {
|
||||
it("shows save dialog with proper attributes", () => {
|
||||
expect(openSaveFileDialogMock).toHaveBeenCalledWith("docker-exporter.log", "all-logs", "text/plain");
|
||||
});
|
||||
|
||||
it("doesn't block download dropdown for interaction after click", async () => {
|
||||
it("doesn't block download dropdown for interaction after click", () => {
|
||||
expect(rendered.getByTestId("download-logs-dropdown")).not.toHaveAttribute("disabled");
|
||||
});
|
||||
});
|
||||
@@ -225,13 +225,13 @@ describe("download logs options in logs dock tab", () => {
|
||||
});
|
||||
|
||||
describe("when call for logs resolves with no logs", () => {
|
||||
beforeEach(async () => {
|
||||
beforeEach(() => {
|
||||
callForLogsMock.mockResolvedValue("");
|
||||
});
|
||||
|
||||
describe("when selected 'download all logs'", () => {
|
||||
beforeEach(async () => {
|
||||
await act(async () => {
|
||||
beforeEach(() => {
|
||||
act(() => {
|
||||
const button = rendered.getByTestId("download-all-logs");
|
||||
|
||||
button.click();
|
||||
@@ -254,8 +254,8 @@ describe("download logs options in logs dock tab", () => {
|
||||
});
|
||||
|
||||
describe("when selected 'download all logs'", () => {
|
||||
beforeEach(async () => {
|
||||
await act(async () => {
|
||||
beforeEach(() => {
|
||||
act(() => {
|
||||
const button = rendered.getByTestId("download-all-logs");
|
||||
|
||||
button.click();
|
||||
@@ -269,7 +269,7 @@ describe("download logs options in logs dock tab", () => {
|
||||
);
|
||||
});
|
||||
|
||||
it("doesn't show save dialog", async () => {
|
||||
it("doesn't show save dialog", () => {
|
||||
expect(openSaveFileDialogMock).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
Reference in new issue
Block a user