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 e702b6635e Add support for specifying an entity's shortName
- Remove CatalogEntityItem as it is a needless abstraction

- Refix transparent background bug after bad rebase

- Improve type safety around CatalogEntities by having CatalogEntitySpec
  be Partial<Record<string, unknown>>

- Cleanup implementation of catalogSyncToRendererInjectable

- Always use EntityPreferencesStore as an injectable

Signed-off-by: Sebastian Malton <sebastian@malton.name>

Make CatalogEntityRegistry.init redundent
- Make all IPC injectable

Signed-off-by: Sebastian Malton <sebastian@malton.name>

Ensure that catalog is initialized during startFrame

Signed-off-by: Sebastian Malton <sebastian@malton.name>

Fix tests that overroad catalog sync
- Actually use the catalog sync

Signed-off-by: Sebastian Malton <sebastian@malton.name>

Add behavioural tests

Signed-off-by: Sebastian Malton <sebastian@malton.name>

Don't assign in a computed

Signed-off-by: Sebastian Malton <sebastian@malton.name>

Make each store have a seperate migration version

- Allows each store to only bump its version when necessary
- Allows more decoupling from the extension API version so that PRs go stale slower

Signed-off-by: Sebastian Malton <sebastian@malton.name>

Add behavioural tests for short name length

Signed-off-by: Sebastian Malton <sebastian@malton.name>

Fix uses of testUsingTakeTime

Signed-off-by: Sebastian Malton <sebastian@malton.name>

Fix test flakiness by removing animate delay in tests

Signed-off-by: Sebastian Malton <sebastian@malton.name>

Update snapshots after removing timing sideeffects

Signed-off-by: Sebastian Malton <sebastian@malton.name>
2023-01-24 14:33:58 -05:00

188 lines
5.9 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 { computed } from "mobx";
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 "../../main/catalog/entity-registry.injectable";
import { type ApplicationBuilder, getApplicationBuilder } from "../../renderer/components/test-utils/get-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;
beforeEach(async () => {
builder = getApplicationBuilder();
builder.beforeApplicationStart((mainDi) => {
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",
},
});
mainDi.inject(catalogEntityRegistryInjectable).addComputedSource("test-id", computed(() => [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();
});
});
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();
});
});
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 the short name setting", () => {
expect(rendered.queryByTestId("short-name-tab")).toBeInTheDocument();
});
});
});