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

fixing tests

Signed-off-by: Jim Ehrismann <jehrismann@mirantis.com>
This commit is contained in:
Jim Ehrismann 2022-06-28 22:45:04 -04:00
parent 19259bf537
commit f03cb6457a
5 changed files with 42 additions and 27 deletions

View File

@ -89,7 +89,7 @@ describe("installing update", () => {
}); });
it("notifies the user that checking for updates is happening", () => { it("notifies the user that checking for updates is happening", () => {
expect(showInfoNotificationMock).toHaveBeenCalledWith("Checking for updates..."); expect(rendered.getByTestId("auto-update-component")).toHaveTextContent("Checking for updates...");
}); });
it("renders", () => { it("renders", () => {

View File

@ -4,6 +4,7 @@
*/ */
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import { computed } from "mobx"; import { computed } from "mobx";
import React from "react";
import { AutoUpdateComponent } from "./auto-update-status-bar-item"; import { AutoUpdateComponent } from "./auto-update-status-bar-item";
import { statusBarItemInjectionToken } from "./status-bar-item-injection-token"; import { statusBarItemInjectionToken } from "./status-bar-item-injection-token";
@ -11,7 +12,7 @@ const autoUpdateStatusBarItemInjectable = getInjectable({
id: "quit-app-separator-tray-item", id: "quit-app-separator-tray-item",
instantiate: () => ({ instantiate: () => ({
component: AutoUpdateComponent, component: () => <AutoUpdateComponent data-testid="auto-update-component" />,
position: "left" as const, position: "left" as const,
visible: computed(() => true), visible: computed(() => true),
}), }),

View File

@ -73,7 +73,12 @@ const downloadSucceeded = (version: string) => <div>{`Download for version ${ver
const idle = () => <></>; const idle = () => <></>;
export const NonInjectedAutoUpdateComponent = observer(({ progressOfUpdateDownload, discoveredVersionState, downloadingUpdateState, checkingForUpdatesState }: Dependencies) => { export const NonInjectedAutoUpdateComponent = observer(({
progressOfUpdateDownload,
discoveredVersionState,
downloadingUpdateState,
checkingForUpdatesState,
}: Dependencies) => {
const discoveredVersion = discoveredVersionState.value.get(); const discoveredVersion = discoveredVersionState.value.get();
if (downloadingUpdateState.value.get()) { if (downloadingUpdateState.value.get()) {

View File

@ -12,6 +12,7 @@ import { statusBarItemInjectionToken } from "./status-bar-item-injection-token";
import type { StatusBarRegistration } from "./status-bar-registration"; import type { StatusBarRegistration } from "./status-bar-registration";
import React from "react"; import React from "react";
import getRandomIdInjectable from "../../../common/utils/get-random-id.injectable"; import getRandomIdInjectable from "../../../common/utils/get-random-id.injectable";
import logger from "../../../common/logger";
const statusBarItemRegistratorInjectable = getInjectable({ const statusBarItemRegistratorInjectable = getInjectable({
id: "status-bar-item-registrator", id: "status-bar-item-registrator",
@ -36,10 +37,11 @@ const toItemInjectableFor = (extension: LensRendererExtension, getRandomId: () =
let component: React.ComponentType; let component: React.ComponentType;
let position: "left" | "right"; let position: "left" | "right";
if (registration.item) { if (registration?.item) {
const { item } = registration; const { item } = registration;
// default for old API is "right" // default for old API is "right"
position = "right";
component = component =
() => ( () => (
<> <>
@ -50,7 +52,7 @@ const toItemInjectableFor = (extension: LensRendererExtension, getRandomId: () =
} }
</> </>
); );
} else if (registration.components) { } else if (registration?.components) {
const { position: pos = "right", Item } = registration.components; const { position: pos = "right", Item } = registration.components;
if (pos !== "left" && pos !== "right") { if (pos !== "left" && pos !== "right") {
@ -58,10 +60,11 @@ const toItemInjectableFor = (extension: LensRendererExtension, getRandomId: () =
} }
position = pos; position = pos;
component = Item; component = Item;
} else { } else {
// throw? logger.warn("StatusBarRegistration must have valid item or components field");
return [];
} }
return [getInjectable({ return [getInjectable({

View File

@ -5,10 +5,6 @@
import React from "react"; import React from "react";
import "@testing-library/jest-dom/extend-expect"; import "@testing-library/jest-dom/extend-expect";
import { StatusBar } from "./status-bar";
import { getDiForUnitTesting } from "../../getDiForUnitTesting";
import type { DiRender } from "../test-utils/renderFor";
import { renderFor } from "../test-utils/renderFor";
import type { IObservableArray } from "mobx"; import type { IObservableArray } from "mobx";
import { computed, observable } from "mobx"; import { computed, observable } from "mobx";
import type { DiContainer } from "@ogre-tools/injectable"; import type { DiContainer } from "@ogre-tools/injectable";
@ -16,7 +12,9 @@ import type { StatusBarItems } from "./status-bar-items.injectable";
import statusBarItemsInjectable from "./status-bar-items.injectable"; import statusBarItemsInjectable from "./status-bar-items.injectable";
import { LensRendererExtension } from "../../../extensions/lens-renderer-extension"; import { LensRendererExtension } from "../../../extensions/lens-renderer-extension";
import directoryForUserDataInjectable from "../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable"; import directoryForUserDataInjectable from "../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
import rendererExtensionsInjectable from "../../../extensions/renderer-extensions.injectable"; import type { ApplicationBuilder } from "../test-utils/get-application-builder";
import { getApplicationBuilder } from "../test-utils/get-application-builder";
import getRandomIdInjectable from "../../../common/utils/get-random-id.injectable";
class SomeTestExtension extends LensRendererExtension { class SomeTestExtension extends LensRendererExtension {
constructor(statusBarItems: IObservableArray<any>) { constructor(statusBarItems: IObservableArray<any>) {
@ -35,21 +33,29 @@ class SomeTestExtension extends LensRendererExtension {
} }
describe("<StatusBar />", () => { describe("<StatusBar />", () => {
let render: DiRender;
let di: DiContainer; let di: DiContainer;
let statusBarItems: IObservableArray<any>; let statusBarItems: IObservableArray<any>;
let applicationBuilder: ApplicationBuilder;
beforeEach(() => { beforeEach(async () => {
statusBarItems = observable.array([]); statusBarItems = observable.array([]);
di = getDiForUnitTesting({ doGeneralOverrides: true });
render = renderFor(di);
di.override(directoryForUserDataInjectable, () => "some-directory-for-user-data"); applicationBuilder = getApplicationBuilder();
di.override(rendererExtensionsInjectable, () => computed(() => [new SomeTestExtension(statusBarItems)]));
applicationBuilder.beforeApplicationStart(({ rendererDi }) => {
rendererDi.unoverride(getRandomIdInjectable);
rendererDi.permitSideEffects(getRandomIdInjectable);
}); });
it("renders w/o errors", () => { applicationBuilder.extensions.renderer.enable(new SomeTestExtension(statusBarItems));
const { container } = render(<StatusBar />);
di = applicationBuilder.dis.rendererDi;
di.override(directoryForUserDataInjectable, () => "some-directory-for-user-data");
});
it("renders w/o errors", async () => {
const { container } = await applicationBuilder.render();
expect(container).toBeInstanceOf(HTMLElement); expect(container).toBeInstanceOf(HTMLElement);
}); });
@ -62,13 +68,13 @@ describe("<StatusBar />", () => {
[], [],
[{}], [{}],
{}, {},
])("renders w/o errors when registrations are not type compliant (%p)", val => { ])("renders w/o errors when registrations are not type compliant (%p)", async val => {
statusBarItems.replace([val]); statusBarItems.replace([val]);
expect(() => render(<StatusBar />)).not.toThrow(); await expect(applicationBuilder.render()).resolves.toBeTruthy();
}); });
it("renders items [{item: React.ReactNode}] (4.0.0-rc.1)", () => { it("renders items [{item: React.ReactNode}] (4.0.0-rc.1)", async () => {
const testId = "testId"; const testId = "testId";
const text = "heee"; const text = "heee";
@ -77,12 +83,12 @@ describe("<StatusBar />", () => {
left: [], left: [],
}) as StatusBarItems)); }) as StatusBarItems));
const { getByTestId } = render(<StatusBar />); const { getByTestId } = await applicationBuilder.render();
expect(getByTestId(testId)).toHaveTextContent(text); expect(getByTestId(testId)).toHaveTextContent(text);
}); });
it("renders items [{item: () => React.ReactNode}] (4.0.0-rc.1+)", () => { it("renders items [{item: () => React.ReactNode}] (4.0.0-rc.1+)", async () => {
const testId = "testId"; const testId = "testId";
const text = "heee"; const text = "heee";
@ -90,13 +96,13 @@ describe("<StatusBar />", () => {
item: () => <span data-testid={testId} >{text}</span>, item: () => <span data-testid={testId} >{text}</span>,
}]); }]);
const { getByTestId } = render(<StatusBar />); const { getByTestId } = await applicationBuilder.render();
expect(getByTestId(testId)).toHaveTextContent(text); expect(getByTestId(testId)).toHaveTextContent(text);
}); });
it("sort positioned items properly", () => { it("sort positioned items properly", async () => {
statusBarItems.replace([ statusBarItems.replace([
{ {
components: { components: {
@ -123,7 +129,7 @@ describe("<StatusBar />", () => {
}, },
]); ]);
const { getAllByTestId } = render(<StatusBar />); const { getAllByTestId } = await applicationBuilder.render();
const elems = getAllByTestId("sortedElem"); const elems = getAllByTestId("sortedElem");
const positions = elems.map(elem => elem.textContent); const positions = elems.map(elem => elem.textContent);