1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00
lens/src/renderer/components/kube-object-list-layout/kube-object-list-layout.test.tsx
Panu Horsmalahti 6927f6c2bd Allow specifying ResourceName in KubeObjectListLayout
Signed-off-by: Panu Horsmalahti <phorsmalahti@mirantis.com>
2023-01-12 14:23:32 +02:00

109 lines
4.0 KiB
TypeScript

/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import type { DiContainer } from "@ogre-tools/injectable";
import "@testing-library/jest-dom/extend-expect";
import type { RenderResult } from "@testing-library/react";
import React from "react";
import subscribeStoresInjectable from "../../kube-watch-api/subscribe-stores.injectable";
import { getDiForUnitTesting } from "../../getDiForUnitTesting";
import kubeSelectedUrlParamInjectable from "../kube-detail-params/kube-selected-url.injectable";
import toggleKubeDetailsPaneInjectable from "../kube-detail-params/toggle-details.injectable";
import type { DiRender } from "../test-utils/renderFor";
import { renderFor } from "../test-utils/renderFor";
import { KubeObjectListLayout } from "./index";
import appPathsStateInjectable from "../../../common/app-paths/app-paths-state.injectable";
import podStoreInjectable from "../+workloads-pods/store.injectable";
import storesAndApisCanBeCreatedInjectable from "../../stores-apis-can-be-created.injectable";
import directoryForUserDataInjectable from "../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
import directoryForKubeConfigsInjectable from "../../../common/app-paths/directory-for-kube-configs/directory-for-kube-configs.injectable";
import hostedClusterInjectable from "../../cluster-frame-context/hosted-cluster.injectable";
import createClusterInjectable from "../../../main/create-cluster/create-cluster.injectable";
import type { PodStore } from "../+workloads-pods/store";
describe("kube-object-list-layout", () => {
let di: DiContainer;
let render: DiRender;
let podStore: PodStore;
beforeEach(() => {
di = getDiForUnitTesting({ doGeneralOverrides: true });
di.override(directoryForUserDataInjectable, () => "/some-user-store-path");
di.override(directoryForKubeConfigsInjectable, () => "/some-kube-configs");
di.override(storesAndApisCanBeCreatedInjectable, () => true);
const createCluster = di.inject(createClusterInjectable);
di.override(hostedClusterInjectable, () => createCluster({
contextName: "some-context-name",
id: "some-cluster-id",
kubeConfigPath: "/some-path-to-a-kubeconfig",
}, {
clusterServerUrl: "https://localhost:8080",
}));
render = renderFor(di);
di.override(subscribeStoresInjectable, () => jest.fn().mockImplementation(() => jest.fn()));
di.override(kubeSelectedUrlParamInjectable, () => ({
get: () => "path",
}));
di.override(toggleKubeDetailsPaneInjectable, () => null);
di.override(appPathsStateInjectable, () => ({
get: () => ({}),
}));
podStore = di.inject(podStoreInjectable);
});
describe("given pod store", () => {
let result: RenderResult;
it("renders", () => {
result = render((
<div>
<KubeObjectListLayout
className="Pods"
store={podStore}
tableId = "workloads_pods"
isConfigurable
renderHeaderTitle="Pods"
renderTableContents={pod => [
<div key={pod.getName()}>{pod.getName()}</div>,
]}
/>
</div>
));
expect(result.baseElement).toMatchSnapshot();
});
describe("given resourcename", () => {
it("uses resourcename in search placeholder", () => {
result = render((
<div>
<KubeObjectListLayout
className="Pods"
store={podStore}
tableId = "workloads_pods"
isConfigurable
renderHeaderTitle="Pods"
renderTableContents={pod => [
<div key={pod.getName()}>{pod.getName()}</div>,
]}
resourceName="My Custom Items"
searchFilters={[() => null]}
/>
</div>
));
expect(result.getByPlaceholderText("Search My Custom Items...")).toBeInTheDocument();
});
});
});
});