mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Initial tests for <NamespaceTreeView />
Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com>
This commit is contained in:
parent
a73f166f1f
commit
90d7e97fbb
@ -0,0 +1,61 @@
|
|||||||
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||||
|
|
||||||
|
exports[`<NamespaceTreeView /> once the subscribe resolves renders null with regular namespace 1`] = `
|
||||||
|
<body>
|
||||||
|
<div />
|
||||||
|
</body>
|
||||||
|
`;
|
||||||
|
|
||||||
|
exports[`<NamespaceTreeView /> once the subscribe resolves renders one namespace without children 1`] = `
|
||||||
|
<body>
|
||||||
|
<div>
|
||||||
|
<div
|
||||||
|
data-testid="namespace-tree-view"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="DrawerTitle title"
|
||||||
|
>
|
||||||
|
Tree View
|
||||||
|
</div>
|
||||||
|
<ul
|
||||||
|
aria-multiselectable="false"
|
||||||
|
class="MuiTreeView-root"
|
||||||
|
role="tree"
|
||||||
|
>
|
||||||
|
<li
|
||||||
|
aria-expanded="false"
|
||||||
|
class="MuiTreeItem-root"
|
||||||
|
data-testid="namespace-acme-group-1"
|
||||||
|
role="treeitem"
|
||||||
|
tabindex="0"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="MuiTreeItem-content"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="MuiTreeItem-iconContainer Component-iconContainer-1"
|
||||||
|
>
|
||||||
|
<svg
|
||||||
|
aria-hidden="true"
|
||||||
|
class="MuiSvgIcon-root MuiSvgIcon-fontSizeInherit"
|
||||||
|
focusable="false"
|
||||||
|
style="width: 14px; height: 14px;"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M22.047 22.074v0 0-20.147 0h-20.12v0 20.147 0h20.12zM22.047 24h-20.12q-.803 0-1.365-.562t-.562-1.365v-20.147q0-.776.562-1.351t1.365-.575h20.147q.776 0 1.351.575t.575 1.351v20.147q0 .803-.575 1.365t-1.378.562v0zM17.873 12.977h-4.923v4.896q0 .401-.281.682t-.682.281v0q-.375 0-.669-.281t-.294-.682v-4.896h-4.923q-.401 0-.682-.294t-.281-.669v0q0-.401.281-.682t.682-.281h4.923v-4.896q0-.401.294-.682t.669-.281v0q.401 0 .682.281t.281.682v4.896h4.923q.401 0 .682.281t.281.682v0q0 .375-.281.669t-.682.294z"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="MuiTypography-root MuiTreeItem-label MuiTypography-body1"
|
||||||
|
>
|
||||||
|
acme-group
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
`;
|
||||||
@ -0,0 +1,127 @@
|
|||||||
|
import type { AsyncFnMock } from "@async-fn/jest";
|
||||||
|
import asyncFn from "@async-fn/jest";
|
||||||
|
import type { DiContainer } from "@ogre-tools/injectable";
|
||||||
|
import React from "react";
|
||||||
|
import directoryForKubeConfigsInjectable from "../../../common/app-paths/directory-for-kube-configs/directory-for-kube-configs.injectable";
|
||||||
|
import directoryForUserDataInjectable from "../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
|
||||||
|
import type { Fetch } from "../../../common/fetch/fetch.injectable";
|
||||||
|
import fetchInjectable from "../../../common/fetch/fetch.injectable";
|
||||||
|
import { Namespace } from "../../../common/k8s-api/endpoints";
|
||||||
|
import { createMockResponseFromString } from "../../../test-utils/mock-responses";
|
||||||
|
import hostedClusterInjectable from "../../cluster-frame-context/hosted-cluster.injectable";
|
||||||
|
import createClusterInjectable from "../../cluster/create-cluster.injectable";
|
||||||
|
import { getDiForUnitTesting } from "../../getDiForUnitTesting";
|
||||||
|
import subscribeStoresInjectable from "../../kube-watch-api/subscribe-stores.injectable";
|
||||||
|
import storesAndApisCanBeCreatedInjectable from "../../stores-apis-can-be-created.injectable";
|
||||||
|
import { type Disposer, disposer } from "../../utils";
|
||||||
|
import type { DiRender } from "../test-utils/renderFor";
|
||||||
|
import { renderFor } from "../test-utils/renderFor";
|
||||||
|
import { NamespaceTreeView } from "./namespace-tree-view";
|
||||||
|
import type { NamespaceStore } from "./store";
|
||||||
|
import namespaceStoreInjectable from "./store.injectable";
|
||||||
|
|
||||||
|
function createNamespace(name: string): Namespace {
|
||||||
|
return new Namespace({
|
||||||
|
apiVersion: "v1",
|
||||||
|
kind: "Namespace",
|
||||||
|
metadata: {
|
||||||
|
name,
|
||||||
|
resourceVersion: "1",
|
||||||
|
selfLink: `/api/v1/namespaces/${name}`,
|
||||||
|
uid: `${name}-1`,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
describe("<NamespaceTreeView />", () => {
|
||||||
|
let di: DiContainer;
|
||||||
|
let render: DiRender;
|
||||||
|
let namespaceStore: NamespaceStore;
|
||||||
|
let fetchMock: AsyncFnMock<Fetch>;
|
||||||
|
let cleanup: Disposer;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
di = getDiForUnitTesting({ doGeneralOverrides: true });
|
||||||
|
di.unoverride(subscribeStoresInjectable);
|
||||||
|
|
||||||
|
di.override(directoryForUserDataInjectable, () => "/some-user-store-path");
|
||||||
|
di.override(directoryForKubeConfigsInjectable, () => "/some-kube-configs");
|
||||||
|
di.override(storesAndApisCanBeCreatedInjectable, () => true);
|
||||||
|
|
||||||
|
fetchMock = asyncFn();
|
||||||
|
di.override(fetchInjectable, () => fetchMock);
|
||||||
|
|
||||||
|
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",
|
||||||
|
}));
|
||||||
|
|
||||||
|
namespaceStore = di.inject(namespaceStoreInjectable);
|
||||||
|
|
||||||
|
const subscribeStores = di.inject(subscribeStoresInjectable);
|
||||||
|
|
||||||
|
cleanup = disposer(subscribeStores([namespaceStore]));
|
||||||
|
render = renderFor(di);
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
cleanup();
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("once the subscribe resolves", () => {
|
||||||
|
beforeEach(async () => {
|
||||||
|
await fetchMock.resolveSpecific([
|
||||||
|
"https://127.0.0.1:12345/api-kube/api/v1/namespaces",
|
||||||
|
], createMockResponseFromString("https://127.0.0.1:12345/api-kube/api/v1/namespaces", JSON.stringify({
|
||||||
|
apiVersion: "v1",
|
||||||
|
kind: "NamespaceList",
|
||||||
|
metadata: {},
|
||||||
|
items: [
|
||||||
|
createNamespace("test-1"),
|
||||||
|
createNamespace("test-2"),
|
||||||
|
createNamespace("test-3"),
|
||||||
|
createNamespace("test-4"),
|
||||||
|
createNamespace("test-5"),
|
||||||
|
createNamespace("test-6"),
|
||||||
|
createNamespace("test-7"),
|
||||||
|
createNamespace("test-8"),
|
||||||
|
createNamespace("test-9"),
|
||||||
|
createNamespace("test-10"),
|
||||||
|
createNamespace("test-11"),
|
||||||
|
createNamespace("test-12"),
|
||||||
|
createNamespace("test-13"),
|
||||||
|
],
|
||||||
|
})));
|
||||||
|
});
|
||||||
|
|
||||||
|
it("renders null with regular namespace", () => {
|
||||||
|
const result = render(<NamespaceTreeView root={createNamespace("tree-1")} />);
|
||||||
|
|
||||||
|
expect(result.baseElement).toMatchSnapshot();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("renders one namespace without children", () => {
|
||||||
|
const ns = new Namespace({
|
||||||
|
apiVersion: "v1",
|
||||||
|
kind: "Namespace",
|
||||||
|
metadata: {
|
||||||
|
name: "acme-group",
|
||||||
|
resourceVersion: "1",
|
||||||
|
selfLink: `/api/v1/namespaces/acme-group`,
|
||||||
|
uid: `acme-group-1`,
|
||||||
|
labels: {
|
||||||
|
"hnc.x-k8s.io/included-namespace": "true",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const result = render(<NamespaceTreeView root={ns} />);
|
||||||
|
|
||||||
|
expect(result.baseElement).toMatchSnapshot();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
Loading…
Reference in New Issue
Block a user