diff --git a/src/behaviours/application-update/installing-update.test.ts b/src/behaviours/application-update/installing-update.test.ts index 2d3516a6ed..05f2c1719c 100644 --- a/src/behaviours/application-update/installing-update.test.ts +++ b/src/behaviours/application-update/installing-update.test.ts @@ -89,7 +89,7 @@ describe("installing update", () => { }); 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", () => { diff --git a/src/renderer/components/status-bar/auto-update-status-bar-item.injectable.ts b/src/renderer/components/status-bar/auto-update-status-bar-item.injectable.tsx similarity index 86% rename from src/renderer/components/status-bar/auto-update-status-bar-item.injectable.ts rename to src/renderer/components/status-bar/auto-update-status-bar-item.injectable.tsx index b04c82b28b..3b9e3a20a0 100644 --- a/src/renderer/components/status-bar/auto-update-status-bar-item.injectable.ts +++ b/src/renderer/components/status-bar/auto-update-status-bar-item.injectable.tsx @@ -4,6 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { computed } from "mobx"; +import React from "react"; import { AutoUpdateComponent } from "./auto-update-status-bar-item"; import { statusBarItemInjectionToken } from "./status-bar-item-injection-token"; @@ -11,7 +12,7 @@ const autoUpdateStatusBarItemInjectable = getInjectable({ id: "quit-app-separator-tray-item", instantiate: () => ({ - component: AutoUpdateComponent, + component: () => , position: "left" as const, visible: computed(() => true), }), diff --git a/src/renderer/components/status-bar/auto-update-status-bar-item.tsx b/src/renderer/components/status-bar/auto-update-status-bar-item.tsx index a07140d4cd..765d7f855f 100644 --- a/src/renderer/components/status-bar/auto-update-status-bar-item.tsx +++ b/src/renderer/components/status-bar/auto-update-status-bar-item.tsx @@ -73,7 +73,12 @@ const downloadSucceeded = (version: string) =>
{`Download for version ${ver 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(); if (downloadingUpdateState.value.get()) { diff --git a/src/renderer/components/status-bar/status-bar-item-registrator.injectable.tsx b/src/renderer/components/status-bar/status-bar-item-registrator.injectable.tsx index 95934ed9f7..2bbd8c5f90 100644 --- a/src/renderer/components/status-bar/status-bar-item-registrator.injectable.tsx +++ b/src/renderer/components/status-bar/status-bar-item-registrator.injectable.tsx @@ -12,6 +12,7 @@ import { statusBarItemInjectionToken } from "./status-bar-item-injection-token"; import type { StatusBarRegistration } from "./status-bar-registration"; import React from "react"; import getRandomIdInjectable from "../../../common/utils/get-random-id.injectable"; +import logger from "../../../common/logger"; const statusBarItemRegistratorInjectable = getInjectable({ id: "status-bar-item-registrator", @@ -36,10 +37,11 @@ const toItemInjectableFor = (extension: LensRendererExtension, getRandomId: () = let component: React.ComponentType; let position: "left" | "right"; - if (registration.item) { + if (registration?.item) { const { item } = registration; // default for old API is "right" + position = "right"; 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; if (pos !== "left" && pos !== "right") { @@ -58,10 +60,11 @@ const toItemInjectableFor = (extension: LensRendererExtension, getRandomId: () = } position = pos; - component = Item; } else { - // throw? + logger.warn("StatusBarRegistration must have valid item or components field"); + + return []; } return [getInjectable({ diff --git a/src/renderer/components/status-bar/status-bar.test.tsx b/src/renderer/components/status-bar/status-bar.test.tsx index b797e35b77..322b37dc85 100644 --- a/src/renderer/components/status-bar/status-bar.test.tsx +++ b/src/renderer/components/status-bar/status-bar.test.tsx @@ -5,10 +5,6 @@ import React from "react"; 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 { computed, observable } from "mobx"; 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 { LensRendererExtension } from "../../../extensions/lens-renderer-extension"; 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 { constructor(statusBarItems: IObservableArray) { @@ -35,21 +33,29 @@ class SomeTestExtension extends LensRendererExtension { } describe("", () => { - let render: DiRender; let di: DiContainer; let statusBarItems: IObservableArray; + let applicationBuilder: ApplicationBuilder; - beforeEach(() => { + beforeEach(async () => { statusBarItems = observable.array([]); - di = getDiForUnitTesting({ doGeneralOverrides: true }); - render = renderFor(di); + + applicationBuilder = getApplicationBuilder(); + + applicationBuilder.beforeApplicationStart(({ rendererDi }) => { + rendererDi.unoverride(getRandomIdInjectable); + rendererDi.permitSideEffects(getRandomIdInjectable); + }); + + applicationBuilder.extensions.renderer.enable(new SomeTestExtension(statusBarItems)); + + di = applicationBuilder.dis.rendererDi; di.override(directoryForUserDataInjectable, () => "some-directory-for-user-data"); - di.override(rendererExtensionsInjectable, () => computed(() => [new SomeTestExtension(statusBarItems)])); }); - it("renders w/o errors", () => { - const { container } = render(); + it("renders w/o errors", async () => { + const { container } = await applicationBuilder.render(); expect(container).toBeInstanceOf(HTMLElement); }); @@ -62,13 +68,13 @@ describe("", () => { [], [{}], {}, - ])("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]); - expect(() => render()).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 text = "heee"; @@ -77,12 +83,12 @@ describe("", () => { left: [], }) as StatusBarItems)); - const { getByTestId } = render(); + const { getByTestId } = await applicationBuilder.render(); 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 text = "heee"; @@ -90,13 +96,13 @@ describe("", () => { item: () => {text}, }]); - const { getByTestId } = render(); + const { getByTestId } = await applicationBuilder.render(); expect(getByTestId(testId)).toHaveTextContent(text); }); - it("sort positioned items properly", () => { + it("sort positioned items properly", async () => { statusBarItems.replace([ { components: { @@ -123,7 +129,7 @@ describe("", () => { }, ]); - const { getAllByTestId } = render(); + const { getAllByTestId } = await applicationBuilder.render(); const elems = getAllByTestId("sortedElem"); const positions = elems.map(elem => elem.textContent);