/** * 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 type { IObservableArray } from "mobx"; import { computed, observable } from "mobx"; import type { StatusBarItems } from "./status-bar-items.injectable"; import statusBarItemsInjectable from "./status-bar-items.injectable"; import directoryForUserDataInjectable from "../../../common/app-paths/directory-for-user-data/directory-for-user-data.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"; describe("", () => { let statusBarItems: IObservableArray; let builder: ApplicationBuilder; beforeEach(async () => { statusBarItems = observable.array([]); builder = getApplicationBuilder(); builder.beforeWindowStart((windowDi) => { windowDi.unoverride(getRandomIdInjectable); windowDi.permitSideEffects(getRandomIdInjectable); windowDi.override(directoryForUserDataInjectable, () => "some-directory-for-user-data"); }); builder.extensions.enable({ id: "some-id", name: "some-name", rendererOptions: { statusBarItems, }, }); }); it("renders w/o errors", async () => { const { container } = await builder.render(); expect(container).toBeInstanceOf(HTMLElement); }); it.each([ undefined, "hello", 6, null, [], [{}], {}, ])("renders w/o errors when registrations are not type compliant (%p)", async val => { statusBarItems.replace([val]); await expect(builder.render()).resolves.toBeTruthy(); }); it("renders items [{item: React.ReactNode}] (4.0.0-rc.1)", async () => { const testId = "testId"; const text = "heee"; builder.beforeWindowStart((windowDi) => { windowDi.override(statusBarItemsInjectable, () => computed(() => ({ right: [ { origin: testId, component: () => {text} }], left: [], }) as StatusBarItems)); }); const { getByTestId } = await builder.render(); expect(getByTestId(testId)).toHaveTextContent(text); }); it("renders items [{item: () => React.ReactNode}] (4.0.0-rc.1+)", async () => { const testId = "testId"; const text = "heee"; statusBarItems.replace([{ item: () => {text}, }]); const { getByTestId } = await builder.render(); expect(getByTestId(testId)).toHaveTextContent(text); }); it("sort positioned items properly", async () => { statusBarItems.replace([ { components: { Item: () =>
right1
, }, }, { components: { Item: () =>
right2
, position: "right", }, }, { components: { Item: () =>
left1
, position: "left", }, }, { components: { Item: () =>
left2
, position: "left", }, }, ]); const { getAllByTestId } = await builder.render(); const elems = getAllByTestId("sortedElem"); const positions = elems.map(elem => elem.textContent); expect(positions).toEqual(["left1", "left2", "right2", "right1"]); }); });