1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00
lens/src/features/entity-settings/showing-settings-for-correct-entity.test.tsx
Sebastian Malton d9a7a4846f Fix lint
Signed-off-by: Sebastian Malton <sebastian@malton.name>
2023-01-10 15:18:12 -05:00

206 lines
7.2 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 type { RenderResult } from "@testing-library/react";
import { KubernetesCluster, WebLink } from "../../common/catalog-entities";
import navigateToEntitySettingsInjectable from "../../common/front-end-routing/routes/entity-settings/navigate-to-entity-settings.injectable";
import catalogEntityRegistryInjectable from "../../renderer/api/catalog/entity/registry.injectable";
import type { ApplicationBuilder } from "../test-utils/application-builder";
import { setupInitializingApplicationBuilder } from "../test-utils/application-builder";
describe("Showing correct entity settings", () => {
let builder: ApplicationBuilder;
let rendered: RenderResult;
let windowDi: DiContainer;
let clusterEntity: KubernetesCluster;
let localClusterEntity: KubernetesCluster;
let otherEntity: WebLink;
setupInitializingApplicationBuilder(b => builder = b);
beforeEach(async () => {
builder.afterWindowStart((windowDi) => {
clusterEntity = new KubernetesCluster({
metadata: {
labels: {},
name: "some-kubernetes-cluster",
uid: "some-entity-id",
},
spec: {
kubeconfigContext: "some-context",
kubeconfigPath: "/some/path/to/kubeconfig",
},
status: {
phase: "connecting",
},
});
localClusterEntity = new KubernetesCluster({
metadata: {
labels: {},
name: "some-local-kubernetes-cluster",
uid: "some-entity-id-2",
source: "local",
},
spec: {
kubeconfigContext: "some-context",
kubeconfigPath: "/some/path/to/local/kubeconfig",
},
status: {
phase: "connecting",
},
});
otherEntity = new WebLink({
metadata: {
labels: {},
name: "some-weblink",
uid: "some-weblink-id",
},
spec: {
url: "https://my-websome.com",
},
status: {
phase: "available",
},
});
// TODO: replace with proper entity source once syncing entities between main and windows is injectable
const catalogEntityRegistry = windowDi.inject(catalogEntityRegistryInjectable);
catalogEntityRegistry.updateItems([clusterEntity, otherEntity, localClusterEntity]);
});
rendered = await builder.render();
windowDi = builder.applicationWindow.only.di;
});
it("renders", () => {
expect(rendered.baseElement).toMatchSnapshot();
});
it("does not show entity settings page yet", () => {
expect(rendered.queryByTestId("entity-settings")).not.toBeInTheDocument();
});
describe("when navigating to non-local cluster entity settings", () => {
beforeEach(() => {
const navigateToEntitySettings = windowDi.inject(navigateToEntitySettingsInjectable);
navigateToEntitySettings(clusterEntity.getId());
});
it("renders", () => {
expect(rendered.baseElement).toMatchSnapshot();
});
it("shows entity settings page", () => {
expect(rendered.queryByTestId("entity-settings")).toBeInTheDocument();
});
it("does not show the General setting tab header for non-local cluster", () => {
expect(rendered.queryByTestId("general-tab")).not.toBeInTheDocument();
});
it("shows Proxy setting tab header", () => {
expect(rendered.queryByTestId("proxy-tab")).toBeInTheDocument();
});
it("shows Terminal setting tab header", () => {
expect(rendered.queryByTestId("terminal-tab")).toBeInTheDocument();
});
it("shows Namespaces setting tab header", () => {
expect(rendered.queryByTestId("namespace-tab")).toBeInTheDocument();
});
it("shows Metrics setting tab header", () => {
expect(rendered.queryByTestId("metrics-tab")).toBeInTheDocument();
});
it("shows Node Shell setting tab header", () => {
expect(rendered.queryByTestId("node-shell-tab")).toBeInTheDocument();
});
it("shows the setting tabs in the correct order", () => {
expect(rendered.getByTestId("proxy-tab").nextSibling).toHaveAttribute("data-testid", "terminal-tab");
expect(rendered.getByTestId("terminal-tab").nextSibling).toHaveAttribute("data-testid", "namespace-tab");
expect(rendered.getByTestId("namespace-tab").nextSibling).toHaveAttribute("data-testid", "metrics-tab");
expect(rendered.getByTestId("metrics-tab").nextSibling).toHaveAttribute("data-testid", "node-shell-tab");
});
});
describe("when navigating to local cluster entity settings", () => {
beforeEach(() => {
const navigateToEntitySettings = windowDi.inject(navigateToEntitySettingsInjectable);
navigateToEntitySettings(localClusterEntity.getId());
});
it("renders", () => {
expect(rendered.baseElement).toMatchSnapshot();
});
it("shows entity settings page", () => {
expect(rendered.queryByTestId("entity-settings")).toBeInTheDocument();
});
it("shows the General setting tab header", () => {
expect(rendered.queryByTestId("general-tab")).toBeInTheDocument();
});
it("shows Proxy setting tab header", () => {
expect(rendered.queryByTestId("proxy-tab")).toBeInTheDocument();
});
it("shows Terminal setting tab header", () => {
expect(rendered.queryByTestId("terminal-tab")).toBeInTheDocument();
});
it("shows Namespaces setting tab header", () => {
expect(rendered.queryByTestId("namespace-tab")).toBeInTheDocument();
});
it("shows Metrics setting tab header", () => {
expect(rendered.queryByTestId("metrics-tab")).toBeInTheDocument();
});
it("shows Node Shell setting tab header", () => {
expect(rendered.queryByTestId("node-shell-tab")).toBeInTheDocument();
});
it("shows the setting tabs in the correct order", () => {
expect(rendered.getByTestId("general-tab").nextSibling).toHaveAttribute("data-testid", "proxy-tab");
expect(rendered.getByTestId("proxy-tab").nextSibling).toHaveAttribute("data-testid", "terminal-tab");
expect(rendered.getByTestId("terminal-tab").nextSibling).toHaveAttribute("data-testid", "namespace-tab");
expect(rendered.getByTestId("namespace-tab").nextSibling).toHaveAttribute("data-testid", "metrics-tab");
expect(rendered.getByTestId("metrics-tab").nextSibling).toHaveAttribute("data-testid", "node-shell-tab");
});
});
describe("when navigating to weblink entity settings", () => {
beforeEach(() => {
const navigateToEntitySettings = windowDi.inject(navigateToEntitySettingsInjectable);
navigateToEntitySettings(otherEntity.getId());
});
it("renders", () => {
expect(rendered.baseElement).toMatchSnapshot();
});
it("shows entity settings page", () => {
expect(rendered.queryByTestId("entity-settings")).toBeInTheDocument();
});
it("does not show the unrelated settings", () => {
expect(rendered.queryByTestId("general-tab")).not.toBeInTheDocument();
});
it("shows no settings page info", () => {
expect(rendered.baseElement.querySelector("[data-preference-page-does-not-exist-test='true']")).toBeInTheDocument();
});
});
});