From a2f9a76add26ca7eec7fd2fec46d078f4eecf7ae Mon Sep 17 00:00:00 2001 From: Janne Savolainen Date: Thu, 4 Nov 2021 13:24:49 +0200 Subject: [PATCH] Kludge first unit test with more than minimal data This is a kludge because extraction of segregated interface for KubeObject is very difficult. This commit uses actual instance of KubeObject instead as a fake. Signed-off-by: Janne Savolainen --- .../kube-object-menu.test.tsx.snap | 35 ++++++++----- .../kube-object-menu.test.tsx | 51 ++++++++++++++++--- .../kube-object-menu/kube-object-menu.tsx | 1 + 3 files changed, 66 insertions(+), 21 deletions(-) diff --git a/src/renderer/components/kube-object-menu/__snapshots__/kube-object-menu.test.tsx.snap b/src/renderer/components/kube-object-menu/__snapshots__/kube-object-menu.test.tsx.snap index 24268c02bf..831f9b3489 100644 --- a/src/renderer/components/kube-object-menu/__snapshots__/kube-object-menu.test.tsx.snap +++ b/src/renderer/components/kube-object-menu/__snapshots__/kube-object-menu.test.tsx.snap @@ -1,18 +1,25 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`kube-object-menu given no kube object, renders 1`] = ` -
- - +
+
+
+ Some menu item +
+ +
+ +`; + +exports[`kube-object-menu given no kube object, renders 1`] = ` + +
+
+ `; diff --git a/src/renderer/components/kube-object-menu/kube-object-menu.test.tsx b/src/renderer/components/kube-object-menu/kube-object-menu.test.tsx index 7008af1bde..3e7adc9f3a 100644 --- a/src/renderer/components/kube-object-menu/kube-object-menu.test.tsx +++ b/src/renderer/components/kube-object-menu/kube-object-menu.test.tsx @@ -23,9 +23,12 @@ import React from "react"; import { render } from "@testing-library/react"; import "@testing-library/jest-dom/extend-expect"; import { KubeObjectMenu } from "./kube-object-menu"; -import type { KubeObject } from "../../../common/k8s-api/kube-object"; +import { KubeObject } from "../../../common/k8s-api/kube-object"; import type { KubeApi } from "../../../common/k8s-api/kube-api"; -import type { IHasGettableItemsForKind } from "../../../extensions/registries"; +import type { + IHasGettableItemsForKind, + KubeObjectMenuRegistration, +} from "../../../extensions/registries"; import type { IGettableStore } from "../../../common/k8s-api/api-manager"; import type { KubeObjectStore } from "../../../common/k8s-api/kube-object.store"; import type { IHasName } from "../../../main/cluster"; @@ -36,11 +39,16 @@ describe("kube-object-menu", () => { let apiManagerStub: IGettableStore; let clusterStub : IHasName; let kubeObjectMenuRegistryStub: IHasGettableItemsForKind; - let objectStub: any; + let objectStub: KubeObject | null; beforeEach(() => { // TODO: Remove illegal global overwrites for what should be a dependency somewhere. - window.requestIdleCallback = () => 42; + // TODO: Remove usage of experimental browser API. + window.requestIdleCallback = (callback: IdleRequestCallback): number => { + callback(undefined); + + return undefined; + }; window.cancelIdleCallback = () => {}; @@ -51,9 +59,18 @@ describe("kube-object-menu", () => { clusterStub = { name: "Some cluster name" }; + const MenuItemComponentStub : React.FC = () =>
Some menu item
; + + const menuItemStub: KubeObjectMenuRegistration = { + apiVersions: ["irrelevant"], + components: { MenuItem: MenuItemComponentStub }, + kind: "irrelevant", + }; + + kubeObjectMenuRegistryStub = { // eslint-disable-next-line unused-imports/no-unused-vars-ts - getItemsForKind: (kind: string, apiVersion: string): any => undefined, + getItemsForKind: (kind: string, apiVersion: string): any => [menuItemStub], }; hideDetailsStub = () => {}; @@ -64,14 +81,34 @@ describe("kube-object-menu", () => { it("given no kube object, renders", () => { objectStub = null; - const { container } = render(); - expect(container).toMatchSnapshot(); + expect(baseElement).toMatchSnapshot(); + }); + + it("given kube object, renders", () => { + objectStub = KubeObject.create({ + apiVersion: "some-api-version", + kind: "some-kind", + metadata: { uid: "some-uid", name: "some-name", resourceVersion: "some-resource-version" }, + }); + + const { baseElement } = render(); + + expect(baseElement).toMatchSnapshot(); }); }); diff --git a/src/renderer/components/kube-object-menu/kube-object-menu.tsx b/src/renderer/components/kube-object-menu/kube-object-menu.tsx index 5e76f626f5..0eac1e264a 100644 --- a/src/renderer/components/kube-object-menu/kube-object-menu.tsx +++ b/src/renderer/components/kube-object-menu/kube-object-menu.tsx @@ -34,6 +34,7 @@ export interface KubeObjectMenuProps extends MenuActionsProps { object: TKubeObject | null | undefined; editable?: boolean; removable?: boolean; + toolbar?: boolean; } interface KubeObjectMenuDependencies extends KubeObjectMenuProps{