/** * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ import React from "react"; import "@testing-library/jest-dom/extend-expect"; import { BottomBar } from "./bottom-bar"; import { getDiForUnitTesting } from "../../getDiForUnitTesting"; import type { DiRender } from "../test-utils/renderFor"; import { renderFor } from "../test-utils/renderFor"; import directoryForUserDataInjectable from "../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable"; import { LensRendererExtension } from "../../../extensions/lens-renderer-extension"; import { computed, IObservableArray, observable, runInAction } from "mobx"; import rendererExtensionsInjectable from "../../../extensions/renderer-extensions.injectable"; jest.mock("electron", () => ({ app: { getPath: () => "/foo", }, })); class SomeTestExtension extends LensRendererExtension { constructor(statusBarItems: IObservableArray) { super({ id: 'some-id', absolutePath: "irrelevant", isBundled: false, isCompatible: false, isEnabled: false, manifest: { name: 'some-id', version: "some-version" }, manifestPath: "irrelevant", }); this.statusBarItems = statusBarItems; } } describe("", () => { let render: DiRender; let statusBarItems: IObservableArray; beforeEach(async () => { statusBarItems = observable.array([]); const someTestExtension = new SomeTestExtension(statusBarItems); const di = getDiForUnitTesting({ doGeneralOverrides: true }); di.override(directoryForUserDataInjectable, () => 'some-directory-for-user-data') di.override(rendererExtensionsInjectable, () => { return computed(() => [someTestExtension]); }); render = renderFor(di); await di.runSetups(); }); it("renders w/o errors", () => { const { container } = render(); expect(container).toBeInstanceOf(HTMLElement); }); it.each([ undefined, "hello", 6, null, [], [{}], {}, ])("renders w/o errors when .getItems() returns not type compliant (%p)", val => { runInAction(() => { statusBarItems.replace([val]); }) expect(() => render()).not.toThrow(); }); it("renders items [{item: React.ReactNode}] (4.0.0-rc.1)", () => { const testId = "testId"; const text = "heee"; runInAction(() => { statusBarItems.replace([ { item: {text} } ]); }) const { getByTestId } = render(); expect(getByTestId(testId)).toHaveTextContent(text); }); it("renders items [{item: () => React.ReactNode}] (4.0.0-rc.1+)", () => { const testId = "testId"; const text = "heee"; runInAction(() => { statusBarItems.replace([ { item: () => {text} }, ]); }) const { getByTestId } = render(); expect(getByTestId(testId)).toHaveTextContent(text); }); it("sort positioned items properly", () => { runInAction(() => { statusBarItems.replace([ { components: { Item: () =>
right
, }, }, { components: { Item: () =>
right
, position: "right", }, }, { components: { Item: () =>
left
, position: "left", }, }, { components: { Item: () =>
left
, position: "left", }, }, ]); }); const { getAllByTestId } = render(); const elems = getAllByTestId("sortedElem"); const positions = elems.map(elem => elem.textContent); expect(positions).toEqual(["left", "left", "right", "right"]); }); });