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 <ul
class="Animate opacity Menu MenuActions flex KubeObjectMenu toolbar gaps right bottom" class="Animate opacity Menu MenuActions flex KubeObjectMenu toolbar gaps right bottom"
> >
<div> <li>
Some menu item Some menu item
</div> </li>
<li <li
class="MenuItem" class="MenuItem"
data-testid="menu-action-remove" data-testid="menu-action-remove"
@ -55,9 +55,9 @@ exports[`kube-object-menu given kube object when removing kube object renders 1`
<ul <ul
class="Animate opacity Menu MenuActions flex KubeObjectMenu toolbar gaps right bottom" class="Animate opacity Menu MenuActions flex KubeObjectMenu toolbar gaps right bottom"
> >
<div> <li>
Some menu item Some menu item
</div> </li>
<li <li
class="MenuItem" class="MenuItem"
data-testid="menu-action-remove" data-testid="menu-action-remove"
@ -156,9 +156,9 @@ exports[`kube-object-menu given kube object with namespace when removing kube ob
<ul <ul
class="Animate opacity Menu MenuActions flex KubeObjectMenu toolbar gaps right bottom" class="Animate opacity Menu MenuActions flex KubeObjectMenu toolbar gaps right bottom"
> >
<div> <li>
Some menu item Some menu item
</div> </li>
<li <li
class="MenuItem" class="MenuItem"
data-testid="menu-action-remove" data-testid="menu-action-remove"
@ -257,9 +257,9 @@ exports[`kube-object-menu given kube object without namespace when removing kube
<ul <ul
class="Animate opacity Menu MenuActions flex KubeObjectMenu toolbar gaps right bottom" class="Animate opacity Menu MenuActions flex KubeObjectMenu toolbar gaps right bottom"
> >
<div> <li>
Some menu item Some menu item
</div> </li>
<li <li
class="MenuItem" class="MenuItem"
data-testid="menu-action-remove" 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 { KubeObject } from "../../../common/k8s-api/kube-object";
import userEvent from "@testing-library/user-event"; import userEvent from "@testing-library/user-event";
import type { KubeApi } from "../../../common/k8s-api/kube-api"; import type { KubeApi } from "../../../common/k8s-api/kube-api";
import type { import type { KubeObjectMenuRegistration } from "../../../extensions/registries";
IHasGettableItemsForKind,
KubeObjectMenuRegistration,
} from "../../../extensions/registries";
import type { IGettableStore } from "../../../common/k8s-api/api-manager"; import type { IGettableStore } from "../../../common/k8s-api/api-manager";
import type { KubeObjectStore } from "../../../common/k8s-api/kube-object.store"; import type { KubeObjectStore } from "../../../common/k8s-api/kube-object.store";
import { ConfirmDialog } from "../confirm-dialog"; import { ConfirmDialog } from "../confirm-dialog";
import asyncFn from "@async-fn/jest"; import asyncFn from "@async-fn/jest";
import { KubeObjectMenuRegistry } from "../../../extensions/registries";
describe("kube-object-menu", () => { describe("kube-object-menu", () => {
let hideDetailsStub: () => void; let hideDetailsStub: () => void;
let editResourceTabStub: () => void; let editResourceTabStub: () => void;
let apiManagerStub: IGettableStore; let apiManagerStub: IGettableStore;
let kubeObjectMenuRegistryStub: IHasGettableItemsForKind; let kubeObjectMenuRegistry: KubeObjectMenuRegistry;
let objectStub: KubeObject | null; let objectStub: KubeObject | null;
let dependencies: KubeObjectMenuDependencies<KubeObject>; let dependencies: KubeObjectMenuDependencies<KubeObject>;
@ -61,20 +59,33 @@ describe("kube-object-menu", () => {
): TKubeObjectStore | undefined => undefined, ): 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 = { const MenuItemComponent: React.FC = () => <li>Some menu item</li>;
apiVersions: ["irrelevant"],
components: { MenuItem: MenuItemComponentStub },
kind: "irrelevant",
};
kubeObjectMenuRegistryStub = { addDynamicMenuItem({
// eslint-disable-next-line unused-imports/no-unused-vars-ts kubeObjectMenuRegistry,
getItemsForKind: (kind: string, apiVersion: string): any => [ MenuItemComponent,
dynamicMenuItemStub, 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 = () => {}; hideDetailsStub = () => {};
@ -83,7 +94,7 @@ describe("kube-object-menu", () => {
dependencies = { dependencies = {
clusterName: "Some cluster name", clusterName: "Some cluster name",
apiManager: apiManagerStub, apiManager: apiManagerStub,
kubeObjectMenuRegistry: kubeObjectMenuRegistryStub, kubeObjectMenuRegistry,
hideDetails: hideDetailsStub, hideDetails: hideDetailsStub,
editResourceTab: editResourceTabStub, editResourceTab: editResourceTabStub,
}; };
@ -125,7 +136,7 @@ describe("kube-object-menu", () => {
({ baseElement, getByTestId, queryByTestId } = render( ({ baseElement, getByTestId, queryByTestId } = render(
<div> <div>
<ConfirmDialog/> <ConfirmDialog />
<KubeObjectMenu <KubeObjectMenu
object={objectStub} object={objectStub}
@ -178,7 +189,8 @@ describe("kube-object-menu", () => {
it("when removal resolves, closes the confirmation dialog", async () => { it("when removal resolves, closes the confirmation dialog", async () => {
await removeActionMock.resolve(); await removeActionMock.resolve();
expect(queryByTestId("confirmation-dialog")).toBeNull(); }); expect(queryByTestId("confirmation-dialog")).toBeNull();
});
}); });
}); });
}); });
@ -201,7 +213,7 @@ describe("kube-object-menu", () => {
({ baseElement, getByTestId } = render( ({ baseElement, getByTestId } = render(
<div> <div>
<ConfirmDialog/> <ConfirmDialog />
<KubeObjectMenu <KubeObjectMenu
object={objectStub} object={objectStub}
@ -240,7 +252,7 @@ describe("kube-object-menu", () => {
({ baseElement, getByTestId } = render( ({ baseElement, getByTestId } = render(
<div> <div>
<ConfirmDialog/> <ConfirmDialog />
<KubeObjectMenu <KubeObjectMenu
object={objectStub} 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);
};