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

added injectable for specifically getting the welcomeRoute, tests

Signed-off-by: Jim Ehrismann <jehrismann@mirantis.com>
This commit is contained in:
Jim Ehrismann 2022-09-13 16:30:51 -04:00
parent 9ac417bce5
commit 377cf49fb6
5 changed files with 123 additions and 34 deletions

View File

@ -4,19 +4,19 @@
*/ */
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import { computed } from "mobx"; 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"; import { frontEndRouteInjectionToken } from "../../front-end-route-injection-token";
const defaultWelcomeRouteInjectable = getInjectable({ const defaultWelcomeRouteInjectable = getInjectable({
id: "default-welcome-route", id: "default-welcome-route",
instantiate: (di) => { instantiate: (di) => {
const packageJson = di.inject(packageJsonInjectable); const welcomeRoute = di.inject(welcomeRouteConfigInjectable);
return { return {
path: "/welcome", path: "/welcome",
clusterFrame: false, clusterFrame: false,
isEnabled: computed(() => packageJson.config.welcomeRoute === "/welcome"), isEnabled: computed(() => welcomeRoute === "/welcome"),
}; };
}, },

View File

@ -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;

View File

@ -4,17 +4,17 @@
*/ */
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import { computed } from "mobx"; 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"; import { frontEndRouteInjectionToken } from "../../front-end-route-injection-token";
const welcomeRouteInjectable = getInjectable({ const welcomeRouteInjectable = getInjectable({
id: "welcome-route", id: "welcome-route",
instantiate: (di) => { instantiate: (di) => {
const packageJson = di.inject(packageJsonInjectable); const welcomeRoute = di.inject(welcomeRouteConfigInjectable);
return { return {
path: packageJson.config.welcomeRoute, path: welcomeRoute,
clusterFrame: false, clusterFrame: false,
isEnabled: computed(() => true), isEnabled: computed(() => true),
}; };

View File

@ -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", () => {
});
});
});

View File

@ -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: () => <div data-testid="some-welcome-test-id">Welcome page</div>,
},
},
],
},
};