1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Increase credibility of some unit tests by using actual instance as stub

Signed-off-by: Janne Savolainen <janne.savolainen@houston-inc.com>
This commit is contained in:
Janne Savolainen 2021-11-08 09:44:08 +02:00 committed by Janne Savolainen
parent 76a9973ab1
commit 3a124a6393
2 changed files with 62 additions and 30 deletions

View File

@ -7,9 +7,9 @@ exports[`kube-object-menu given kube object renders 1`] = `
<ul
class="Animate opacity Menu MenuActions flex KubeObjectMenu toolbar gaps right bottom"
>
<div>
<li>
Some menu item
</div>
</li>
<li
class="MenuItem"
data-testid="menu-action-remove"
@ -55,9 +55,9 @@ exports[`kube-object-menu given kube object when removing kube object renders 1`
<ul
class="Animate opacity Menu MenuActions flex KubeObjectMenu toolbar gaps right bottom"
>
<div>
<li>
Some menu item
</div>
</li>
<li
class="MenuItem"
data-testid="menu-action-remove"
@ -156,9 +156,9 @@ exports[`kube-object-menu given kube object with namespace when removing kube ob
<ul
class="Animate opacity Menu MenuActions flex KubeObjectMenu toolbar gaps right bottom"
>
<div>
<li>
Some menu item
</div>
</li>
<li
class="MenuItem"
data-testid="menu-action-remove"
@ -257,9 +257,9 @@ exports[`kube-object-menu given kube object without namespace when removing kube
<ul
class="Animate opacity Menu MenuActions flex KubeObjectMenu toolbar gaps right bottom"
>
<div>
<li>
Some menu item
</div>
</li>
<li
class="MenuItem"
data-testid="menu-action-remove"

View File

@ -26,20 +26,18 @@ import { KubeObjectMenu, KubeObjectMenuDependencies } from "./kube-object-menu";
import { KubeObject } from "../../../common/k8s-api/kube-object";
import userEvent from "@testing-library/user-event";
import type { KubeApi } from "../../../common/k8s-api/kube-api";
import type {
IHasGettableItemsForKind,
KubeObjectMenuRegistration,
} from "../../../extensions/registries";
import type { KubeObjectMenuRegistration } from "../../../extensions/registries";
import type { IGettableStore } from "../../../common/k8s-api/api-manager";
import type { KubeObjectStore } from "../../../common/k8s-api/kube-object.store";
import { ConfirmDialog } from "../confirm-dialog";
import asyncFn from "@async-fn/jest";
import { KubeObjectMenuRegistry } from "../../../extensions/registries";
describe("kube-object-menu", () => {
let hideDetailsStub: () => void;
let editResourceTabStub: () => void;
let apiManagerStub: IGettableStore;
let kubeObjectMenuRegistryStub: IHasGettableItemsForKind;
let kubeObjectMenuRegistry: KubeObjectMenuRegistry;
let objectStub: KubeObject | null;
let dependencies: KubeObjectMenuDependencies<KubeObject>;
@ -61,20 +59,33 @@ describe("kube-object-menu", () => {
): TKubeObjectStore | undefined => undefined,
};
const MenuItemComponentStub: React.FC = () => <div>Some menu item</div>;
// TODO: Remove global shared state
KubeObjectMenuRegistry.resetInstance();
KubeObjectMenuRegistry.createInstance();
kubeObjectMenuRegistry = KubeObjectMenuRegistry.getInstance();
const dynamicMenuItemStub: KubeObjectMenuRegistration = {
apiVersions: ["irrelevant"],
components: { MenuItem: MenuItemComponentStub },
kind: "irrelevant",
};
const MenuItemComponent: React.FC = () => <li>Some menu item</li>;
kubeObjectMenuRegistryStub = {
// eslint-disable-next-line unused-imports/no-unused-vars-ts
getItemsForKind: (kind: string, apiVersion: string): any => [
dynamicMenuItemStub,
],
};
addDynamicMenuItem({
kubeObjectMenuRegistry,
MenuItemComponent,
apiVersions: ["some-api-version"],
kind: "some-kind",
});
addDynamicMenuItem({
kubeObjectMenuRegistry,
MenuItemComponent,
apiVersions: ["some-unrelated-api-version"],
kind: "some-kind",
});
addDynamicMenuItem({
kubeObjectMenuRegistry,
MenuItemComponent,
apiVersions: ["some-api-version"],
kind: "some-unrelated-kind",
});
hideDetailsStub = () => {};
@ -83,7 +94,7 @@ describe("kube-object-menu", () => {
dependencies = {
clusterName: "Some cluster name",
apiManager: apiManagerStub,
kubeObjectMenuRegistry: kubeObjectMenuRegistryStub,
kubeObjectMenuRegistry,
hideDetails: hideDetailsStub,
editResourceTab: editResourceTabStub,
};
@ -125,7 +136,7 @@ describe("kube-object-menu", () => {
({ baseElement, getByTestId, queryByTestId } = render(
<div>
<ConfirmDialog/>
<ConfirmDialog />
<KubeObjectMenu
object={objectStub}
@ -178,7 +189,8 @@ describe("kube-object-menu", () => {
it("when removal resolves, closes the confirmation dialog", async () => {
await removeActionMock.resolve();
expect(queryByTestId("confirmation-dialog")).toBeNull(); });
expect(queryByTestId("confirmation-dialog")).toBeNull();
});
});
});
});
@ -201,7 +213,7 @@ describe("kube-object-menu", () => {
({ baseElement, getByTestId } = render(
<div>
<ConfirmDialog/>
<ConfirmDialog />
<KubeObjectMenu
object={objectStub}
@ -240,7 +252,7 @@ describe("kube-object-menu", () => {
({ baseElement, getByTestId } = render(
<div>
<ConfirmDialog/>
<ConfirmDialog />
<KubeObjectMenu
object={objectStub}
@ -261,3 +273,23 @@ describe("kube-object-menu", () => {
});
});
});
const addDynamicMenuItem = ({
kubeObjectMenuRegistry,
MenuItemComponent,
apiVersions,
kind,
}: {
kubeObjectMenuRegistry: KubeObjectMenuRegistry;
MenuItemComponent: React.ComponentType;
apiVersions: string[];
kind: string;
}) => {
const dynamicMenuItemStub: KubeObjectMenuRegistration = {
apiVersions,
kind,
components: { MenuItem: MenuItemComponent },
};
kubeObjectMenuRegistry.add(dynamicMenuItemStub);
};