diff --git a/src/common/front-end-routing/routes/welcome/default-welcome-route.injectable.ts b/src/common/front-end-routing/routes/welcome/default-welcome-route.injectable.ts index d0018dc539..d8db889033 100644 --- a/src/common/front-end-routing/routes/welcome/default-welcome-route.injectable.ts +++ b/src/common/front-end-routing/routes/welcome/default-welcome-route.injectable.ts @@ -4,19 +4,19 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { computed } from "mobx"; -import packageJsonInjectable from "../../../vars/package-json.injectable"; +import welcomeRouteConfigInjectable from "./welcome-route-config.injectable"; import { frontEndRouteInjectionToken } from "../../front-end-route-injection-token"; const defaultWelcomeRouteInjectable = getInjectable({ id: "default-welcome-route", instantiate: (di) => { - const packageJson = di.inject(packageJsonInjectable); + const welcomeRoute = di.inject(welcomeRouteConfigInjectable); return { path: "/welcome", clusterFrame: false, - isEnabled: computed(() => packageJson.config.welcomeRoute === "/welcome"), + isEnabled: computed(() => welcomeRoute === "/welcome"), }; }, diff --git a/src/common/front-end-routing/routes/welcome/welcome-route-config.injectable.ts b/src/common/front-end-routing/routes/welcome/welcome-route-config.injectable.ts new file mode 100644 index 0000000000..53a61ab99f --- /dev/null +++ b/src/common/front-end-routing/routes/welcome/welcome-route-config.injectable.ts @@ -0,0 +1,18 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import packageJsonInjectable from "../../../vars/package-json.injectable"; + +const welcomeRouteConfigInjectable = getInjectable({ + id: "welcome-route-config", + + instantiate: (di) => { + const packageJson = di.inject(packageJsonInjectable); + + return packageJson.config.welcomeRoute; + }, +}); + +export default welcomeRouteConfigInjectable; diff --git a/src/common/front-end-routing/routes/welcome/welcome-route.injectable.ts b/src/common/front-end-routing/routes/welcome/welcome-route.injectable.ts index a5b5c10ba9..839a7446c1 100644 --- a/src/common/front-end-routing/routes/welcome/welcome-route.injectable.ts +++ b/src/common/front-end-routing/routes/welcome/welcome-route.injectable.ts @@ -4,17 +4,17 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { computed } from "mobx"; -import packageJsonInjectable from "../../../vars/package-json.injectable"; +import welcomeRouteConfigInjectable from "./welcome-route-config.injectable"; import { frontEndRouteInjectionToken } from "../../front-end-route-injection-token"; const welcomeRouteInjectable = getInjectable({ id: "welcome-route", instantiate: (di) => { - const packageJson = di.inject(packageJsonInjectable); + const welcomeRoute = di.inject(welcomeRouteConfigInjectable); return { - path: packageJson.config.welcomeRoute, + path: welcomeRoute, clusterFrame: false, isEnabled: computed(() => true), }; diff --git a/src/features/welcome/setting-welcome-page.test.ts b/src/features/welcome/setting-welcome-page.test.ts deleted file mode 100644 index 0373f08bff..0000000000 --- a/src/features/welcome/setting-welcome-page.test.ts +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -export {}; - -describe("setting the welcome page", () => { - describe("given no extension sets the welcome page", () => { - it("sets the default welcome page", () => { - - }); - - it("navigates to the default welcome page", () => { - - }); - }); - - describe("given an extension sets a custom welcome page", () => { - it("sets the custom welcome page", () => { - - }); - - it("navigates to the custom welcome page", () => { - - }); - }); -}); diff --git a/src/features/welcome/setting-welcome-page.test.tsx b/src/features/welcome/setting-welcome-page.test.tsx new file mode 100644 index 0000000000..e795f69a89 --- /dev/null +++ b/src/features/welcome/setting-welcome-page.test.tsx @@ -0,0 +1,99 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +import type { RenderResult } from "@testing-library/react"; +import React from "react"; +import type { ApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder"; +import { getApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder"; +import type { FakeExtensionOptions } from "../../renderer/components/test-utils/get-extension-fake"; +import welcomeRouteConfigInjectable from "../../common/front-end-routing/routes/welcome/welcome-route-config.injectable"; +import welcomeRouteInjectable from "../../common/front-end-routing/routes/welcome/welcome-route.injectable"; +import type { Route } from "../../common/front-end-routing/front-end-route-injection-token"; + + +describe("setting-welcome-page", () => { + let applicationBuilder: ApplicationBuilder; + let rendered : RenderResult; + let welcomeRoute: Route; + + beforeEach(() => { + applicationBuilder = getApplicationBuilder(); + }); + + describe("given no extension sets the welcome page", () => { + beforeEach(async () => { + applicationBuilder.beforeApplicationStart((mainDi) => { + mainDi.override(welcomeRouteConfigInjectable, () => "/welcome"); + }); + + applicationBuilder.beforeWindowStart((windowDi) => { + windowDi.override(welcomeRouteConfigInjectable, () => "/welcome"); + }); + + // enable the extension even though the welcomeRoute is not overriden + applicationBuilder.extensions.enable(extensionWithWelcomePage); + rendered = await applicationBuilder.render(); + + const windowDi = applicationBuilder.applicationWindow.only.di; + + welcomeRoute = windowDi.inject(welcomeRouteInjectable); + }); + + it("sets the default welcome page", () => { + expect(welcomeRoute.path).toEqual("/welcome"); + }); + + it("navigates to the default welcome page", () => { + const welcomePage = rendered.getByTestId("welcome-page"); // from the Welcome component (welcome.tsx) + + expect(welcomePage).toBeInTheDocument(); + }); + }); + + describe("given an extension specifies a custom welcome page", () => { + beforeEach(async () => { + applicationBuilder.beforeApplicationStart((mainDi) => { + mainDi.override(welcomeRouteConfigInjectable, () => "/extension/some-extension-name/some-welcome-page"); + }); + + applicationBuilder.beforeWindowStart((windowDi) => { + windowDi.override(welcomeRouteConfigInjectable, () => "/extension/some-extension-name/some-welcome-page"); + }); + + applicationBuilder.extensions.enable(extensionWithWelcomePage); + rendered = await applicationBuilder.render(); + + const windowDi = applicationBuilder.applicationWindow.only.di; + + welcomeRoute = windowDi.inject(welcomeRouteInjectable); + }); + + it("sets the custom welcome page", () => { + expect(welcomeRoute.path).toEqual("/extension/some-extension-name/some-welcome-page"); + }); + + it("navigates to the custom welcome page", () => { + const welcomePage = rendered.getByTestId("some-welcome-test-id"); + + expect(welcomePage).toBeInTheDocument(); + }); + }); +}); + +const extensionWithWelcomePage: FakeExtensionOptions = { + id: "some-extension-id", + name: "some-extension-name", + + rendererOptions: { + globalPages: [ + { + id: "some-welcome-page", + components: { + Page: () =>