From 36077a9feac645752e43a5fd91bbf7dfe81fc73e Mon Sep 17 00:00:00 2001 From: Jari Kolehmainen Date: Tue, 16 Aug 2022 15:04:31 +0300 Subject: [PATCH 01/10] Show extension api version (#6038) * show extension api version in about dialog Signed-off-by: Jari Kolehmainen * move buildVersionInjectable from common to main Signed-off-by: Jari Kolehmainen Signed-off-by: Jari Kolehmainen --- .../build-version.global-override-for-injectable.ts | 9 +++++++++ src/main/menu/build-version.injectable.ts | 13 +++++++++++++ src/main/menu/menu.ts | 9 ++++++--- src/main/menu/show-about.injectable.ts | 8 +++++++- 4 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 src/main/menu/build-version.global-override-for-injectable.ts create mode 100644 src/main/menu/build-version.injectable.ts diff --git a/src/main/menu/build-version.global-override-for-injectable.ts b/src/main/menu/build-version.global-override-for-injectable.ts new file mode 100644 index 0000000000..9c2331f72d --- /dev/null +++ b/src/main/menu/build-version.global-override-for-injectable.ts @@ -0,0 +1,9 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +import { getGlobalOverride } from "../../common/test-utils/get-global-override"; +import buildVersionInjectable from "./build-version.injectable"; + +export default getGlobalOverride(buildVersionInjectable, () => "6.0.0"); diff --git a/src/main/menu/build-version.injectable.ts b/src/main/menu/build-version.injectable.ts new file mode 100644 index 0000000000..d94594cc84 --- /dev/null +++ b/src/main/menu/build-version.injectable.ts @@ -0,0 +1,13 @@ +/** + * 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 electronAppInjectable from "../electron-app/electron-app.injectable"; + +const buildVersionInjectable = getInjectable({ + id: "build-version", + instantiate: (di) => di.inject(electronAppInjectable).getVersion(), +}); + +export default buildVersionInjectable; diff --git a/src/main/menu/menu.ts b/src/main/menu/menu.ts index fd6bc6c264..1454f38999 100644 --- a/src/main/menu/menu.ts +++ b/src/main/menu/menu.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { app, Menu } from "electron"; +import { Menu } from "electron"; import { appName, isWindows, productName } from "../../common/vars"; import packageJson from "../../../package.json"; import type { MenuItemOpts } from "./application-menu-items.injectable"; @@ -11,12 +11,15 @@ import type { ShowMessagePopup } from "../electron-app/features/show-message-pop export type MenuTopId = "mac" | "file" | "edit" | "view" | "help"; interface Dependencies { + appVersion: string; + extensionApiVersion: string; showMessagePopup: ShowMessagePopup; } -export const showAbout = ({ showMessagePopup }: Dependencies) => async () => { +export const showAbout = ({ showMessagePopup, extensionApiVersion, appVersion }: Dependencies) => async () => { const appInfo = [ - `${appName}: ${app.getVersion()}`, + `${appName}: ${appVersion}`, + `Extension API: ${extensionApiVersion}`, `Electron: ${process.versions.electron}`, `Chrome: ${process.versions.chrome}`, `Node: ${process.versions.node}`, diff --git a/src/main/menu/show-about.injectable.ts b/src/main/menu/show-about.injectable.ts index e79923d4c2..b65530261d 100644 --- a/src/main/menu/show-about.injectable.ts +++ b/src/main/menu/show-about.injectable.ts @@ -5,12 +5,18 @@ import { getInjectable } from "@ogre-tools/injectable"; import { showAbout } from "./menu"; import showMessagePopupInjectable from "../electron-app/features/show-message-popup.injectable"; +import appVersionInjectable from "../../common/vars/app-version.injectable"; +import buildVersionInjectable from "./build-version.injectable"; const showAboutInjectable = getInjectable({ id: "show-about", instantiate: (di) => - showAbout({ showMessagePopup: di.inject(showMessagePopupInjectable) }), + showAbout({ + appVersion: di.inject(buildVersionInjectable), + extensionApiVersion: di.inject(appVersionInjectable), + showMessagePopup: di.inject(showMessagePopupInjectable), + }), }); export default showAboutInjectable; From 299922c8a7051b97a20d1b1ce5f392c99ac526a5 Mon Sep 17 00:00:00 2001 From: Iku-turso Date: Tue, 16 Aug 2022 15:09:08 +0300 Subject: [PATCH 02/10] Rename old directory for behaviours as "features" to better communicate new intent with new directory structure to organize code and tests around features instead of technicalities (#6033) Co-authored-by: Mikko Aspiala Signed-off-by: Janne Savolainen Signed-off-by: Janne Savolainen Co-authored-by: Janne Savolainen --- ...tension-special-characters-in-page-registrations.test.tsx.snap | 0 .../__snapshots__/navigate-to-extension-page.test.tsx.snap | 0 .../__snapshots__/navigating-between-routes.test.tsx.snap | 0 .../__snapshots__/navigation-using-application-menu.test.tsx.snap | 0 .../add-cluster/navigation-using-application-menu.test.tsx | 0 ...te-when-too-long-time-since-update-was-downloaded.test.ts.snap | 0 .../installing-update-using-topbar-button.test.tsx.snap | 0 .../__snapshots__/installing-update-using-tray.test.ts.snap | 0 .../__snapshots__/installing-update.test.ts.snap | 0 .../__snapshots__/periodical-checking-of-updates.test.ts.snap | 0 .../__snapshots__/selection-of-update-stability.test.ts.snap | 0 .../application-update/analytics-for-installing-update.test.ts | 0 .../application-update/downgrading-version-update.test.ts | 0 ...-update-when-too-long-time-since-update-was-downloaded.test.ts | 0 .../installing-update-using-topbar-button.test.tsx | 0 .../application-update/installing-update-using-tray.test.ts | 0 .../application-update/installing-update.test.ts | 0 .../application-update/periodical-checking-of-updates.test.ts | 0 .../application-update/selection-of-update-stability.test.ts | 0 .../cluster/__snapshots__/order-of-sidebar-items.test.tsx.snap | 0 .../sidebar-and-tab-navigation-for-core.test.tsx.snap | 0 .../sidebar-and-tab-navigation-for-extensions.test.tsx.snap | 0 .../__snapshots__/visibility-of-sidebar-items.test.tsx.snap | 0 ...sable-cluster-pages-when-cluster-is-not-relevant.test.tsx.snap | 0 ...sable-sidebar-items-when-cluster-is-not-relevant.test.tsx.snap | 0 .../disable-cluster-pages-when-cluster-is-not-relevant.test.tsx | 0 .../disable-sidebar-items-when-cluster-is-not-relevant.test.tsx | 0 .../extension-api/reactively-disable-cluster-pages.test.tsx | 0 ...object-detail-items-when-cluster-is-not-relevant.test.tsx.snap | 0 ...kube-object-detail-items-when-cluster-is-not-relevant.test.tsx | 0 .../reactively-hide-kube-object-detail-item.test.tsx | 0 ...e-object-menu-items-when-cluster-is-not-relevant.test.tsx.snap | 0 ...e-kube-object-menu-items-when-cluster-is-not-relevant.test.tsx | 0 .../extension-api/reactively-hide-kube-object-menu-item.test.tsx | 0 .../__snapshots__/show-status-for-a-kube-object.test.tsx.snap | 0 ...ube-object-statuses-when-cluster-is-not-relevant.test.tsx.snap | 0 ...ble-kube-object-statuses-when-cluster-is-not-relevant.test.tsx | 0 .../extension-api/reactively-hide-kube-object-status.test.tsx | 0 .../show-status-for-a-kube-object.test.tsx | 0 .../__snapshots__/edit-namespace-from-new-tab.test.tsx.snap | 0 .../edit-namespace-from-previously-opened-tab.test.tsx.snap | 0 .../cluster/namespaces/edit-namespace-from-new-tab.test.tsx | 0 .../namespaces/edit-namespace-from-previously-opened-tab.test.tsx | 0 .../cluster/order-of-sidebar-items.test.tsx | 0 .../cluster/sidebar-and-tab-navigation-for-core.test.tsx | 0 .../cluster/sidebar-and-tab-navigation-for-extensions.test.tsx | 0 .../cluster/visibility-of-sidebar-items.test.tsx | 0 ...ds-overview-details-when-cluster-is-not-relevant.test.tsx.snap | 0 ...rkloads-overview-details-when-cluster-is-not-relevant.test.tsx | 0 .../extension-api/order-of-workload-overview-details.test.tsx | 0 .../reactively-hide-workloads-overview-details-item.test.tsx | 0 .../command-pallet/__snapshots__/keyboard-shortcuts.test.tsx.snap | 0 .../command-pallet/keyboard-shortcuts.test.tsx | 0 .../extension-special-characters-in-page-registrations.test.tsx | 0 .../__snapshots__/navigation-using-application-menu.test.ts.snap | 0 .../extensions/navigation-using-application-menu.test.ts | 0 .../add-custom-helm-repository-in-preferences.test.ts.snap | 0 .../add-helm-repository-from-list-in-preferences.test.ts.snap | 0 .../listing-active-helm-repositories-in-preferences.test.ts.snap | 0 ...ory-from-list-of-active-repository-in-preferences.test.ts.snap | 0 .../helm-charts/add-custom-helm-repository-in-preferences.test.ts | 0 .../add-helm-repository-from-list-in-preferences.test.ts | 0 .../__snapshots__/installing-helm-chart-from-new-tab.test.ts.snap | 0 .../installing-helm-chart-from-previously-opened-tab.test.ts.snap | 0 .../opening-dock-tab-for-installing-helm-chart.test.ts.snap | 0 .../installing-chart/installing-helm-chart-from-new-tab.test.ts | 0 .../installing-helm-chart-from-previously-opened-tab.test.ts | 0 .../opening-dock-tab-for-installing-helm-chart.test.ts | 0 .../listing-active-helm-repositories-in-preferences.test.ts | 0 ...pository-from-list-of-active-repository-in-preferences.test.ts | 0 .../__snapshots__/showing-details-for-helm-release.test.ts.snap | 0 .../helm-releases/showing-details-for-helm-release.test.ts | 0 src/{behaviours => features}/navigate-to-extension-page.test.tsx | 0 src/{behaviours => features}/navigating-between-routes.test.tsx | 0 .../preferences/__snapshots__/closing-preferences.test.tsx.snap | 0 .../__snapshots__/extension-adding-preference-tabs.test.tsx.snap | 0 .../navigation-to-application-preferences.test.ts.snap | 0 .../__snapshots__/navigation-to-editor-preferences.test.ts.snap | 0 .../navigation-to-extension-specific-preferences.test.tsx.snap | 0 .../navigation-to-kubernetes-preferences.test.ts.snap | 0 .../__snapshots__/navigation-to-proxy-preferences.test.ts.snap | 0 .../navigation-to-telemetry-preferences.test.tsx.snap | 0 .../__snapshots__/navigation-to-terminal-preferences.test.ts.snap | 0 .../__snapshots__/navigation-using-application-menu.test.ts.snap | 0 .../preferences/__snapshots__/navigation-using-tray.test.ts.snap | 0 .../preferences/closing-preferences.test.tsx | 0 .../preferences/extension-adding-preference-tabs.test.tsx | 0 .../preferences/navigation-to-application-preferences.test.ts | 0 .../preferences/navigation-to-editor-preferences.test.ts | 0 .../navigation-to-extension-specific-preferences.test.tsx | 0 .../preferences/navigation-to-kubernetes-preferences.test.ts | 0 .../preferences/navigation-to-proxy-preferences.test.ts | 0 .../preferences/navigation-to-telemetry-preferences.test.tsx | 0 .../preferences/navigation-to-terminal-preferences.test.ts | 0 .../preferences/navigation-using-application-menu.test.ts | 0 .../preferences/navigation-using-tray.test.ts | 0 .../opening-application-window-using-tray.test.ts | 0 .../quitting-the-app-using-application-menu.test.ts | 0 .../resolve-system-proxy/resolve-system-proxy.test.ts | 0 .../routes/extension-api/reactively-disable-global-pages.test.tsx | 0 .../status-bar-items-originating-from-extensions.test.tsx.snap | 0 .../status-bar-items-originating-from-extensions.test.tsx | 0 .../clicking-tray-menu-item-originating-from-extension.test.ts | 0 .../tray/extension-adding-tray-items.test.tsx | 0 .../tray/multiple-separators-originating-from-extension.test.ts | 0 .../__snapshots__/navigation-using-application-menu.test.ts.snap | 0 .../welcome/navigation-using-application-menu.test.ts | 0 107 files changed, 0 insertions(+), 0 deletions(-) rename src/{behaviours => features}/__snapshots__/extension-special-characters-in-page-registrations.test.tsx.snap (100%) rename src/{behaviours => features}/__snapshots__/navigate-to-extension-page.test.tsx.snap (100%) rename src/{behaviours => features}/__snapshots__/navigating-between-routes.test.tsx.snap (100%) rename src/{behaviours => features}/add-cluster/__snapshots__/navigation-using-application-menu.test.tsx.snap (100%) rename src/{behaviours => features}/add-cluster/navigation-using-application-menu.test.tsx (100%) rename src/{behaviours => features}/application-update/__snapshots__/force-user-to-update-when-too-long-time-since-update-was-downloaded.test.ts.snap (100%) rename src/{behaviours => features}/application-update/__snapshots__/installing-update-using-topbar-button.test.tsx.snap (100%) rename src/{behaviours => features}/application-update/__snapshots__/installing-update-using-tray.test.ts.snap (100%) rename src/{behaviours => features}/application-update/__snapshots__/installing-update.test.ts.snap (100%) rename src/{behaviours => features}/application-update/__snapshots__/periodical-checking-of-updates.test.ts.snap (100%) rename src/{behaviours => features}/application-update/__snapshots__/selection-of-update-stability.test.ts.snap (100%) rename src/{behaviours => features}/application-update/analytics-for-installing-update.test.ts (100%) rename src/{behaviours => features}/application-update/downgrading-version-update.test.ts (100%) rename src/{behaviours => features}/application-update/force-user-to-update-when-too-long-time-since-update-was-downloaded.test.ts (100%) rename src/{behaviours => features}/application-update/installing-update-using-topbar-button.test.tsx (100%) rename src/{behaviours => features}/application-update/installing-update-using-tray.test.ts (100%) rename src/{behaviours => features}/application-update/installing-update.test.ts (100%) rename src/{behaviours => features}/application-update/periodical-checking-of-updates.test.ts (100%) rename src/{behaviours => features}/application-update/selection-of-update-stability.test.ts (100%) rename src/{behaviours => features}/cluster/__snapshots__/order-of-sidebar-items.test.tsx.snap (100%) rename src/{behaviours => features}/cluster/__snapshots__/sidebar-and-tab-navigation-for-core.test.tsx.snap (100%) rename src/{behaviours => features}/cluster/__snapshots__/sidebar-and-tab-navigation-for-extensions.test.tsx.snap (100%) rename src/{behaviours => features}/cluster/__snapshots__/visibility-of-sidebar-items.test.tsx.snap (100%) rename src/{behaviours => features}/cluster/extension-api/__snapshots__/disable-cluster-pages-when-cluster-is-not-relevant.test.tsx.snap (100%) rename src/{behaviours => features}/cluster/extension-api/__snapshots__/disable-sidebar-items-when-cluster-is-not-relevant.test.tsx.snap (100%) rename src/{behaviours => features}/cluster/extension-api/disable-cluster-pages-when-cluster-is-not-relevant.test.tsx (100%) rename src/{behaviours => features}/cluster/extension-api/disable-sidebar-items-when-cluster-is-not-relevant.test.tsx (100%) rename src/{behaviours => features}/cluster/extension-api/reactively-disable-cluster-pages.test.tsx (100%) rename src/{behaviours => features}/cluster/kube-object-details/extension-api/__snapshots__/disable-kube-object-detail-items-when-cluster-is-not-relevant.test.tsx.snap (100%) rename src/{behaviours => features}/cluster/kube-object-details/extension-api/disable-kube-object-detail-items-when-cluster-is-not-relevant.test.tsx (100%) rename src/{behaviours => features}/cluster/kube-object-details/extension-api/reactively-hide-kube-object-detail-item.test.tsx (100%) rename src/{behaviours => features}/cluster/kube-object-menu/extension-api/__snapshots__/disable-kube-object-menu-items-when-cluster-is-not-relevant.test.tsx.snap (100%) rename src/{behaviours => features}/cluster/kube-object-menu/extension-api/disable-kube-object-menu-items-when-cluster-is-not-relevant.test.tsx (100%) rename src/{behaviours => features}/cluster/kube-object-menu/extension-api/reactively-hide-kube-object-menu-item.test.tsx (100%) rename src/{behaviours => features}/cluster/kube-object-status-icon/__snapshots__/show-status-for-a-kube-object.test.tsx.snap (100%) rename src/{behaviours => features}/cluster/kube-object-status-icon/extension-api/__snapshots__/disable-kube-object-statuses-when-cluster-is-not-relevant.test.tsx.snap (100%) rename src/{behaviours => features}/cluster/kube-object-status-icon/extension-api/disable-kube-object-statuses-when-cluster-is-not-relevant.test.tsx (100%) rename src/{behaviours => features}/cluster/kube-object-status-icon/extension-api/reactively-hide-kube-object-status.test.tsx (100%) rename src/{behaviours => features}/cluster/kube-object-status-icon/show-status-for-a-kube-object.test.tsx (100%) rename src/{behaviours => features}/cluster/namespaces/__snapshots__/edit-namespace-from-new-tab.test.tsx.snap (100%) rename src/{behaviours => features}/cluster/namespaces/__snapshots__/edit-namespace-from-previously-opened-tab.test.tsx.snap (100%) rename src/{behaviours => features}/cluster/namespaces/edit-namespace-from-new-tab.test.tsx (100%) rename src/{behaviours => features}/cluster/namespaces/edit-namespace-from-previously-opened-tab.test.tsx (100%) rename src/{behaviours => features}/cluster/order-of-sidebar-items.test.tsx (100%) rename src/{behaviours => features}/cluster/sidebar-and-tab-navigation-for-core.test.tsx (100%) rename src/{behaviours => features}/cluster/sidebar-and-tab-navigation-for-extensions.test.tsx (100%) rename src/{behaviours => features}/cluster/visibility-of-sidebar-items.test.tsx (100%) rename src/{behaviours => features}/cluster/workloads/overview/extension-api/__snapshots__/disable-workloads-overview-details-when-cluster-is-not-relevant.test.tsx.snap (100%) rename src/{behaviours => features}/cluster/workloads/overview/extension-api/disable-workloads-overview-details-when-cluster-is-not-relevant.test.tsx (100%) rename src/{behaviours => features}/cluster/workloads/overview/extension-api/order-of-workload-overview-details.test.tsx (100%) rename src/{behaviours => features}/cluster/workloads/overview/extension-api/reactively-hide-workloads-overview-details-item.test.tsx (100%) rename src/{behaviours => features}/command-pallet/__snapshots__/keyboard-shortcuts.test.tsx.snap (100%) rename src/{behaviours => features}/command-pallet/keyboard-shortcuts.test.tsx (100%) rename src/{behaviours => features}/extension-special-characters-in-page-registrations.test.tsx (100%) rename src/{behaviours => features}/extensions/__snapshots__/navigation-using-application-menu.test.ts.snap (100%) rename src/{behaviours => features}/extensions/navigation-using-application-menu.test.ts (100%) rename src/{behaviours => features}/helm-charts/__snapshots__/add-custom-helm-repository-in-preferences.test.ts.snap (100%) rename src/{behaviours => features}/helm-charts/__snapshots__/add-helm-repository-from-list-in-preferences.test.ts.snap (100%) rename src/{behaviours => features}/helm-charts/__snapshots__/listing-active-helm-repositories-in-preferences.test.ts.snap (100%) rename src/{behaviours => features}/helm-charts/__snapshots__/remove-helm-repository-from-list-of-active-repository-in-preferences.test.ts.snap (100%) rename src/{behaviours => features}/helm-charts/add-custom-helm-repository-in-preferences.test.ts (100%) rename src/{behaviours => features}/helm-charts/add-helm-repository-from-list-in-preferences.test.ts (100%) rename src/{behaviours => features}/helm-charts/installing-chart/__snapshots__/installing-helm-chart-from-new-tab.test.ts.snap (100%) rename src/{behaviours => features}/helm-charts/installing-chart/__snapshots__/installing-helm-chart-from-previously-opened-tab.test.ts.snap (100%) rename src/{behaviours => features}/helm-charts/installing-chart/__snapshots__/opening-dock-tab-for-installing-helm-chart.test.ts.snap (100%) rename src/{behaviours => features}/helm-charts/installing-chart/installing-helm-chart-from-new-tab.test.ts (100%) rename src/{behaviours => features}/helm-charts/installing-chart/installing-helm-chart-from-previously-opened-tab.test.ts (100%) rename src/{behaviours => features}/helm-charts/installing-chart/opening-dock-tab-for-installing-helm-chart.test.ts (100%) rename src/{behaviours => features}/helm-charts/listing-active-helm-repositories-in-preferences.test.ts (100%) rename src/{behaviours => features}/helm-charts/remove-helm-repository-from-list-of-active-repository-in-preferences.test.ts (100%) rename src/{behaviours => features}/helm-releases/__snapshots__/showing-details-for-helm-release.test.ts.snap (100%) rename src/{behaviours => features}/helm-releases/showing-details-for-helm-release.test.ts (100%) rename src/{behaviours => features}/navigate-to-extension-page.test.tsx (100%) rename src/{behaviours => features}/navigating-between-routes.test.tsx (100%) rename src/{behaviours => features}/preferences/__snapshots__/closing-preferences.test.tsx.snap (100%) rename src/{behaviours => features}/preferences/__snapshots__/extension-adding-preference-tabs.test.tsx.snap (100%) rename src/{behaviours => features}/preferences/__snapshots__/navigation-to-application-preferences.test.ts.snap (100%) rename src/{behaviours => features}/preferences/__snapshots__/navigation-to-editor-preferences.test.ts.snap (100%) rename src/{behaviours => features}/preferences/__snapshots__/navigation-to-extension-specific-preferences.test.tsx.snap (100%) rename src/{behaviours => features}/preferences/__snapshots__/navigation-to-kubernetes-preferences.test.ts.snap (100%) rename src/{behaviours => features}/preferences/__snapshots__/navigation-to-proxy-preferences.test.ts.snap (100%) rename src/{behaviours => features}/preferences/__snapshots__/navigation-to-telemetry-preferences.test.tsx.snap (100%) rename src/{behaviours => features}/preferences/__snapshots__/navigation-to-terminal-preferences.test.ts.snap (100%) rename src/{behaviours => features}/preferences/__snapshots__/navigation-using-application-menu.test.ts.snap (100%) rename src/{behaviours => features}/preferences/__snapshots__/navigation-using-tray.test.ts.snap (100%) rename src/{behaviours => features}/preferences/closing-preferences.test.tsx (100%) rename src/{behaviours => features}/preferences/extension-adding-preference-tabs.test.tsx (100%) rename src/{behaviours => features}/preferences/navigation-to-application-preferences.test.ts (100%) rename src/{behaviours => features}/preferences/navigation-to-editor-preferences.test.ts (100%) rename src/{behaviours => features}/preferences/navigation-to-extension-specific-preferences.test.tsx (100%) rename src/{behaviours => features}/preferences/navigation-to-kubernetes-preferences.test.ts (100%) rename src/{behaviours => features}/preferences/navigation-to-proxy-preferences.test.ts (100%) rename src/{behaviours => features}/preferences/navigation-to-telemetry-preferences.test.tsx (100%) rename src/{behaviours => features}/preferences/navigation-to-terminal-preferences.test.ts (100%) rename src/{behaviours => features}/preferences/navigation-using-application-menu.test.ts (100%) rename src/{behaviours => features}/preferences/navigation-using-tray.test.ts (100%) rename src/{behaviours => features}/quitting-and-restarting-the-app/opening-application-window-using-tray.test.ts (100%) rename src/{behaviours => features}/quitting-and-restarting-the-app/quitting-the-app-using-application-menu.test.ts (100%) rename src/{behaviours => features}/resolve-system-proxy/resolve-system-proxy.test.ts (100%) rename src/{behaviours => features}/routes/extension-api/reactively-disable-global-pages.test.tsx (100%) rename src/{behaviours => features}/status-bar/__snapshots__/status-bar-items-originating-from-extensions.test.tsx.snap (100%) rename src/{behaviours => features}/status-bar/status-bar-items-originating-from-extensions.test.tsx (100%) rename src/{behaviours => features}/tray/clicking-tray-menu-item-originating-from-extension.test.ts (100%) rename src/{behaviours => features}/tray/extension-adding-tray-items.test.tsx (100%) rename src/{behaviours => features}/tray/multiple-separators-originating-from-extension.test.ts (100%) rename src/{behaviours => features}/welcome/__snapshots__/navigation-using-application-menu.test.ts.snap (100%) rename src/{behaviours => features}/welcome/navigation-using-application-menu.test.ts (100%) diff --git a/src/behaviours/__snapshots__/extension-special-characters-in-page-registrations.test.tsx.snap b/src/features/__snapshots__/extension-special-characters-in-page-registrations.test.tsx.snap similarity index 100% rename from src/behaviours/__snapshots__/extension-special-characters-in-page-registrations.test.tsx.snap rename to src/features/__snapshots__/extension-special-characters-in-page-registrations.test.tsx.snap diff --git a/src/behaviours/__snapshots__/navigate-to-extension-page.test.tsx.snap b/src/features/__snapshots__/navigate-to-extension-page.test.tsx.snap similarity index 100% rename from src/behaviours/__snapshots__/navigate-to-extension-page.test.tsx.snap rename to src/features/__snapshots__/navigate-to-extension-page.test.tsx.snap diff --git a/src/behaviours/__snapshots__/navigating-between-routes.test.tsx.snap b/src/features/__snapshots__/navigating-between-routes.test.tsx.snap similarity index 100% rename from src/behaviours/__snapshots__/navigating-between-routes.test.tsx.snap rename to src/features/__snapshots__/navigating-between-routes.test.tsx.snap diff --git a/src/behaviours/add-cluster/__snapshots__/navigation-using-application-menu.test.tsx.snap b/src/features/add-cluster/__snapshots__/navigation-using-application-menu.test.tsx.snap similarity index 100% rename from src/behaviours/add-cluster/__snapshots__/navigation-using-application-menu.test.tsx.snap rename to src/features/add-cluster/__snapshots__/navigation-using-application-menu.test.tsx.snap diff --git a/src/behaviours/add-cluster/navigation-using-application-menu.test.tsx b/src/features/add-cluster/navigation-using-application-menu.test.tsx similarity index 100% rename from src/behaviours/add-cluster/navigation-using-application-menu.test.tsx rename to src/features/add-cluster/navigation-using-application-menu.test.tsx diff --git a/src/behaviours/application-update/__snapshots__/force-user-to-update-when-too-long-time-since-update-was-downloaded.test.ts.snap b/src/features/application-update/__snapshots__/force-user-to-update-when-too-long-time-since-update-was-downloaded.test.ts.snap similarity index 100% rename from src/behaviours/application-update/__snapshots__/force-user-to-update-when-too-long-time-since-update-was-downloaded.test.ts.snap rename to src/features/application-update/__snapshots__/force-user-to-update-when-too-long-time-since-update-was-downloaded.test.ts.snap diff --git a/src/behaviours/application-update/__snapshots__/installing-update-using-topbar-button.test.tsx.snap b/src/features/application-update/__snapshots__/installing-update-using-topbar-button.test.tsx.snap similarity index 100% rename from src/behaviours/application-update/__snapshots__/installing-update-using-topbar-button.test.tsx.snap rename to src/features/application-update/__snapshots__/installing-update-using-topbar-button.test.tsx.snap diff --git a/src/behaviours/application-update/__snapshots__/installing-update-using-tray.test.ts.snap b/src/features/application-update/__snapshots__/installing-update-using-tray.test.ts.snap similarity index 100% rename from src/behaviours/application-update/__snapshots__/installing-update-using-tray.test.ts.snap rename to src/features/application-update/__snapshots__/installing-update-using-tray.test.ts.snap diff --git a/src/behaviours/application-update/__snapshots__/installing-update.test.ts.snap b/src/features/application-update/__snapshots__/installing-update.test.ts.snap similarity index 100% rename from src/behaviours/application-update/__snapshots__/installing-update.test.ts.snap rename to src/features/application-update/__snapshots__/installing-update.test.ts.snap diff --git a/src/behaviours/application-update/__snapshots__/periodical-checking-of-updates.test.ts.snap b/src/features/application-update/__snapshots__/periodical-checking-of-updates.test.ts.snap similarity index 100% rename from src/behaviours/application-update/__snapshots__/periodical-checking-of-updates.test.ts.snap rename to src/features/application-update/__snapshots__/periodical-checking-of-updates.test.ts.snap diff --git a/src/behaviours/application-update/__snapshots__/selection-of-update-stability.test.ts.snap b/src/features/application-update/__snapshots__/selection-of-update-stability.test.ts.snap similarity index 100% rename from src/behaviours/application-update/__snapshots__/selection-of-update-stability.test.ts.snap rename to src/features/application-update/__snapshots__/selection-of-update-stability.test.ts.snap diff --git a/src/behaviours/application-update/analytics-for-installing-update.test.ts b/src/features/application-update/analytics-for-installing-update.test.ts similarity index 100% rename from src/behaviours/application-update/analytics-for-installing-update.test.ts rename to src/features/application-update/analytics-for-installing-update.test.ts diff --git a/src/behaviours/application-update/downgrading-version-update.test.ts b/src/features/application-update/downgrading-version-update.test.ts similarity index 100% rename from src/behaviours/application-update/downgrading-version-update.test.ts rename to src/features/application-update/downgrading-version-update.test.ts diff --git a/src/behaviours/application-update/force-user-to-update-when-too-long-time-since-update-was-downloaded.test.ts b/src/features/application-update/force-user-to-update-when-too-long-time-since-update-was-downloaded.test.ts similarity index 100% rename from src/behaviours/application-update/force-user-to-update-when-too-long-time-since-update-was-downloaded.test.ts rename to src/features/application-update/force-user-to-update-when-too-long-time-since-update-was-downloaded.test.ts diff --git a/src/behaviours/application-update/installing-update-using-topbar-button.test.tsx b/src/features/application-update/installing-update-using-topbar-button.test.tsx similarity index 100% rename from src/behaviours/application-update/installing-update-using-topbar-button.test.tsx rename to src/features/application-update/installing-update-using-topbar-button.test.tsx diff --git a/src/behaviours/application-update/installing-update-using-tray.test.ts b/src/features/application-update/installing-update-using-tray.test.ts similarity index 100% rename from src/behaviours/application-update/installing-update-using-tray.test.ts rename to src/features/application-update/installing-update-using-tray.test.ts diff --git a/src/behaviours/application-update/installing-update.test.ts b/src/features/application-update/installing-update.test.ts similarity index 100% rename from src/behaviours/application-update/installing-update.test.ts rename to src/features/application-update/installing-update.test.ts diff --git a/src/behaviours/application-update/periodical-checking-of-updates.test.ts b/src/features/application-update/periodical-checking-of-updates.test.ts similarity index 100% rename from src/behaviours/application-update/periodical-checking-of-updates.test.ts rename to src/features/application-update/periodical-checking-of-updates.test.ts diff --git a/src/behaviours/application-update/selection-of-update-stability.test.ts b/src/features/application-update/selection-of-update-stability.test.ts similarity index 100% rename from src/behaviours/application-update/selection-of-update-stability.test.ts rename to src/features/application-update/selection-of-update-stability.test.ts diff --git a/src/behaviours/cluster/__snapshots__/order-of-sidebar-items.test.tsx.snap b/src/features/cluster/__snapshots__/order-of-sidebar-items.test.tsx.snap similarity index 100% rename from src/behaviours/cluster/__snapshots__/order-of-sidebar-items.test.tsx.snap rename to src/features/cluster/__snapshots__/order-of-sidebar-items.test.tsx.snap diff --git a/src/behaviours/cluster/__snapshots__/sidebar-and-tab-navigation-for-core.test.tsx.snap b/src/features/cluster/__snapshots__/sidebar-and-tab-navigation-for-core.test.tsx.snap similarity index 100% rename from src/behaviours/cluster/__snapshots__/sidebar-and-tab-navigation-for-core.test.tsx.snap rename to src/features/cluster/__snapshots__/sidebar-and-tab-navigation-for-core.test.tsx.snap diff --git a/src/behaviours/cluster/__snapshots__/sidebar-and-tab-navigation-for-extensions.test.tsx.snap b/src/features/cluster/__snapshots__/sidebar-and-tab-navigation-for-extensions.test.tsx.snap similarity index 100% rename from src/behaviours/cluster/__snapshots__/sidebar-and-tab-navigation-for-extensions.test.tsx.snap rename to src/features/cluster/__snapshots__/sidebar-and-tab-navigation-for-extensions.test.tsx.snap diff --git a/src/behaviours/cluster/__snapshots__/visibility-of-sidebar-items.test.tsx.snap b/src/features/cluster/__snapshots__/visibility-of-sidebar-items.test.tsx.snap similarity index 100% rename from src/behaviours/cluster/__snapshots__/visibility-of-sidebar-items.test.tsx.snap rename to src/features/cluster/__snapshots__/visibility-of-sidebar-items.test.tsx.snap diff --git a/src/behaviours/cluster/extension-api/__snapshots__/disable-cluster-pages-when-cluster-is-not-relevant.test.tsx.snap b/src/features/cluster/extension-api/__snapshots__/disable-cluster-pages-when-cluster-is-not-relevant.test.tsx.snap similarity index 100% rename from src/behaviours/cluster/extension-api/__snapshots__/disable-cluster-pages-when-cluster-is-not-relevant.test.tsx.snap rename to src/features/cluster/extension-api/__snapshots__/disable-cluster-pages-when-cluster-is-not-relevant.test.tsx.snap diff --git a/src/behaviours/cluster/extension-api/__snapshots__/disable-sidebar-items-when-cluster-is-not-relevant.test.tsx.snap b/src/features/cluster/extension-api/__snapshots__/disable-sidebar-items-when-cluster-is-not-relevant.test.tsx.snap similarity index 100% rename from src/behaviours/cluster/extension-api/__snapshots__/disable-sidebar-items-when-cluster-is-not-relevant.test.tsx.snap rename to src/features/cluster/extension-api/__snapshots__/disable-sidebar-items-when-cluster-is-not-relevant.test.tsx.snap diff --git a/src/behaviours/cluster/extension-api/disable-cluster-pages-when-cluster-is-not-relevant.test.tsx b/src/features/cluster/extension-api/disable-cluster-pages-when-cluster-is-not-relevant.test.tsx similarity index 100% rename from src/behaviours/cluster/extension-api/disable-cluster-pages-when-cluster-is-not-relevant.test.tsx rename to src/features/cluster/extension-api/disable-cluster-pages-when-cluster-is-not-relevant.test.tsx diff --git a/src/behaviours/cluster/extension-api/disable-sidebar-items-when-cluster-is-not-relevant.test.tsx b/src/features/cluster/extension-api/disable-sidebar-items-when-cluster-is-not-relevant.test.tsx similarity index 100% rename from src/behaviours/cluster/extension-api/disable-sidebar-items-when-cluster-is-not-relevant.test.tsx rename to src/features/cluster/extension-api/disable-sidebar-items-when-cluster-is-not-relevant.test.tsx diff --git a/src/behaviours/cluster/extension-api/reactively-disable-cluster-pages.test.tsx b/src/features/cluster/extension-api/reactively-disable-cluster-pages.test.tsx similarity index 100% rename from src/behaviours/cluster/extension-api/reactively-disable-cluster-pages.test.tsx rename to src/features/cluster/extension-api/reactively-disable-cluster-pages.test.tsx diff --git a/src/behaviours/cluster/kube-object-details/extension-api/__snapshots__/disable-kube-object-detail-items-when-cluster-is-not-relevant.test.tsx.snap b/src/features/cluster/kube-object-details/extension-api/__snapshots__/disable-kube-object-detail-items-when-cluster-is-not-relevant.test.tsx.snap similarity index 100% rename from src/behaviours/cluster/kube-object-details/extension-api/__snapshots__/disable-kube-object-detail-items-when-cluster-is-not-relevant.test.tsx.snap rename to src/features/cluster/kube-object-details/extension-api/__snapshots__/disable-kube-object-detail-items-when-cluster-is-not-relevant.test.tsx.snap diff --git a/src/behaviours/cluster/kube-object-details/extension-api/disable-kube-object-detail-items-when-cluster-is-not-relevant.test.tsx b/src/features/cluster/kube-object-details/extension-api/disable-kube-object-detail-items-when-cluster-is-not-relevant.test.tsx similarity index 100% rename from src/behaviours/cluster/kube-object-details/extension-api/disable-kube-object-detail-items-when-cluster-is-not-relevant.test.tsx rename to src/features/cluster/kube-object-details/extension-api/disable-kube-object-detail-items-when-cluster-is-not-relevant.test.tsx diff --git a/src/behaviours/cluster/kube-object-details/extension-api/reactively-hide-kube-object-detail-item.test.tsx b/src/features/cluster/kube-object-details/extension-api/reactively-hide-kube-object-detail-item.test.tsx similarity index 100% rename from src/behaviours/cluster/kube-object-details/extension-api/reactively-hide-kube-object-detail-item.test.tsx rename to src/features/cluster/kube-object-details/extension-api/reactively-hide-kube-object-detail-item.test.tsx diff --git a/src/behaviours/cluster/kube-object-menu/extension-api/__snapshots__/disable-kube-object-menu-items-when-cluster-is-not-relevant.test.tsx.snap b/src/features/cluster/kube-object-menu/extension-api/__snapshots__/disable-kube-object-menu-items-when-cluster-is-not-relevant.test.tsx.snap similarity index 100% rename from src/behaviours/cluster/kube-object-menu/extension-api/__snapshots__/disable-kube-object-menu-items-when-cluster-is-not-relevant.test.tsx.snap rename to src/features/cluster/kube-object-menu/extension-api/__snapshots__/disable-kube-object-menu-items-when-cluster-is-not-relevant.test.tsx.snap diff --git a/src/behaviours/cluster/kube-object-menu/extension-api/disable-kube-object-menu-items-when-cluster-is-not-relevant.test.tsx b/src/features/cluster/kube-object-menu/extension-api/disable-kube-object-menu-items-when-cluster-is-not-relevant.test.tsx similarity index 100% rename from src/behaviours/cluster/kube-object-menu/extension-api/disable-kube-object-menu-items-when-cluster-is-not-relevant.test.tsx rename to src/features/cluster/kube-object-menu/extension-api/disable-kube-object-menu-items-when-cluster-is-not-relevant.test.tsx diff --git a/src/behaviours/cluster/kube-object-menu/extension-api/reactively-hide-kube-object-menu-item.test.tsx b/src/features/cluster/kube-object-menu/extension-api/reactively-hide-kube-object-menu-item.test.tsx similarity index 100% rename from src/behaviours/cluster/kube-object-menu/extension-api/reactively-hide-kube-object-menu-item.test.tsx rename to src/features/cluster/kube-object-menu/extension-api/reactively-hide-kube-object-menu-item.test.tsx diff --git a/src/behaviours/cluster/kube-object-status-icon/__snapshots__/show-status-for-a-kube-object.test.tsx.snap b/src/features/cluster/kube-object-status-icon/__snapshots__/show-status-for-a-kube-object.test.tsx.snap similarity index 100% rename from src/behaviours/cluster/kube-object-status-icon/__snapshots__/show-status-for-a-kube-object.test.tsx.snap rename to src/features/cluster/kube-object-status-icon/__snapshots__/show-status-for-a-kube-object.test.tsx.snap diff --git a/src/behaviours/cluster/kube-object-status-icon/extension-api/__snapshots__/disable-kube-object-statuses-when-cluster-is-not-relevant.test.tsx.snap b/src/features/cluster/kube-object-status-icon/extension-api/__snapshots__/disable-kube-object-statuses-when-cluster-is-not-relevant.test.tsx.snap similarity index 100% rename from src/behaviours/cluster/kube-object-status-icon/extension-api/__snapshots__/disable-kube-object-statuses-when-cluster-is-not-relevant.test.tsx.snap rename to src/features/cluster/kube-object-status-icon/extension-api/__snapshots__/disable-kube-object-statuses-when-cluster-is-not-relevant.test.tsx.snap diff --git a/src/behaviours/cluster/kube-object-status-icon/extension-api/disable-kube-object-statuses-when-cluster-is-not-relevant.test.tsx b/src/features/cluster/kube-object-status-icon/extension-api/disable-kube-object-statuses-when-cluster-is-not-relevant.test.tsx similarity index 100% rename from src/behaviours/cluster/kube-object-status-icon/extension-api/disable-kube-object-statuses-when-cluster-is-not-relevant.test.tsx rename to src/features/cluster/kube-object-status-icon/extension-api/disable-kube-object-statuses-when-cluster-is-not-relevant.test.tsx diff --git a/src/behaviours/cluster/kube-object-status-icon/extension-api/reactively-hide-kube-object-status.test.tsx b/src/features/cluster/kube-object-status-icon/extension-api/reactively-hide-kube-object-status.test.tsx similarity index 100% rename from src/behaviours/cluster/kube-object-status-icon/extension-api/reactively-hide-kube-object-status.test.tsx rename to src/features/cluster/kube-object-status-icon/extension-api/reactively-hide-kube-object-status.test.tsx diff --git a/src/behaviours/cluster/kube-object-status-icon/show-status-for-a-kube-object.test.tsx b/src/features/cluster/kube-object-status-icon/show-status-for-a-kube-object.test.tsx similarity index 100% rename from src/behaviours/cluster/kube-object-status-icon/show-status-for-a-kube-object.test.tsx rename to src/features/cluster/kube-object-status-icon/show-status-for-a-kube-object.test.tsx diff --git a/src/behaviours/cluster/namespaces/__snapshots__/edit-namespace-from-new-tab.test.tsx.snap b/src/features/cluster/namespaces/__snapshots__/edit-namespace-from-new-tab.test.tsx.snap similarity index 100% rename from src/behaviours/cluster/namespaces/__snapshots__/edit-namespace-from-new-tab.test.tsx.snap rename to src/features/cluster/namespaces/__snapshots__/edit-namespace-from-new-tab.test.tsx.snap diff --git a/src/behaviours/cluster/namespaces/__snapshots__/edit-namespace-from-previously-opened-tab.test.tsx.snap b/src/features/cluster/namespaces/__snapshots__/edit-namespace-from-previously-opened-tab.test.tsx.snap similarity index 100% rename from src/behaviours/cluster/namespaces/__snapshots__/edit-namespace-from-previously-opened-tab.test.tsx.snap rename to src/features/cluster/namespaces/__snapshots__/edit-namespace-from-previously-opened-tab.test.tsx.snap diff --git a/src/behaviours/cluster/namespaces/edit-namespace-from-new-tab.test.tsx b/src/features/cluster/namespaces/edit-namespace-from-new-tab.test.tsx similarity index 100% rename from src/behaviours/cluster/namespaces/edit-namespace-from-new-tab.test.tsx rename to src/features/cluster/namespaces/edit-namespace-from-new-tab.test.tsx diff --git a/src/behaviours/cluster/namespaces/edit-namespace-from-previously-opened-tab.test.tsx b/src/features/cluster/namespaces/edit-namespace-from-previously-opened-tab.test.tsx similarity index 100% rename from src/behaviours/cluster/namespaces/edit-namespace-from-previously-opened-tab.test.tsx rename to src/features/cluster/namespaces/edit-namespace-from-previously-opened-tab.test.tsx diff --git a/src/behaviours/cluster/order-of-sidebar-items.test.tsx b/src/features/cluster/order-of-sidebar-items.test.tsx similarity index 100% rename from src/behaviours/cluster/order-of-sidebar-items.test.tsx rename to src/features/cluster/order-of-sidebar-items.test.tsx diff --git a/src/behaviours/cluster/sidebar-and-tab-navigation-for-core.test.tsx b/src/features/cluster/sidebar-and-tab-navigation-for-core.test.tsx similarity index 100% rename from src/behaviours/cluster/sidebar-and-tab-navigation-for-core.test.tsx rename to src/features/cluster/sidebar-and-tab-navigation-for-core.test.tsx diff --git a/src/behaviours/cluster/sidebar-and-tab-navigation-for-extensions.test.tsx b/src/features/cluster/sidebar-and-tab-navigation-for-extensions.test.tsx similarity index 100% rename from src/behaviours/cluster/sidebar-and-tab-navigation-for-extensions.test.tsx rename to src/features/cluster/sidebar-and-tab-navigation-for-extensions.test.tsx diff --git a/src/behaviours/cluster/visibility-of-sidebar-items.test.tsx b/src/features/cluster/visibility-of-sidebar-items.test.tsx similarity index 100% rename from src/behaviours/cluster/visibility-of-sidebar-items.test.tsx rename to src/features/cluster/visibility-of-sidebar-items.test.tsx diff --git a/src/behaviours/cluster/workloads/overview/extension-api/__snapshots__/disable-workloads-overview-details-when-cluster-is-not-relevant.test.tsx.snap b/src/features/cluster/workloads/overview/extension-api/__snapshots__/disable-workloads-overview-details-when-cluster-is-not-relevant.test.tsx.snap similarity index 100% rename from src/behaviours/cluster/workloads/overview/extension-api/__snapshots__/disable-workloads-overview-details-when-cluster-is-not-relevant.test.tsx.snap rename to src/features/cluster/workloads/overview/extension-api/__snapshots__/disable-workloads-overview-details-when-cluster-is-not-relevant.test.tsx.snap diff --git a/src/behaviours/cluster/workloads/overview/extension-api/disable-workloads-overview-details-when-cluster-is-not-relevant.test.tsx b/src/features/cluster/workloads/overview/extension-api/disable-workloads-overview-details-when-cluster-is-not-relevant.test.tsx similarity index 100% rename from src/behaviours/cluster/workloads/overview/extension-api/disable-workloads-overview-details-when-cluster-is-not-relevant.test.tsx rename to src/features/cluster/workloads/overview/extension-api/disable-workloads-overview-details-when-cluster-is-not-relevant.test.tsx diff --git a/src/behaviours/cluster/workloads/overview/extension-api/order-of-workload-overview-details.test.tsx b/src/features/cluster/workloads/overview/extension-api/order-of-workload-overview-details.test.tsx similarity index 100% rename from src/behaviours/cluster/workloads/overview/extension-api/order-of-workload-overview-details.test.tsx rename to src/features/cluster/workloads/overview/extension-api/order-of-workload-overview-details.test.tsx diff --git a/src/behaviours/cluster/workloads/overview/extension-api/reactively-hide-workloads-overview-details-item.test.tsx b/src/features/cluster/workloads/overview/extension-api/reactively-hide-workloads-overview-details-item.test.tsx similarity index 100% rename from src/behaviours/cluster/workloads/overview/extension-api/reactively-hide-workloads-overview-details-item.test.tsx rename to src/features/cluster/workloads/overview/extension-api/reactively-hide-workloads-overview-details-item.test.tsx diff --git a/src/behaviours/command-pallet/__snapshots__/keyboard-shortcuts.test.tsx.snap b/src/features/command-pallet/__snapshots__/keyboard-shortcuts.test.tsx.snap similarity index 100% rename from src/behaviours/command-pallet/__snapshots__/keyboard-shortcuts.test.tsx.snap rename to src/features/command-pallet/__snapshots__/keyboard-shortcuts.test.tsx.snap diff --git a/src/behaviours/command-pallet/keyboard-shortcuts.test.tsx b/src/features/command-pallet/keyboard-shortcuts.test.tsx similarity index 100% rename from src/behaviours/command-pallet/keyboard-shortcuts.test.tsx rename to src/features/command-pallet/keyboard-shortcuts.test.tsx diff --git a/src/behaviours/extension-special-characters-in-page-registrations.test.tsx b/src/features/extension-special-characters-in-page-registrations.test.tsx similarity index 100% rename from src/behaviours/extension-special-characters-in-page-registrations.test.tsx rename to src/features/extension-special-characters-in-page-registrations.test.tsx diff --git a/src/behaviours/extensions/__snapshots__/navigation-using-application-menu.test.ts.snap b/src/features/extensions/__snapshots__/navigation-using-application-menu.test.ts.snap similarity index 100% rename from src/behaviours/extensions/__snapshots__/navigation-using-application-menu.test.ts.snap rename to src/features/extensions/__snapshots__/navigation-using-application-menu.test.ts.snap diff --git a/src/behaviours/extensions/navigation-using-application-menu.test.ts b/src/features/extensions/navigation-using-application-menu.test.ts similarity index 100% rename from src/behaviours/extensions/navigation-using-application-menu.test.ts rename to src/features/extensions/navigation-using-application-menu.test.ts diff --git a/src/behaviours/helm-charts/__snapshots__/add-custom-helm-repository-in-preferences.test.ts.snap b/src/features/helm-charts/__snapshots__/add-custom-helm-repository-in-preferences.test.ts.snap similarity index 100% rename from src/behaviours/helm-charts/__snapshots__/add-custom-helm-repository-in-preferences.test.ts.snap rename to src/features/helm-charts/__snapshots__/add-custom-helm-repository-in-preferences.test.ts.snap diff --git a/src/behaviours/helm-charts/__snapshots__/add-helm-repository-from-list-in-preferences.test.ts.snap b/src/features/helm-charts/__snapshots__/add-helm-repository-from-list-in-preferences.test.ts.snap similarity index 100% rename from src/behaviours/helm-charts/__snapshots__/add-helm-repository-from-list-in-preferences.test.ts.snap rename to src/features/helm-charts/__snapshots__/add-helm-repository-from-list-in-preferences.test.ts.snap diff --git a/src/behaviours/helm-charts/__snapshots__/listing-active-helm-repositories-in-preferences.test.ts.snap b/src/features/helm-charts/__snapshots__/listing-active-helm-repositories-in-preferences.test.ts.snap similarity index 100% rename from src/behaviours/helm-charts/__snapshots__/listing-active-helm-repositories-in-preferences.test.ts.snap rename to src/features/helm-charts/__snapshots__/listing-active-helm-repositories-in-preferences.test.ts.snap diff --git a/src/behaviours/helm-charts/__snapshots__/remove-helm-repository-from-list-of-active-repository-in-preferences.test.ts.snap b/src/features/helm-charts/__snapshots__/remove-helm-repository-from-list-of-active-repository-in-preferences.test.ts.snap similarity index 100% rename from src/behaviours/helm-charts/__snapshots__/remove-helm-repository-from-list-of-active-repository-in-preferences.test.ts.snap rename to src/features/helm-charts/__snapshots__/remove-helm-repository-from-list-of-active-repository-in-preferences.test.ts.snap diff --git a/src/behaviours/helm-charts/add-custom-helm-repository-in-preferences.test.ts b/src/features/helm-charts/add-custom-helm-repository-in-preferences.test.ts similarity index 100% rename from src/behaviours/helm-charts/add-custom-helm-repository-in-preferences.test.ts rename to src/features/helm-charts/add-custom-helm-repository-in-preferences.test.ts diff --git a/src/behaviours/helm-charts/add-helm-repository-from-list-in-preferences.test.ts b/src/features/helm-charts/add-helm-repository-from-list-in-preferences.test.ts similarity index 100% rename from src/behaviours/helm-charts/add-helm-repository-from-list-in-preferences.test.ts rename to src/features/helm-charts/add-helm-repository-from-list-in-preferences.test.ts diff --git a/src/behaviours/helm-charts/installing-chart/__snapshots__/installing-helm-chart-from-new-tab.test.ts.snap b/src/features/helm-charts/installing-chart/__snapshots__/installing-helm-chart-from-new-tab.test.ts.snap similarity index 100% rename from src/behaviours/helm-charts/installing-chart/__snapshots__/installing-helm-chart-from-new-tab.test.ts.snap rename to src/features/helm-charts/installing-chart/__snapshots__/installing-helm-chart-from-new-tab.test.ts.snap diff --git a/src/behaviours/helm-charts/installing-chart/__snapshots__/installing-helm-chart-from-previously-opened-tab.test.ts.snap b/src/features/helm-charts/installing-chart/__snapshots__/installing-helm-chart-from-previously-opened-tab.test.ts.snap similarity index 100% rename from src/behaviours/helm-charts/installing-chart/__snapshots__/installing-helm-chart-from-previously-opened-tab.test.ts.snap rename to src/features/helm-charts/installing-chart/__snapshots__/installing-helm-chart-from-previously-opened-tab.test.ts.snap diff --git a/src/behaviours/helm-charts/installing-chart/__snapshots__/opening-dock-tab-for-installing-helm-chart.test.ts.snap b/src/features/helm-charts/installing-chart/__snapshots__/opening-dock-tab-for-installing-helm-chart.test.ts.snap similarity index 100% rename from src/behaviours/helm-charts/installing-chart/__snapshots__/opening-dock-tab-for-installing-helm-chart.test.ts.snap rename to src/features/helm-charts/installing-chart/__snapshots__/opening-dock-tab-for-installing-helm-chart.test.ts.snap diff --git a/src/behaviours/helm-charts/installing-chart/installing-helm-chart-from-new-tab.test.ts b/src/features/helm-charts/installing-chart/installing-helm-chart-from-new-tab.test.ts similarity index 100% rename from src/behaviours/helm-charts/installing-chart/installing-helm-chart-from-new-tab.test.ts rename to src/features/helm-charts/installing-chart/installing-helm-chart-from-new-tab.test.ts diff --git a/src/behaviours/helm-charts/installing-chart/installing-helm-chart-from-previously-opened-tab.test.ts b/src/features/helm-charts/installing-chart/installing-helm-chart-from-previously-opened-tab.test.ts similarity index 100% rename from src/behaviours/helm-charts/installing-chart/installing-helm-chart-from-previously-opened-tab.test.ts rename to src/features/helm-charts/installing-chart/installing-helm-chart-from-previously-opened-tab.test.ts diff --git a/src/behaviours/helm-charts/installing-chart/opening-dock-tab-for-installing-helm-chart.test.ts b/src/features/helm-charts/installing-chart/opening-dock-tab-for-installing-helm-chart.test.ts similarity index 100% rename from src/behaviours/helm-charts/installing-chart/opening-dock-tab-for-installing-helm-chart.test.ts rename to src/features/helm-charts/installing-chart/opening-dock-tab-for-installing-helm-chart.test.ts diff --git a/src/behaviours/helm-charts/listing-active-helm-repositories-in-preferences.test.ts b/src/features/helm-charts/listing-active-helm-repositories-in-preferences.test.ts similarity index 100% rename from src/behaviours/helm-charts/listing-active-helm-repositories-in-preferences.test.ts rename to src/features/helm-charts/listing-active-helm-repositories-in-preferences.test.ts diff --git a/src/behaviours/helm-charts/remove-helm-repository-from-list-of-active-repository-in-preferences.test.ts b/src/features/helm-charts/remove-helm-repository-from-list-of-active-repository-in-preferences.test.ts similarity index 100% rename from src/behaviours/helm-charts/remove-helm-repository-from-list-of-active-repository-in-preferences.test.ts rename to src/features/helm-charts/remove-helm-repository-from-list-of-active-repository-in-preferences.test.ts diff --git a/src/behaviours/helm-releases/__snapshots__/showing-details-for-helm-release.test.ts.snap b/src/features/helm-releases/__snapshots__/showing-details-for-helm-release.test.ts.snap similarity index 100% rename from src/behaviours/helm-releases/__snapshots__/showing-details-for-helm-release.test.ts.snap rename to src/features/helm-releases/__snapshots__/showing-details-for-helm-release.test.ts.snap diff --git a/src/behaviours/helm-releases/showing-details-for-helm-release.test.ts b/src/features/helm-releases/showing-details-for-helm-release.test.ts similarity index 100% rename from src/behaviours/helm-releases/showing-details-for-helm-release.test.ts rename to src/features/helm-releases/showing-details-for-helm-release.test.ts diff --git a/src/behaviours/navigate-to-extension-page.test.tsx b/src/features/navigate-to-extension-page.test.tsx similarity index 100% rename from src/behaviours/navigate-to-extension-page.test.tsx rename to src/features/navigate-to-extension-page.test.tsx diff --git a/src/behaviours/navigating-between-routes.test.tsx b/src/features/navigating-between-routes.test.tsx similarity index 100% rename from src/behaviours/navigating-between-routes.test.tsx rename to src/features/navigating-between-routes.test.tsx diff --git a/src/behaviours/preferences/__snapshots__/closing-preferences.test.tsx.snap b/src/features/preferences/__snapshots__/closing-preferences.test.tsx.snap similarity index 100% rename from src/behaviours/preferences/__snapshots__/closing-preferences.test.tsx.snap rename to src/features/preferences/__snapshots__/closing-preferences.test.tsx.snap diff --git a/src/behaviours/preferences/__snapshots__/extension-adding-preference-tabs.test.tsx.snap b/src/features/preferences/__snapshots__/extension-adding-preference-tabs.test.tsx.snap similarity index 100% rename from src/behaviours/preferences/__snapshots__/extension-adding-preference-tabs.test.tsx.snap rename to src/features/preferences/__snapshots__/extension-adding-preference-tabs.test.tsx.snap diff --git a/src/behaviours/preferences/__snapshots__/navigation-to-application-preferences.test.ts.snap b/src/features/preferences/__snapshots__/navigation-to-application-preferences.test.ts.snap similarity index 100% rename from src/behaviours/preferences/__snapshots__/navigation-to-application-preferences.test.ts.snap rename to src/features/preferences/__snapshots__/navigation-to-application-preferences.test.ts.snap diff --git a/src/behaviours/preferences/__snapshots__/navigation-to-editor-preferences.test.ts.snap b/src/features/preferences/__snapshots__/navigation-to-editor-preferences.test.ts.snap similarity index 100% rename from src/behaviours/preferences/__snapshots__/navigation-to-editor-preferences.test.ts.snap rename to src/features/preferences/__snapshots__/navigation-to-editor-preferences.test.ts.snap diff --git a/src/behaviours/preferences/__snapshots__/navigation-to-extension-specific-preferences.test.tsx.snap b/src/features/preferences/__snapshots__/navigation-to-extension-specific-preferences.test.tsx.snap similarity index 100% rename from src/behaviours/preferences/__snapshots__/navigation-to-extension-specific-preferences.test.tsx.snap rename to src/features/preferences/__snapshots__/navigation-to-extension-specific-preferences.test.tsx.snap diff --git a/src/behaviours/preferences/__snapshots__/navigation-to-kubernetes-preferences.test.ts.snap b/src/features/preferences/__snapshots__/navigation-to-kubernetes-preferences.test.ts.snap similarity index 100% rename from src/behaviours/preferences/__snapshots__/navigation-to-kubernetes-preferences.test.ts.snap rename to src/features/preferences/__snapshots__/navigation-to-kubernetes-preferences.test.ts.snap diff --git a/src/behaviours/preferences/__snapshots__/navigation-to-proxy-preferences.test.ts.snap b/src/features/preferences/__snapshots__/navigation-to-proxy-preferences.test.ts.snap similarity index 100% rename from src/behaviours/preferences/__snapshots__/navigation-to-proxy-preferences.test.ts.snap rename to src/features/preferences/__snapshots__/navigation-to-proxy-preferences.test.ts.snap diff --git a/src/behaviours/preferences/__snapshots__/navigation-to-telemetry-preferences.test.tsx.snap b/src/features/preferences/__snapshots__/navigation-to-telemetry-preferences.test.tsx.snap similarity index 100% rename from src/behaviours/preferences/__snapshots__/navigation-to-telemetry-preferences.test.tsx.snap rename to src/features/preferences/__snapshots__/navigation-to-telemetry-preferences.test.tsx.snap diff --git a/src/behaviours/preferences/__snapshots__/navigation-to-terminal-preferences.test.ts.snap b/src/features/preferences/__snapshots__/navigation-to-terminal-preferences.test.ts.snap similarity index 100% rename from src/behaviours/preferences/__snapshots__/navigation-to-terminal-preferences.test.ts.snap rename to src/features/preferences/__snapshots__/navigation-to-terminal-preferences.test.ts.snap diff --git a/src/behaviours/preferences/__snapshots__/navigation-using-application-menu.test.ts.snap b/src/features/preferences/__snapshots__/navigation-using-application-menu.test.ts.snap similarity index 100% rename from src/behaviours/preferences/__snapshots__/navigation-using-application-menu.test.ts.snap rename to src/features/preferences/__snapshots__/navigation-using-application-menu.test.ts.snap diff --git a/src/behaviours/preferences/__snapshots__/navigation-using-tray.test.ts.snap b/src/features/preferences/__snapshots__/navigation-using-tray.test.ts.snap similarity index 100% rename from src/behaviours/preferences/__snapshots__/navigation-using-tray.test.ts.snap rename to src/features/preferences/__snapshots__/navigation-using-tray.test.ts.snap diff --git a/src/behaviours/preferences/closing-preferences.test.tsx b/src/features/preferences/closing-preferences.test.tsx similarity index 100% rename from src/behaviours/preferences/closing-preferences.test.tsx rename to src/features/preferences/closing-preferences.test.tsx diff --git a/src/behaviours/preferences/extension-adding-preference-tabs.test.tsx b/src/features/preferences/extension-adding-preference-tabs.test.tsx similarity index 100% rename from src/behaviours/preferences/extension-adding-preference-tabs.test.tsx rename to src/features/preferences/extension-adding-preference-tabs.test.tsx diff --git a/src/behaviours/preferences/navigation-to-application-preferences.test.ts b/src/features/preferences/navigation-to-application-preferences.test.ts similarity index 100% rename from src/behaviours/preferences/navigation-to-application-preferences.test.ts rename to src/features/preferences/navigation-to-application-preferences.test.ts diff --git a/src/behaviours/preferences/navigation-to-editor-preferences.test.ts b/src/features/preferences/navigation-to-editor-preferences.test.ts similarity index 100% rename from src/behaviours/preferences/navigation-to-editor-preferences.test.ts rename to src/features/preferences/navigation-to-editor-preferences.test.ts diff --git a/src/behaviours/preferences/navigation-to-extension-specific-preferences.test.tsx b/src/features/preferences/navigation-to-extension-specific-preferences.test.tsx similarity index 100% rename from src/behaviours/preferences/navigation-to-extension-specific-preferences.test.tsx rename to src/features/preferences/navigation-to-extension-specific-preferences.test.tsx diff --git a/src/behaviours/preferences/navigation-to-kubernetes-preferences.test.ts b/src/features/preferences/navigation-to-kubernetes-preferences.test.ts similarity index 100% rename from src/behaviours/preferences/navigation-to-kubernetes-preferences.test.ts rename to src/features/preferences/navigation-to-kubernetes-preferences.test.ts diff --git a/src/behaviours/preferences/navigation-to-proxy-preferences.test.ts b/src/features/preferences/navigation-to-proxy-preferences.test.ts similarity index 100% rename from src/behaviours/preferences/navigation-to-proxy-preferences.test.ts rename to src/features/preferences/navigation-to-proxy-preferences.test.ts diff --git a/src/behaviours/preferences/navigation-to-telemetry-preferences.test.tsx b/src/features/preferences/navigation-to-telemetry-preferences.test.tsx similarity index 100% rename from src/behaviours/preferences/navigation-to-telemetry-preferences.test.tsx rename to src/features/preferences/navigation-to-telemetry-preferences.test.tsx diff --git a/src/behaviours/preferences/navigation-to-terminal-preferences.test.ts b/src/features/preferences/navigation-to-terminal-preferences.test.ts similarity index 100% rename from src/behaviours/preferences/navigation-to-terminal-preferences.test.ts rename to src/features/preferences/navigation-to-terminal-preferences.test.ts diff --git a/src/behaviours/preferences/navigation-using-application-menu.test.ts b/src/features/preferences/navigation-using-application-menu.test.ts similarity index 100% rename from src/behaviours/preferences/navigation-using-application-menu.test.ts rename to src/features/preferences/navigation-using-application-menu.test.ts diff --git a/src/behaviours/preferences/navigation-using-tray.test.ts b/src/features/preferences/navigation-using-tray.test.ts similarity index 100% rename from src/behaviours/preferences/navigation-using-tray.test.ts rename to src/features/preferences/navigation-using-tray.test.ts diff --git a/src/behaviours/quitting-and-restarting-the-app/opening-application-window-using-tray.test.ts b/src/features/quitting-and-restarting-the-app/opening-application-window-using-tray.test.ts similarity index 100% rename from src/behaviours/quitting-and-restarting-the-app/opening-application-window-using-tray.test.ts rename to src/features/quitting-and-restarting-the-app/opening-application-window-using-tray.test.ts diff --git a/src/behaviours/quitting-and-restarting-the-app/quitting-the-app-using-application-menu.test.ts b/src/features/quitting-and-restarting-the-app/quitting-the-app-using-application-menu.test.ts similarity index 100% rename from src/behaviours/quitting-and-restarting-the-app/quitting-the-app-using-application-menu.test.ts rename to src/features/quitting-and-restarting-the-app/quitting-the-app-using-application-menu.test.ts diff --git a/src/behaviours/resolve-system-proxy/resolve-system-proxy.test.ts b/src/features/resolve-system-proxy/resolve-system-proxy.test.ts similarity index 100% rename from src/behaviours/resolve-system-proxy/resolve-system-proxy.test.ts rename to src/features/resolve-system-proxy/resolve-system-proxy.test.ts diff --git a/src/behaviours/routes/extension-api/reactively-disable-global-pages.test.tsx b/src/features/routes/extension-api/reactively-disable-global-pages.test.tsx similarity index 100% rename from src/behaviours/routes/extension-api/reactively-disable-global-pages.test.tsx rename to src/features/routes/extension-api/reactively-disable-global-pages.test.tsx diff --git a/src/behaviours/status-bar/__snapshots__/status-bar-items-originating-from-extensions.test.tsx.snap b/src/features/status-bar/__snapshots__/status-bar-items-originating-from-extensions.test.tsx.snap similarity index 100% rename from src/behaviours/status-bar/__snapshots__/status-bar-items-originating-from-extensions.test.tsx.snap rename to src/features/status-bar/__snapshots__/status-bar-items-originating-from-extensions.test.tsx.snap diff --git a/src/behaviours/status-bar/status-bar-items-originating-from-extensions.test.tsx b/src/features/status-bar/status-bar-items-originating-from-extensions.test.tsx similarity index 100% rename from src/behaviours/status-bar/status-bar-items-originating-from-extensions.test.tsx rename to src/features/status-bar/status-bar-items-originating-from-extensions.test.tsx diff --git a/src/behaviours/tray/clicking-tray-menu-item-originating-from-extension.test.ts b/src/features/tray/clicking-tray-menu-item-originating-from-extension.test.ts similarity index 100% rename from src/behaviours/tray/clicking-tray-menu-item-originating-from-extension.test.ts rename to src/features/tray/clicking-tray-menu-item-originating-from-extension.test.ts diff --git a/src/behaviours/tray/extension-adding-tray-items.test.tsx b/src/features/tray/extension-adding-tray-items.test.tsx similarity index 100% rename from src/behaviours/tray/extension-adding-tray-items.test.tsx rename to src/features/tray/extension-adding-tray-items.test.tsx diff --git a/src/behaviours/tray/multiple-separators-originating-from-extension.test.ts b/src/features/tray/multiple-separators-originating-from-extension.test.ts similarity index 100% rename from src/behaviours/tray/multiple-separators-originating-from-extension.test.ts rename to src/features/tray/multiple-separators-originating-from-extension.test.ts diff --git a/src/behaviours/welcome/__snapshots__/navigation-using-application-menu.test.ts.snap b/src/features/welcome/__snapshots__/navigation-using-application-menu.test.ts.snap similarity index 100% rename from src/behaviours/welcome/__snapshots__/navigation-using-application-menu.test.ts.snap rename to src/features/welcome/__snapshots__/navigation-using-application-menu.test.ts.snap diff --git a/src/behaviours/welcome/navigation-using-application-menu.test.ts b/src/features/welcome/navigation-using-application-menu.test.ts similarity index 100% rename from src/behaviours/welcome/navigation-using-application-menu.test.ts rename to src/features/welcome/navigation-using-application-menu.test.ts From 63d5a343793a1ee8e5652bd8c46b873200077663 Mon Sep 17 00:00:00 2001 From: Janne Savolainen Date: Tue, 16 Aug 2022 15:55:42 +0300 Subject: [PATCH 03/10] Replace static application window with ability to create many (#5979) * Replace static application window with ability to create as many as you wish Signed-off-by: Janne Savolainen * Adapt tests for replacing static application window with ability to create as many as you wish and separate starting of main and window in behaviours Signed-off-by: Janne Savolainen * Make first render of application smaller in test that proves to be hard for CI Signed-off-by: Janne Savolainen * Remove redundant code Signed-off-by: Janne Savolainen * Simplify code Signed-off-by: Janne Savolainen Signed-off-by: Janne Savolainen --- src/common/app-paths/app-paths.test.ts | 33 +- ...er-store.global-override-for-injectable.ts | 17 + src/common/utils/channel/channel.test.ts | 128 +- src/common/utils/sync-box/sync-box.test.ts | 73 +- .../analytics-for-installing-update.test.ts | 16 +- .../downgrading-version-update.test.ts | 4 +- ...g-time-since-update-was-downloaded.test.ts | 19 +- ...alling-update-using-topbar-button.test.tsx | 15 +- .../installing-update-using-tray.test.ts | 89 +- .../installing-update.test.ts | 28 +- .../periodical-checking-of-updates.test.ts | 18 +- .../selection-of-update-stability.test.ts | 63 +- ...ages-when-cluster-is-not-relevant.test.tsx | 16 +- ...tems-when-cluster-is-not-relevant.test.tsx | 11 +- .../reactively-disable-cluster-pages.test.tsx | 18 +- ...tems-when-cluster-is-not-relevant.test.tsx | 30 +- ...vely-hide-kube-object-detail-item.test.tsx | 27 +- ...tems-when-cluster-is-not-relevant.test.tsx | 22 +- ...tively-hide-kube-object-menu-item.test.tsx | 19 +- ...uses-when-cluster-is-not-relevant.test.tsx | 22 +- ...eactively-hide-kube-object-status.test.tsx | 22 +- .../show-status-for-a-kube-object.test.tsx | 34 +- .../edit-namespace-from-new-tab.test.tsx | 32 +- ...espace-from-previously-opened-tab.test.tsx | 58 +- .../cluster/order-of-sidebar-items.test.tsx | 12 +- ...debar-and-tab-navigation-for-core.test.tsx | 68 +- ...and-tab-navigation-for-extensions.test.tsx | 72 +- .../visibility-of-sidebar-items.test.tsx | 18 +- ...ails-when-cluster-is-not-relevant.test.tsx | 23 +- ...rder-of-workload-overview-details.test.tsx | 24 +- ...e-workloads-overview-details-item.test.tsx | 13 +- .../keyboard-shortcuts.test.tsx | 18 +- ...-characters-in-page-registrations.test.tsx | 43 +- .../navigation-using-application-menu.test.ts | 12 +- ...tom-helm-repository-in-preferences.test.ts | 42 +- ...epository-from-list-in-preferences.test.ts | 48 +- ...lling-helm-chart-from-new-tab.test.ts.snap | 482 +++++- ...installing-helm-chart-from-new-tab.test.ts | 1423 +++++++++-------- ...m-chart-from-previously-opened-tab.test.ts | 85 +- ...dock-tab-for-installing-helm-chart.test.ts | 29 +- ...e-helm-repositories-in-preferences.test.ts | 22 +- ...f-active-repository-in-preferences.test.ts | 24 +- .../showing-details-for-helm-release.test.ts | 22 +- .../navigate-to-extension-page.test.tsx | 117 +- .../navigating-between-routes.test.tsx | 67 +- .../preferences/closing-preferences.test.tsx | 60 +- .../extension-adding-preference-tabs.test.tsx | 7 +- ...igation-to-application-preferences.test.ts | 12 +- .../navigation-to-editor-preferences.test.ts | 2 +- ...to-extension-specific-preferences.test.tsx | 391 +++-- ...vigation-to-kubernetes-preferences.test.ts | 20 +- .../navigation-to-proxy-preferences.test.ts | 2 +- ...vigation-to-telemetry-preferences.test.tsx | 93 +- ...navigation-to-terminal-preferences.test.ts | 2 +- ...ning-application-window-using-tray.test.ts | 128 +- ...ing-the-app-using-application-menu.test.ts | 37 +- .../resolve-system-proxy.test.ts | 14 +- .../reactively-disable-global-pages.test.tsx | 9 +- ...items-originating-from-extensions.test.tsx | 121 +- ...nu-item-originating-from-extension.test.ts | 72 +- .../tray/extension-adding-tray-items.test.tsx | 7 +- ...arators-originating-from-extension.test.ts | 41 +- src/main/getDiForUnitTesting.ts | 21 - src/main/index.ts | 5 +- .../menu/application-menu-items.injectable.ts | 6 +- .../application-window-injection-token.ts | 10 + .../application-window.injectable.ts | 53 - .../create-application-window.injectable.ts | 68 + ...n-window.global-override-for-injectable.ts | 15 + .../create-electron-window.injectable.ts | 9 +- ...ate-first-application-window.injectable.ts | 19 + .../create-lens-window.injectable.ts | 30 +- ...t-current-application-window.injectable.ts | 16 + .../lens-window-injection-token.ts | 26 - ...l-in-electron-browser-window.injectable.ts | 3 +- .../get-visible-windows.injectable.ts | 4 +- .../close-all-windows.injectable.ts | 4 +- .../navigate-for-extension.injectable.ts | 9 +- .../lens-window/navigate.injectable.ts | 9 +- .../reload-all-windows.injectable.ts | 24 - ...d-current-application-window.injectable.ts | 38 + .../lens-window/reload-window.injectable.ts | 33 - .../show-application-window.injectable.ts | 8 +- .../splash-window/splash-window.injectable.ts | 3 - .../start-main-application.injectable.ts | 14 +- .../utils/channel/message-to-channel.test.ts | 65 +- .../__tests__/preferences-navigation.test.tsx | 28 +- .../__tests__/delete-cluster-dialog.test.tsx | 117 +- src/renderer/components/dialog/dialog.tsx | 5 +- .../components/status-bar/status-bar.test.tsx | 61 +- .../test-utils/get-application-builder.tsx | 683 +++++--- .../test-utils/get-extension-fake.ts | 19 +- .../test-utils/get-renderer-extension-fake.ts | 28 - src/renderer/getDiForUnitTesting.tsx | 8 - ...e-stores.global-override-for-injectable.ts | 11 + .../stores-apis-can-be-created.injectable.ts | 10 +- .../channel-fakes/override-channels.ts | 4 +- .../override-messaging-from-main-to-window.ts | 64 +- 98 files changed, 3283 insertions(+), 2743 deletions(-) create mode 100644 src/common/cluster-store/cluster-store.global-override-for-injectable.ts create mode 100644 src/main/start-main-application/lens-window/application-window/application-window-injection-token.ts delete mode 100644 src/main/start-main-application/lens-window/application-window/application-window.injectable.ts create mode 100644 src/main/start-main-application/lens-window/application-window/create-application-window.injectable.ts create mode 100644 src/main/start-main-application/lens-window/application-window/create-electron-window.global-override-for-injectable.ts create mode 100644 src/main/start-main-application/lens-window/application-window/create-first-application-window.injectable.ts create mode 100644 src/main/start-main-application/lens-window/application-window/get-current-application-window.injectable.ts delete mode 100644 src/main/start-main-application/lens-window/application-window/lens-window-injection-token.ts delete mode 100644 src/main/start-main-application/lens-window/reload-all-windows.injectable.ts create mode 100644 src/main/start-main-application/lens-window/reload-current-application-window.injectable.ts delete mode 100644 src/main/start-main-application/lens-window/reload-window.injectable.ts delete mode 100644 src/renderer/components/test-utils/get-renderer-extension-fake.ts create mode 100644 src/renderer/kube-watch-api/subscribe-stores.global-override-for-injectable.ts diff --git a/src/common/app-paths/app-paths.test.ts b/src/common/app-paths/app-paths.test.ts index 5793295e0e..b5ec33059c 100644 --- a/src/common/app-paths/app-paths.test.ts +++ b/src/common/app-paths/app-paths.test.ts @@ -14,15 +14,10 @@ import { getApplicationBuilder } from "../../renderer/components/test-utils/get- import type { DiContainer } from "@ogre-tools/injectable"; describe("app-paths", () => { - let applicationBuilder: ApplicationBuilder; - let rendererDi: DiContainer; - let mainDi: DiContainer; + let builder: ApplicationBuilder; beforeEach(() => { - applicationBuilder = getApplicationBuilder(); - - rendererDi = applicationBuilder.dis.rendererDi; - mainDi = applicationBuilder.dis.mainDi; + builder = getApplicationBuilder(); const defaultAppPathsStub: AppPaths = { appData: "some-app-data", @@ -43,7 +38,7 @@ describe("app-paths", () => { userData: "some-irrelevant-user-data", }; - applicationBuilder.beforeApplicationStart(({ mainDi }) => { + builder.beforeApplicationStart((mainDi) => { mainDi.override( getElectronAppPathInjectable, () => @@ -64,12 +59,18 @@ describe("app-paths", () => { }); describe("normally", () => { + let windowDi: DiContainer; + let mainDi: DiContainer; + beforeEach(async () => { - await applicationBuilder.render(); + await builder.render(); + + windowDi = builder.applicationWindow.only.di; + mainDi = builder.mainDi; }); it("given in renderer, when injecting app paths, returns application specific app paths", () => { - const actual = rendererDi.inject(appPathsInjectionToken); + const actual = windowDi.inject(appPathsInjectionToken); expect(actual).toEqual({ appData: "some-app-data", @@ -116,19 +117,23 @@ describe("app-paths", () => { }); describe("when running integration tests", () => { + let windowDi: DiContainer; + beforeEach(async () => { - applicationBuilder.beforeApplicationStart(({ mainDi }) => { + builder.beforeApplicationStart((mainDi) => { mainDi.override( directoryForIntegrationTestingInjectable, () => "some-integration-testing-app-data", ); }); - await applicationBuilder.render(); + await builder.render(); + + windowDi = builder.applicationWindow.only.di; }); it("given in renderer, when injecting path for app data, has integration specific app data path", () => { - const { appData, userData } = rendererDi.inject(appPathsInjectionToken); + const { appData, userData } = windowDi.inject(appPathsInjectionToken); expect({ appData, userData }).toEqual({ appData: "some-integration-testing-app-data", @@ -137,7 +142,7 @@ describe("app-paths", () => { }); it("given in main, when injecting path for app data, has integration specific app data path", () => { - const { appData, userData } = rendererDi.inject(appPathsInjectionToken); + const { appData, userData } = windowDi.inject(appPathsInjectionToken); expect({ appData, userData }).toEqual({ appData: "some-integration-testing-app-data", diff --git a/src/common/cluster-store/cluster-store.global-override-for-injectable.ts b/src/common/cluster-store/cluster-store.global-override-for-injectable.ts new file mode 100644 index 0000000000..32a1ee62a1 --- /dev/null +++ b/src/common/cluster-store/cluster-store.global-override-for-injectable.ts @@ -0,0 +1,17 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getGlobalOverride } from "../test-utils/get-global-override"; +import clusterStoreInjectable from "./cluster-store.injectable"; +import type { Cluster } from "../cluster/cluster"; +import type { ClusterStore } from "./cluster-store"; + +export default getGlobalOverride( + clusterStoreInjectable, + () => + ({ + provideInitialFromMain: () => {}, + getById: (id) => (void id, {}) as Cluster, + } as ClusterStore), +); diff --git a/src/common/utils/channel/channel.test.ts b/src/common/utils/channel/channel.test.ts index 84c1366f35..a3d6a805e2 100644 --- a/src/common/utils/channel/channel.test.ts +++ b/src/common/utils/channel/channel.test.ts @@ -4,13 +4,11 @@ */ import type { DiContainer } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable"; -import type { LensWindow } from "../../../main/start-main-application/lens-window/application-window/lens-window-injection-token"; -import { lensWindowInjectionToken } from "../../../main/start-main-application/lens-window/application-window/lens-window-injection-token"; import type { MessageToChannel } from "./message-to-channel-injection-token"; import { messageToChannelInjectionToken } from "./message-to-channel-injection-token"; +import type { ApplicationBuilder } from "../../../renderer/components/test-utils/get-application-builder"; import { getApplicationBuilder } from "../../../renderer/components/test-utils/get-application-builder"; -import createLensWindowInjectable from "../../../main/start-main-application/lens-window/application-window/create-lens-window.injectable"; -import closeAllWindowsInjectable from "../../../main/start-main-application/lens-window/hide-all-windows/close-all-windows.injectable"; +import type { LensWindow } from "../../../main/start-main-application/lens-window/application-window/create-lens-window.injectable"; import { messageChannelListenerInjectionToken } from "./message-channel-listener-injection-token"; import type { MessageChannel } from "./message-channel-injection-token"; import type { RequestFromChannel } from "./request-from-channel-injection-token"; @@ -30,12 +28,10 @@ describe("channel", () => { let messageListenerInWindowMock: jest.Mock; let mainDi: DiContainer; let messageToChannel: MessageToChannel; + let builder: ApplicationBuilder; beforeEach(async () => { - const applicationBuilder = getApplicationBuilder(); - - mainDi = applicationBuilder.dis.mainDi; - const rendererDi = applicationBuilder.dis.rendererDi; + builder = getApplicationBuilder(); messageListenerInWindowMock = jest.fn(); @@ -44,37 +40,34 @@ describe("channel", () => { instantiate: (di) => ({ channel: di.inject(testMessageChannelInjectable), - handler: messageListenerInWindowMock, }), injectionToken: messageChannelListenerInjectionToken, }); - rendererDi.register(testChannelListenerInTestWindowInjectable); + builder.beforeApplicationStart((mainDi) => { + mainDi.register(testMessageChannelInjectable); + }); - // Notice how test channel has presence in both DIs, being from common - mainDi.register(testMessageChannelInjectable); - rendererDi.register(testMessageChannelInjectable); + builder.beforeWindowStart((windowDi) => { + windowDi.register(testChannelListenerInTestWindowInjectable); + windowDi.register(testMessageChannelInjectable); + }); + + mainDi = builder.mainDi; + + await builder.startHidden(); testMessageChannel = mainDi.inject(testMessageChannelInjectable); - - messageToChannel = mainDi.inject( - messageToChannelInjectionToken, - ); - - await applicationBuilder.render(); - - const closeAllWindows = mainDi.inject(closeAllWindowsInjectable); - - closeAllWindows(); + messageToChannel = mainDi.inject(messageToChannelInjectionToken); }); describe("given window is started", () => { let someWindowFake: LensWindow; beforeEach(async () => { - someWindowFake = createTestWindow(mainDi, "some-window"); + someWindowFake = builder.applicationWindow.create("some-window"); await someWindowFake.start(); }); @@ -95,8 +88,8 @@ describe("channel", () => { }); it("given multiple started windows, when sending message, triggers listeners in all windows", async () => { - const someWindowFake = createTestWindow(mainDi, "some-window"); - const someOtherWindowFake = createTestWindow(mainDi, "some-other-window"); + const someWindowFake = builder.applicationWindow.create("some-window"); + const someOtherWindowFake = builder.applicationWindow.create("some-other-window"); await someWindowFake.start(); await someOtherWindowFake.start(); @@ -113,16 +106,11 @@ describe("channel", () => { describe("messaging from renderer to main, given listener for channel in a main and application has started", () => { let testMessageChannel: TestMessageChannel; let messageListenerInMainMock: jest.Mock; - let rendererDi: DiContainer; - let mainDi: DiContainer; let messageToChannel: MessageToChannel; beforeEach(async () => { const applicationBuilder = getApplicationBuilder(); - mainDi = applicationBuilder.dis.mainDi; - rendererDi = applicationBuilder.dis.rendererDi; - messageListenerInMainMock = jest.fn(); const testChannelListenerInMainInjectable = getInjectable({ @@ -137,19 +125,21 @@ describe("channel", () => { injectionToken: messageChannelListenerInjectionToken, }); - mainDi.register(testChannelListenerInMainInjectable); + applicationBuilder.beforeApplicationStart((mainDi) => { + mainDi.register(testChannelListenerInMainInjectable); + mainDi.register(testMessageChannelInjectable); + }); - // Notice how test channel has presence in both DIs, being from common - mainDi.register(testMessageChannelInjectable); - rendererDi.register(testMessageChannelInjectable); - - testMessageChannel = rendererDi.inject(testMessageChannelInjectable); - - messageToChannel = rendererDi.inject( - messageToChannelInjectionToken, - ); + applicationBuilder.beforeWindowStart((windowDi) => { + windowDi.register(testMessageChannelInjectable); + }); await applicationBuilder.render(); + + const windowDi = applicationBuilder.applicationWindow.only.di; + + testMessageChannel = windowDi.inject(testMessageChannelInjectable); + messageToChannel = windowDi.inject(messageToChannelInjectionToken); }); it("when sending message, triggers listener in main", () => { @@ -162,16 +152,11 @@ describe("channel", () => { describe("requesting from main in renderer, given listener for channel in a main and application has started", () => { let testRequestChannel: TestRequestChannel; let requestListenerInMainMock: AsyncFnMock<(arg: string) => string>; - let rendererDi: DiContainer; - let mainDi: DiContainer; let requestFromChannel: RequestFromChannel; beforeEach(async () => { const applicationBuilder = getApplicationBuilder(); - mainDi = applicationBuilder.dis.mainDi; - rendererDi = applicationBuilder.dis.rendererDi; - requestListenerInMainMock = asyncFn(); const testChannelListenerInMainInjectable = getInjectable({ @@ -186,19 +171,24 @@ describe("channel", () => { injectionToken: requestChannelListenerInjectionToken, }); - mainDi.register(testChannelListenerInMainInjectable); + applicationBuilder.beforeApplicationStart((mainDi) => { + mainDi.register(testChannelListenerInMainInjectable); + mainDi.register(testRequestChannelInjectable); + }); - // Notice how test channel has presence in both DIs, being from common - mainDi.register(testRequestChannelInjectable); - rendererDi.register(testRequestChannelInjectable); - - testRequestChannel = rendererDi.inject(testRequestChannelInjectable); - - requestFromChannel = rendererDi.inject( - requestFromChannelInjectionToken, - ); + applicationBuilder.beforeWindowStart((windowDi) => { + windowDi.register(testRequestChannelInjectable); + }); await applicationBuilder.render(); + + const windowDi = applicationBuilder.applicationWindow.only.di; + + testRequestChannel = windowDi.inject(testRequestChannelInjectable); + + requestFromChannel = windowDi.inject( + requestFromChannelInjectionToken, + ); }); describe("when requesting from channel", () => { @@ -245,29 +235,3 @@ const testRequestChannelInjectable = getInjectable({ }), }); -const createTestWindow = (di: DiContainer, id: string) => { - const testWindowInjectable = getInjectable({ - id, - - instantiate: (di) => { - const createLensWindow = di.inject(createLensWindowInjectable); - - return createLensWindow({ - id, - title: "Some test window", - defaultHeight: 42, - defaultWidth: 42, - getContentSource: () => ({ url: "some-content-url" }), - resizable: true, - windowFrameUtilitiesAreShown: false, - centered: false, - }); - }, - - injectionToken: lensWindowInjectionToken, - }); - - di.register(testWindowInjectable); - - return di.inject(testWindowInjectable); -}; diff --git a/src/common/utils/sync-box/sync-box.test.ts b/src/common/utils/sync-box/sync-box.test.ts index 2dccbd87a5..cfb8954802 100644 --- a/src/common/utils/sync-box/sync-box.test.ts +++ b/src/common/utils/sync-box/sync-box.test.ts @@ -2,13 +2,14 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ +import type { DiContainer } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable"; import { observe, runInAction } from "mobx"; import type { ApplicationBuilder } from "../../../renderer/components/test-utils/get-application-builder"; import { getApplicationBuilder } from "../../../renderer/components/test-utils/get-application-builder"; import createSyncBoxInjectable from "./create-sync-box.injectable"; -import { flushPromises } from "../../test-utils/flush-promises"; import type { SyncBox } from "./sync-box-injection-token"; +import { syncBoxInjectionToken } from "./sync-box-injection-token"; describe("sync-box", () => { let applicationBuilder: ApplicationBuilder; @@ -16,19 +17,23 @@ describe("sync-box", () => { beforeEach(() => { applicationBuilder = getApplicationBuilder(); - applicationBuilder.dis.mainDi.register(someInjectable); - applicationBuilder.dis.rendererDi.register(someInjectable); + applicationBuilder.beforeApplicationStart(mainDi => { + mainDi.register(someInjectable); + }); + + applicationBuilder.beforeWindowStart((windowDi) => { + windowDi.register(someInjectable); + }); }); - // TODO: Separate starting for main application and starting of window in application builder - xdescribe("given application is started, when value is set in main", () => { + describe("given application is started, when value is set in main", () => { let valueInMain: string; let syncBoxInMain: SyncBox; beforeEach(async () => { - syncBoxInMain = applicationBuilder.dis.mainDi.inject(someInjectable); + await applicationBuilder.startHidden(); - // await applicationBuilder.start(); + syncBoxInMain = applicationBuilder.mainDi.inject(someInjectable); observe(syncBoxInMain.value, ({ newValue }) => { valueInMain = newValue as string; @@ -46,48 +51,28 @@ describe("sync-box", () => { describe("when window starts", () => { let valueInRenderer: string; let syncBoxInRenderer: SyncBox; + let rendererDi: DiContainer; - beforeEach(() => { - // applicationBuilder.renderWindow() + beforeEach(async () => { + const applicationWindow = + applicationBuilder.applicationWindow.create("some-window-id"); - syncBoxInRenderer = applicationBuilder.dis.rendererDi.inject(someInjectable); + await applicationWindow.start(); + + rendererDi = applicationWindow.di; + + syncBoxInRenderer = rendererDi.inject(someInjectable); observe(syncBoxInRenderer.value, ({ newValue }) => { valueInRenderer = newValue as string; }, true); }); - it("does not have the initial value yet", () => { - expect(valueInRenderer).toBe(undefined); + it("has the value from main", () => { + expect(valueInRenderer).toBe("some-value-from-main"); }); - describe("when getting initial value resolves", () => { - beforeEach(async () => { - await flushPromises(); - }); - - it("has value in renderer", () => { - expect(valueInRenderer).toBe("some-value-from-main"); - }); - - describe("when value is set from renderer", () => { - beforeEach(() => { - runInAction(() => { - syncBoxInRenderer.set("some-value-from-renderer"); - }); - }); - - it("has value in main", () => { - expect(valueInMain).toBe("some-value-from-renderer"); - }); - - it("has value in renderer", () => { - expect(valueInRenderer).toBe("some-value-from-renderer"); - }); - }); - }); - - describe("when value is set from renderer before getting initial value from main resolves", () => { + describe("when value is set from renderer", () => { beforeEach(() => { runInAction(() => { syncBoxInRenderer.set("some-value-from-renderer"); @@ -112,11 +97,13 @@ describe("sync-box", () => { let syncBoxInRenderer: SyncBox; beforeEach(async () => { - syncBoxInMain = applicationBuilder.dis.mainDi.inject(someInjectable); - syncBoxInRenderer = applicationBuilder.dis.rendererDi.inject(someInjectable); - await applicationBuilder.render(); + const applicationWindow = applicationBuilder.applicationWindow.only; + + syncBoxInMain = applicationBuilder.mainDi.inject(someInjectable); + syncBoxInRenderer = applicationWindow.di.inject(someInjectable); + observe(syncBoxInRenderer.value, ({ newValue }) => { valueInRenderer = newValue as string; }, true); @@ -176,4 +163,6 @@ const someInjectable = getInjectable({ return createSyncBox("some-sync-box", "some-initial-value"); }, + + injectionToken: syncBoxInjectionToken, }); diff --git a/src/features/application-update/analytics-for-installing-update.test.ts b/src/features/application-update/analytics-for-installing-update.test.ts index b72946f80d..7f451b0076 100644 --- a/src/features/application-update/analytics-for-installing-update.test.ts +++ b/src/features/application-update/analytics-for-installing-update.test.ts @@ -21,7 +21,7 @@ import periodicalCheckForUpdatesInjectable from "../../main/application-update/p import { advanceFakeTime, useFakeTime } from "../../common/test-utils/use-fake-time"; describe("analytics for installing update", () => { - let applicationBuilder: ApplicationBuilder; + let builder: ApplicationBuilder; let checkForPlatformUpdatesMock: AsyncFnMock; let downloadPlatformUpdateMock: AsyncFnMock; let analyticsListenerMock: jest.Mock; @@ -30,11 +30,11 @@ describe("analytics for installing update", () => { beforeEach(async () => { useFakeTime("2015-10-21T07:28:00Z"); - applicationBuilder = getApplicationBuilder(); + builder = getApplicationBuilder(); analyticsListenerMock = jest.fn(); - applicationBuilder.beforeApplicationStart(({ mainDi }) => { + builder.beforeApplicationStart(mainDi => { mainDi.override(appVersionInjectable, () => "42.0.0"); checkForPlatformUpdatesMock = asyncFn(); @@ -56,7 +56,7 @@ describe("analytics for installing update", () => { eventBus.addListener(analyticsListenerMock); }); - mainDi = applicationBuilder.dis.mainDi; + mainDi = builder.mainDi; }); describe("given application is started and checking updates periodically", () => { @@ -64,7 +64,7 @@ describe("analytics for installing update", () => { mainDi.unoverride(periodicalCheckForUpdatesInjectable); mainDi.permitSideEffects(periodicalCheckForUpdatesInjectable); - await applicationBuilder.render(); + await builder.render(); }); @@ -101,7 +101,7 @@ describe("analytics for installing update", () => { beforeEach(async () => { analyticsListenerMock.mockClear(); - await applicationBuilder.render(); + await builder.render(); }); it("sends event to analytics about the current version", () => { @@ -119,7 +119,7 @@ describe("analytics for installing update", () => { it("when checking for updates using tray, sends event to analytics for being checked from tray", async () => { analyticsListenerMock.mockClear(); - applicationBuilder.tray.click("check-for-updates"); + builder.tray.click("check-for-updates"); expect(analyticsListenerMock.mock.calls).toEqual([ [ @@ -140,7 +140,7 @@ describe("analytics for installing update", () => { it("when checking for updates using application menu, sends event to analytics for being checked from application menu", async () => { analyticsListenerMock.mockClear(); - applicationBuilder.applicationMenu.click("root.check-for-updates"); + builder.applicationMenu.click("root.check-for-updates"); expect(analyticsListenerMock.mock.calls).toEqual([ [ diff --git a/src/features/application-update/downgrading-version-update.test.ts b/src/features/application-update/downgrading-version-update.test.ts index b50d9c940b..0462bee3d4 100644 --- a/src/features/application-update/downgrading-version-update.test.ts +++ b/src/features/application-update/downgrading-version-update.test.ts @@ -24,7 +24,7 @@ describe("downgrading version update", () => { beforeEach(() => { applicationBuilder = getApplicationBuilder(); - applicationBuilder.beforeApplicationStart(({ mainDi }) => { + applicationBuilder.beforeApplicationStart(mainDi => { checkForPlatformUpdatesMock = asyncFn(); mainDi.override( @@ -36,7 +36,7 @@ describe("downgrading version update", () => { mainDi.override(publishIsConfiguredInjectable, () => true); }); - mainDi = applicationBuilder.dis.mainDi; + mainDi = applicationBuilder.mainDi; }); [ diff --git a/src/features/application-update/force-user-to-update-when-too-long-time-since-update-was-downloaded.test.ts b/src/features/application-update/force-user-to-update-when-too-long-time-since-update-was-downloaded.test.ts index df46617467..ba8380e7b5 100644 --- a/src/features/application-update/force-user-to-update-when-too-long-time-since-update-was-downloaded.test.ts +++ b/src/features/application-update/force-user-to-update-when-too-long-time-since-update-was-downloaded.test.ts @@ -35,10 +35,7 @@ describe("force user to update when too long since update was downloaded", () => applicationBuilder = getApplicationBuilder(); - applicationBuilder.beforeApplicationStart(({ mainDi, rendererDi }) => { - rendererDi.unoverride(forceUpdateModalRootFrameComponentInjectable); - rendererDi.permitSideEffects(forceUpdateModalRootFrameComponentInjectable); - + applicationBuilder.beforeApplicationStart(mainDi => { checkForPlatformUpdatesMock = asyncFn(); mainDi.override(checkForPlatformUpdatesInjectable, () => checkForPlatformUpdatesMock); @@ -50,13 +47,17 @@ describe("force user to update when too long since update was downloaded", () => quitAndInstallUpdateMock = jest.fn(); mainDi.override(quitAndInstallUpdateInjectable, () => quitAndInstallUpdateMock); - - rendererDi.override(timeAfterUpdateMustBeInstalledInjectable, () => TIME_AFTER_UPDATE_MUST_BE_INSTALLED); - - rendererDi.override(secondsAfterInstallStartsInjectable, () => TIME_AFTER_INSTALL_STARTS / 1000); }); - mainDi = applicationBuilder.dis.mainDi; + applicationBuilder.beforeWindowStart(windowDi => { + windowDi.unoverride(forceUpdateModalRootFrameComponentInjectable); + windowDi.permitSideEffects(forceUpdateModalRootFrameComponentInjectable); + + windowDi.override(timeAfterUpdateMustBeInstalledInjectable, () => TIME_AFTER_UPDATE_MUST_BE_INSTALLED); + windowDi.override(secondsAfterInstallStartsInjectable, () => TIME_AFTER_INSTALL_STARTS / 1000); + }); + + mainDi = applicationBuilder.mainDi; }); describe("when application is started", () => { diff --git a/src/features/application-update/installing-update-using-topbar-button.test.tsx b/src/features/application-update/installing-update-using-topbar-button.test.tsx index c6ff69d145..5e5500498b 100644 --- a/src/features/application-update/installing-update-using-topbar-button.test.tsx +++ b/src/features/application-update/installing-update-using-topbar-button.test.tsx @@ -33,7 +33,7 @@ describe("encourage user to update when sufficient time passed since update was applicationBuilder = getApplicationBuilder(); - applicationBuilder.beforeApplicationStart(({ mainDi }) => { + applicationBuilder.beforeApplicationStart((mainDi) => { checkForPlatformUpdatesMock = asyncFn(); downloadPlatformUpdateMock = asyncFn(); @@ -76,7 +76,7 @@ describe("encourage user to update when sufficient time passed since update was let processCheckingForUpdates: (source: string) => Promise<{ updateIsReadyToBeInstalled: boolean }>; beforeEach(async () => { - processCheckingForUpdates = applicationBuilder.dis.mainDi.inject( + processCheckingForUpdates = applicationBuilder.mainDi.inject( processCheckingForUpdatesInjectable, ); @@ -105,8 +105,15 @@ describe("encourage user to update when sufficient time passed since update was expect(button).toHaveAttribute("data-warning-level", "light"); }); - // TODO: Implement after starting main and renderer is separated in ApplicationBuilder - xit("given closing the application window, when starting the application window again, still shows the button", () => { + it("given closing the application window, when starting the application window again, still shows the button", async () => { + applicationBuilder.applicationWindow.closeAll(); + + const window = applicationBuilder.applicationWindow.create("some-window-id"); + + await window.start(); + + const button = window.rendered.queryByTestId("update-button"); + expect(button).toBeInTheDocument(); }); diff --git a/src/features/application-update/installing-update-using-tray.test.ts b/src/features/application-update/installing-update-using-tray.test.ts index 1f8bf8992c..9bcb140638 100644 --- a/src/features/application-update/installing-update-using-tray.test.ts +++ b/src/features/application-update/installing-update-using-tray.test.ts @@ -13,19 +13,18 @@ import type { AsyncFnMock } from "@async-fn/jest"; import asyncFn from "@async-fn/jest"; import type { DownloadPlatformUpdate } from "../../main/application-update/download-platform-update/download-platform-update.injectable"; import downloadPlatformUpdateInjectable from "../../main/application-update/download-platform-update/download-platform-update.injectable"; -import closeAllWindowsInjectable from "../../main/start-main-application/lens-window/hide-all-windows/close-all-windows.injectable"; -import applicationWindowInjectable from "../../main/start-main-application/lens-window/application-window/application-window.injectable"; -import type { LensWindow } from "../../main/start-main-application/lens-window/application-window/lens-window-injection-token"; +import type { LensWindow } from "../../main/start-main-application/lens-window/application-window/create-lens-window.injectable"; +import getCurrentApplicationWindowInjectable from "../../main/start-main-application/lens-window/application-window/get-current-application-window.injectable"; describe("installing update using tray", () => { - let applicationBuilder: ApplicationBuilder; + let builder: ApplicationBuilder; let checkForPlatformUpdatesMock: AsyncFnMock; let downloadPlatformUpdateMock: AsyncFnMock; beforeEach(() => { - applicationBuilder = getApplicationBuilder(); + builder = getApplicationBuilder(); - applicationBuilder.beforeApplicationStart(({ mainDi }) => { + builder.beforeApplicationStart((mainDi) => { checkForPlatformUpdatesMock = asyncFn(); downloadPlatformUpdateMock = asyncFn(); @@ -48,7 +47,7 @@ describe("installing update using tray", () => { let rendered: RenderResult; beforeEach(async () => { - rendered = await applicationBuilder.render(); + rendered = await builder.render(); }); it("renders", () => { @@ -56,23 +55,20 @@ describe("installing update using tray", () => { }); it("user cannot install update yet", () => { - expect(applicationBuilder.tray.get("install-update")).toBeNull(); + expect(builder.tray.get("install-update")).toBeNull(); }); describe("given all application windows are closed, when checking for updates", () => { - let applicationWindow: LensWindow; - let closeAllWindows: () => void; + let getCurrentApplicationWindow: () => LensWindow | undefined; beforeEach(() => { - const mainDi = applicationBuilder.dis.mainDi; + getCurrentApplicationWindow = builder.mainDi.inject( + getCurrentApplicationWindowInjectable, + ); - closeAllWindows = mainDi.inject(closeAllWindowsInjectable); + builder.applicationWindow.closeAll(); - applicationWindow = mainDi.inject(applicationWindowInjectable); - - closeAllWindows(); - - applicationBuilder.tray.click("check-for-updates"); + builder.tray.click("check-for-updates"); }); describe("when check for update resolves with new update", () => { @@ -84,37 +80,44 @@ describe("installing update using tray", () => { }); it("does not show application window yet", () => { - expect(applicationWindow.isVisible).toBe(false); + const actual = getCurrentApplicationWindow(); + + expect(actual).toBeUndefined(); }); describe("when download of update resolves with success", () => { beforeEach(async () => { - await downloadPlatformUpdateMock.resolve({ downloadWasSuccessful: true }); }); it("shows the application window", () => { - expect(applicationWindow.isVisible).toBe(true); + const actual = getCurrentApplicationWindow(); + + expect(actual).not.toBeUndefined(); }); it("given closing application window again and checking for updates again using tray, when check resolves with same version that was earlier downloaded, shows the application window", async () => { - closeAllWindows(); + builder.applicationWindow.closeAll(); - applicationBuilder.tray.click("check-for-updates"); + builder.tray.click("check-for-updates"); await checkForPlatformUpdatesMock.resolve({ updateWasDiscovered: true, version: "some-version", }); - expect(applicationWindow.isVisible).toBe(true); + const actual = getCurrentApplicationWindow(); + + expect(actual).not.toBeUndefined(); }); }); it("when download of update resolves with failure, does not show the application window", async () => { await downloadPlatformUpdateMock.resolve({ downloadWasSuccessful: false }); - expect(applicationWindow.isVisible).toBe(false); + const actual = getCurrentApplicationWindow(); + + expect(actual).toBeUndefined(); }); }); @@ -123,29 +126,31 @@ describe("installing update using tray", () => { updateWasDiscovered: false, }); - expect(applicationWindow.isVisible).toBe(false); + const actual = getCurrentApplicationWindow(); + + expect(actual).toBeUndefined(); }); }); describe("when user checks for updates using tray", () => { beforeEach(() => { - applicationBuilder.tray.click("check-for-updates"); + builder.tray.click("check-for-updates"); }); it("user cannot check for updates again", () => { expect( - applicationBuilder.tray.get("check-for-updates")?.enabled, + builder.tray.get("check-for-updates")?.enabled, ).toBe(false); }); it("name of tray item for checking updates indicates that checking is happening", () => { expect( - applicationBuilder.tray.get("check-for-updates")?.label, + builder.tray.get("check-for-updates")?.label, ).toBe("Checking for updates..."); }); it("user cannot install update yet", () => { - expect(applicationBuilder.tray.get("install-update")).toBeNull(); + expect(builder.tray.get("install-update")).toBeNull(); }); it("renders", () => { @@ -160,18 +165,18 @@ describe("installing update using tray", () => { }); it("user cannot install update", () => { - expect(applicationBuilder.tray.get("install-update")).toBeNull(); + expect(builder.tray.get("install-update")).toBeNull(); }); it("user can check for updates again", () => { expect( - applicationBuilder.tray.get("check-for-updates")?.enabled, + builder.tray.get("check-for-updates")?.enabled, ).toBe(true); }); it("name of tray item for checking updates no longer indicates that checking is happening", () => { expect( - applicationBuilder.tray.get("check-for-updates")?.label, + builder.tray.get("check-for-updates")?.label, ).toBe("Check for updates"); }); @@ -190,13 +195,13 @@ describe("installing update using tray", () => { it("user cannot check for updates again yet", () => { expect( - applicationBuilder.tray.get("check-for-updates")?.enabled, + builder.tray.get("check-for-updates")?.enabled, ).toBe(false); }); it("name of tray item for checking updates indicates that downloading is happening", () => { expect( - applicationBuilder.tray.get("check-for-updates")?.label, + builder.tray.get("check-for-updates")?.label, ).toBe("Downloading update some-version (0%)..."); }); @@ -204,12 +209,12 @@ describe("installing update using tray", () => { downloadPlatformUpdateMock.mock.calls[0][0]({ percentage: 42.424242 }); expect( - applicationBuilder.tray.get("check-for-updates")?.label, + builder.tray.get("check-for-updates")?.label, ).toBe("Downloading update some-version (42%)..."); }); it("user still cannot install update", () => { - expect(applicationBuilder.tray.get("install-update")).toBeNull(); + expect(builder.tray.get("install-update")).toBeNull(); }); it("renders", () => { @@ -223,19 +228,19 @@ describe("installing update using tray", () => { it("user cannot install update", () => { expect( - applicationBuilder.tray.get("install-update"), + builder.tray.get("install-update"), ).toBeNull(); }); it("user can check for updates again", () => { expect( - applicationBuilder.tray.get("check-for-updates")?.enabled, + builder.tray.get("check-for-updates")?.enabled, ).toBe(true); }); it("name of tray item for checking updates no longer indicates that downloading is happening", () => { expect( - applicationBuilder.tray.get("check-for-updates")?.label, + builder.tray.get("check-for-updates")?.label, ).toBe("Check for updates"); }); @@ -251,19 +256,19 @@ describe("installing update using tray", () => { it("user can install update", () => { expect( - applicationBuilder.tray.get("install-update")?.label, + builder.tray.get("install-update")?.label, ).toBe("Install update some-version"); }); it("user can check for updates again", () => { expect( - applicationBuilder.tray.get("check-for-updates")?.enabled, + builder.tray.get("check-for-updates")?.enabled, ).toBe(true); }); it("name of tray item for checking updates no longer indicates that downloading is happening", () => { expect( - applicationBuilder.tray.get("check-for-updates")?.label, + builder.tray.get("check-for-updates")?.label, ).toBe("Check for updates"); }); diff --git a/src/features/application-update/installing-update.test.ts b/src/features/application-update/installing-update.test.ts index efc7da8498..7063fcfaa1 100644 --- a/src/features/application-update/installing-update.test.ts +++ b/src/features/application-update/installing-update.test.ts @@ -20,7 +20,7 @@ import { useFakeTime } from "../../common/test-utils/use-fake-time"; import staticFilesDirectoryInjectable from "../../common/vars/static-files-directory.injectable"; describe("installing update", () => { - let applicationBuilder: ApplicationBuilder; + let builder: ApplicationBuilder; let quitAndInstallUpdateMock: jest.Mock; let checkForPlatformUpdatesMock: AsyncFnMock; let downloadPlatformUpdateMock: AsyncFnMock; @@ -29,9 +29,9 @@ describe("installing update", () => { beforeEach(() => { useFakeTime("2015-10-21T07:28:00Z"); - applicationBuilder = getApplicationBuilder(); + builder = getApplicationBuilder(); - applicationBuilder.beforeApplicationStart(({ mainDi }) => { + builder.beforeApplicationStart((mainDi) => { quitAndInstallUpdateMock = jest.fn(); checkForPlatformUpdatesMock = asyncFn(); downloadPlatformUpdateMock = asyncFn(); @@ -66,9 +66,9 @@ describe("installing update", () => { let processCheckingForUpdates: (source: string) => Promise<{ updateIsReadyToBeInstalled: boolean }>; beforeEach(async () => { - rendered = await applicationBuilder.render(); + rendered = await builder.render(); - processCheckingForUpdates = applicationBuilder.dis.mainDi.inject( + processCheckingForUpdates = builder.mainDi.inject( processCheckingForUpdatesInjectable, ); }); @@ -78,7 +78,7 @@ describe("installing update", () => { }); it("shows normal tray icon", () => { - expect(applicationBuilder.tray.getIconPath()).toBe( + expect(builder.tray.getIconPath()).toBe( "/some-static-files-directory/icons/trayIconTemplate.png", ); }); @@ -96,7 +96,7 @@ describe("installing update", () => { }); it("shows tray icon for checking for updates", () => { - expect(applicationBuilder.tray.getIconPath()).toBe( + expect(builder.tray.getIconPath()).toBe( "/some-static-files-directory/icons/trayIconCheckingForUpdatesTemplate.png", ); }); @@ -113,7 +113,7 @@ describe("installing update", () => { }); it("shows tray icon for normal", () => { - expect(applicationBuilder.tray.getIconPath()).toBe( + expect(builder.tray.getIconPath()).toBe( "/some-static-files-directory/icons/trayIconTemplate.png", ); }); @@ -140,7 +140,7 @@ describe("installing update", () => { }); it("still shows tray icon for downloading", () => { - expect(applicationBuilder.tray.getIconPath()).toBe( + expect(builder.tray.getIconPath()).toBe( "/some-static-files-directory/icons/trayIconCheckingForUpdatesTemplate.png", ); }); @@ -159,7 +159,7 @@ describe("installing update", () => { }); it("still shows normal tray icon", () => { - expect(applicationBuilder.tray.getIconPath()).toBe( + expect(builder.tray.getIconPath()).toBe( "/some-static-files-directory/icons/trayIconTemplate.png", ); }); @@ -179,7 +179,7 @@ describe("installing update", () => { }); it("shows tray icon for update being available", () => { - expect(applicationBuilder.tray.getIconPath()).toBe( + expect(builder.tray.getIconPath()).toBe( "/some-static-files-directory/icons/trayIconUpdateAvailableTemplate.png", ); }); @@ -196,7 +196,7 @@ describe("installing update", () => { }); it("shows tray icon for checking for updates", () => { - expect(applicationBuilder.tray.getIconPath()).toBe( + expect(builder.tray.getIconPath()).toBe( "/some-static-files-directory/icons/trayIconCheckingForUpdatesTemplate.png", ); }); @@ -214,7 +214,7 @@ describe("installing update", () => { }); it("shows tray icon for update being available", () => { - expect(applicationBuilder.tray.getIconPath()).toBe( + expect(builder.tray.getIconPath()).toBe( "/some-static-files-directory/icons/trayIconUpdateAvailableTemplate.png", ); }); @@ -233,7 +233,7 @@ describe("installing update", () => { }); it("shows tray icon for downloading update", () => { - expect(applicationBuilder.tray.getIconPath()).toBe( + expect(builder.tray.getIconPath()).toBe( "/some-static-files-directory/icons/trayIconCheckingForUpdatesTemplate.png", ); }); diff --git a/src/features/application-update/periodical-checking-of-updates.test.ts b/src/features/application-update/periodical-checking-of-updates.test.ts index 997f46f8e9..e5c7b1c17c 100644 --- a/src/features/application-update/periodical-checking-of-updates.test.ts +++ b/src/features/application-update/periodical-checking-of-updates.test.ts @@ -14,15 +14,15 @@ import { advanceFakeTime, useFakeTime } from "../../common/test-utils/use-fake-t const ENOUGH_TIME = 1000 * 60 * 60 * 2; describe("periodical checking of updates", () => { - let applicationBuilder: ApplicationBuilder; + let builder: ApplicationBuilder; let processCheckingForUpdatesMock: jest.Mock; beforeEach(() => { useFakeTime("2015-10-21T07:28:00Z"); - applicationBuilder = getApplicationBuilder(); + builder = getApplicationBuilder(); - applicationBuilder.beforeApplicationStart(({ mainDi }) => { + builder.beforeApplicationStart((mainDi) => { mainDi.unoverride(periodicalCheckForUpdatesInjectable); mainDi.permitSideEffects(periodicalCheckForUpdatesInjectable); @@ -39,12 +39,12 @@ describe("periodical checking of updates", () => { let rendered: RenderResult; beforeEach(async () => { - applicationBuilder.beforeApplicationStart(({ mainDi }) => { + builder.beforeApplicationStart((mainDi) => { mainDi.override(electronUpdaterIsActiveInjectable, () => true); mainDi.override(publishIsConfiguredInjectable, () => true); }); - rendered = await applicationBuilder.render(); + rendered = await builder.render(); }); it("renders", () => { @@ -74,12 +74,12 @@ describe("periodical checking of updates", () => { describe("given updater is enabled but no configuration exist, when started", () => { beforeEach(async () => { - applicationBuilder.beforeApplicationStart(({ mainDi }) => { + builder.beforeApplicationStart((mainDi) => { mainDi.override(electronUpdaterIsActiveInjectable, () => true); mainDi.override(publishIsConfiguredInjectable, () => false); }); - await applicationBuilder.render(); + await builder.render(); }); it("does not check for updates", () => { @@ -95,12 +95,12 @@ describe("periodical checking of updates", () => { describe("given updater is not enabled but and configuration exist, when started", () => { beforeEach(async () => { - applicationBuilder.beforeApplicationStart(({ mainDi }) => { + builder.beforeApplicationStart((mainDi) => { mainDi.override(electronUpdaterIsActiveInjectable, () => false); mainDi.override(publishIsConfiguredInjectable, () => true); }); - await applicationBuilder.render(); + await builder.render(); }); it("does not check for updates", () => { diff --git a/src/features/application-update/selection-of-update-stability.test.ts b/src/features/application-update/selection-of-update-stability.test.ts index c2407079df..56937ab0b4 100644 --- a/src/features/application-update/selection-of-update-stability.test.ts +++ b/src/features/application-update/selection-of-update-stability.test.ts @@ -22,26 +22,25 @@ import setUpdateOnQuitInjectable from "../../main/electron-app/features/set-upda import showInfoNotificationInjectable from "../../renderer/components/notifications/show-info-notification.injectable"; import processCheckingForUpdatesInjectable from "../../main/application-update/check-for-updates/process-checking-for-updates.injectable"; import appVersionInjectable from "../../common/vars/app-version.injectable"; +import type { DiContainer } from "@ogre-tools/injectable"; describe("selection of update stability", () => { - let applicationBuilder: ApplicationBuilder; + let builder: ApplicationBuilder; let quitAndInstallUpdateMock: jest.Mock; let checkForPlatformUpdatesMock: AsyncFnMock; let downloadPlatformUpdateMock: AsyncFnMock; let setUpdateOnQuitMock: jest.Mock; let showInfoNotificationMock: jest.Mock; + let mainDi: DiContainer; beforeEach(() => { - applicationBuilder = getApplicationBuilder(); + builder = getApplicationBuilder(); - applicationBuilder.beforeApplicationStart(({ mainDi, rendererDi }) => { + builder.beforeApplicationStart((mainDi) => { quitAndInstallUpdateMock = jest.fn(); checkForPlatformUpdatesMock = asyncFn(); downloadPlatformUpdateMock = asyncFn(); setUpdateOnQuitMock = jest.fn(); - showInfoNotificationMock = jest.fn(() => () => {}); - - rendererDi.override(showInfoNotificationInjectable, () => showInfoNotificationMock); mainDi.override(setUpdateOnQuitInjectable, () => setUpdateOnQuitMock); @@ -63,6 +62,14 @@ describe("selection of update stability", () => { mainDi.override(electronUpdaterIsActiveInjectable, () => true); mainDi.override(publishIsConfiguredInjectable, () => true); }); + + builder.beforeWindowStart((windowDi) => { + showInfoNotificationMock = jest.fn(() => () => {}); + + windowDi.override(showInfoNotificationInjectable, () => showInfoNotificationMock); + }); + + mainDi = builder.mainDi; }); describe("when started", () => { @@ -70,9 +77,9 @@ describe("selection of update stability", () => { let processCheckingForUpdates: (source: string) => Promise<{ updateIsReadyToBeInstalled: boolean }>; beforeEach(async () => { - rendered = await applicationBuilder.render(); + rendered = await builder.render(); - processCheckingForUpdates = applicationBuilder.dis.mainDi.inject(processCheckingForUpdatesInjectable); + processCheckingForUpdates = mainDi.inject(processCheckingForUpdatesInjectable); }); it("renders", () => { @@ -86,7 +93,7 @@ describe("selection of update stability", () => { }; beforeEach(() => { - selectedUpdateChannel = applicationBuilder.dis.mainDi.inject( + selectedUpdateChannel = mainDi.inject( selectedUpdateChannelInjectable, ); @@ -177,7 +184,7 @@ describe("selection of update stability", () => { }; beforeEach(() => { - selectedUpdateChannel = applicationBuilder.dis.mainDi.inject( + selectedUpdateChannel = mainDi.inject( selectedUpdateChannelInjectable, ); @@ -224,7 +231,7 @@ describe("selection of update stability", () => { }); it("given valid update channel selection is stored, when checking for updates, checks for updates from the update channel", async () => { - applicationBuilder.beforeApplicationStart(({ mainDi }) => { + builder.beforeApplicationStart((mainDi) => { // TODO: Switch to more natural way of setting initial value // TODO: UserStore is currently responsible for getting and setting initial value const selectedUpdateChannel = mainDi.inject(selectedUpdateChannelInjectable); @@ -232,9 +239,9 @@ describe("selection of update stability", () => { selectedUpdateChannel.setValue(updateChannels.beta.id); }); - await applicationBuilder.render(); + await builder.render(); - const processCheckingForUpdates = applicationBuilder.dis.mainDi.inject(processCheckingForUpdatesInjectable); + const processCheckingForUpdates = mainDi.inject(processCheckingForUpdatesInjectable); processCheckingForUpdates("irrelevant"); @@ -242,7 +249,7 @@ describe("selection of update stability", () => { }); it("given invalid update channel selection is stored, when checking for updates, checks for updates from the update channel", async () => { - applicationBuilder.beforeApplicationStart(({ mainDi }) => { + builder.beforeApplicationStart((mainDi) => { // TODO: Switch to more natural way of setting initial value // TODO: UserStore is currently responsible for getting and setting initial value const selectedUpdateChannel = mainDi.inject(selectedUpdateChannelInjectable); @@ -250,9 +257,9 @@ describe("selection of update stability", () => { selectedUpdateChannel.setValue("something-invalid" as UpdateChannelId); }); - await applicationBuilder.render(); + await builder.render(); - const processCheckingForUpdates = applicationBuilder.dis.mainDi.inject(processCheckingForUpdatesInjectable); + const processCheckingForUpdates = mainDi.inject(processCheckingForUpdatesInjectable); processCheckingForUpdates("irrelevant"); @@ -260,13 +267,13 @@ describe("selection of update stability", () => { }); it('given no update channel selection is stored and currently using stable release, when user checks for updates, checks for updates from "latest" update channel by default', async () => { - applicationBuilder.beforeApplicationStart(({ mainDi }) => { + builder.beforeApplicationStart((mainDi) => { mainDi.override(appVersionInjectable, () => "1.0.0"); }); - await applicationBuilder.render(); + await builder.render(); - const processCheckingForUpdates = applicationBuilder.dis.mainDi.inject(processCheckingForUpdatesInjectable); + const processCheckingForUpdates = mainDi.inject(processCheckingForUpdatesInjectable); processCheckingForUpdates("irrelevant"); @@ -277,13 +284,13 @@ describe("selection of update stability", () => { }); it('given no update channel selection is stored and currently using alpha release, when checking for updates, checks for updates from "alpha" channel', async () => { - applicationBuilder.beforeApplicationStart(({ mainDi }) => { + builder.beforeApplicationStart((mainDi) => { mainDi.override(appVersionInjectable, () => "1.0.0-alpha"); }); - await applicationBuilder.render(); + await builder.render(); - const processCheckingForUpdates = applicationBuilder.dis.mainDi.inject(processCheckingForUpdatesInjectable); + const processCheckingForUpdates = mainDi.inject(processCheckingForUpdatesInjectable); processCheckingForUpdates("irrelevant"); @@ -291,13 +298,13 @@ describe("selection of update stability", () => { }); it('given no update channel selection is stored and currently using beta release, when checking for updates, checks for updates from "beta" channel', async () => { - applicationBuilder.beforeApplicationStart(({ mainDi }) => { + builder.beforeApplicationStart((mainDi) => { mainDi.override(appVersionInjectable, () => "1.0.0-beta"); }); - await applicationBuilder.render(); + await builder.render(); - const processCheckingForUpdates = applicationBuilder.dis.mainDi.inject(processCheckingForUpdatesInjectable); + const processCheckingForUpdates = mainDi.inject(processCheckingForUpdatesInjectable); processCheckingForUpdates("irrelevant"); @@ -305,7 +312,7 @@ describe("selection of update stability", () => { }); it("given update channel selection is stored and currently using prerelease, when checking for updates, checks for updates from stored channel", async () => { - applicationBuilder.beforeApplicationStart(({ mainDi }) => { + builder.beforeApplicationStart((mainDi) => { mainDi.override(appVersionInjectable, () => "1.0.0-alpha"); // TODO: Switch to more natural way of setting initial value @@ -315,9 +322,9 @@ describe("selection of update stability", () => { selectedUpdateChannel.setValue(updateChannels.beta.id); }); - await applicationBuilder.render(); + await builder.render(); - const processCheckingForUpdates = applicationBuilder.dis.mainDi.inject(processCheckingForUpdatesInjectable); + const processCheckingForUpdates = mainDi.inject(processCheckingForUpdatesInjectable); processCheckingForUpdates("irrelevant"); diff --git a/src/features/cluster/extension-api/disable-cluster-pages-when-cluster-is-not-relevant.test.tsx b/src/features/cluster/extension-api/disable-cluster-pages-when-cluster-is-not-relevant.test.tsx index c6c3cd7fab..0c69f49f80 100644 --- a/src/features/cluster/extension-api/disable-cluster-pages-when-cluster-is-not-relevant.test.tsx +++ b/src/features/cluster/extension-api/disable-cluster-pages-when-cluster-is-not-relevant.test.tsx @@ -8,7 +8,6 @@ import type { RenderResult } from "@testing-library/react"; import type { ApplicationBuilder } from "../../../renderer/components/test-utils/get-application-builder"; import { getApplicationBuilder } from "../../../renderer/components/test-utils/get-application-builder"; import type { TestExtensionRenderer } from "../../../renderer/components/test-utils/get-extension-fake"; -import { getExtensionFakeFor } from "../../../renderer/components/test-utils/get-extension-fake"; import type { KubernetesCluster } from "../../../common/catalog-entities"; import React from "react"; import extensionShouldBeEnabledForClusterFrameInjectable from "../../../renderer/extension-loader/extension-should-be-enabled-for-cluster-frame.injectable"; @@ -24,13 +23,13 @@ describe("disable-cluster-pages-when-cluster-is-not-relevant", () => { builder.setEnvironmentToClusterFrame(); - builder.dis.rendererDi.unoverride(extensionShouldBeEnabledForClusterFrameInjectable); - - const getExtensionFake = getExtensionFakeFor(builder); + builder.beforeWindowStart((windowDi) => { + windowDi.unoverride(extensionShouldBeEnabledForClusterFrameInjectable); + }); isEnabledForClusterMock = asyncFn(); - const testExtension = getExtensionFake({ + const testExtension = { id: "test-extension-id", name: "test-extension", @@ -43,13 +42,14 @@ describe("disable-cluster-pages-when-cluster-is-not-relevant", () => { }, }], }, - }); - - rendererTestExtension = testExtension.renderer; + }; rendered = await builder.render(); builder.extensions.enable(testExtension); + + rendererTestExtension = + builder.extensions.get("test-extension-id").applicationWindows.only; }); describe("given not yet known if extension should be enabled for the cluster, when navigating", () => { diff --git a/src/features/cluster/extension-api/disable-sidebar-items-when-cluster-is-not-relevant.test.tsx b/src/features/cluster/extension-api/disable-sidebar-items-when-cluster-is-not-relevant.test.tsx index 28007355b1..f94a0049d9 100644 --- a/src/features/cluster/extension-api/disable-sidebar-items-when-cluster-is-not-relevant.test.tsx +++ b/src/features/cluster/extension-api/disable-sidebar-items-when-cluster-is-not-relevant.test.tsx @@ -7,7 +7,6 @@ import asyncFn from "@async-fn/jest"; import type { RenderResult } from "@testing-library/react"; import type { ApplicationBuilder } from "../../../renderer/components/test-utils/get-application-builder"; import { getApplicationBuilder } from "../../../renderer/components/test-utils/get-application-builder"; -import { getExtensionFakeFor } from "../../../renderer/components/test-utils/get-extension-fake"; import type { KubernetesCluster } from "../../../common/catalog-entities"; import React from "react"; import extensionShouldBeEnabledForClusterFrameInjectable from "../../../renderer/extension-loader/extension-should-be-enabled-for-cluster-frame.injectable"; @@ -22,13 +21,13 @@ describe("disable sidebar items when cluster is not relevant", () => { builder.setEnvironmentToClusterFrame(); - builder.dis.rendererDi.unoverride(extensionShouldBeEnabledForClusterFrameInjectable); - - const getExtensionFake = getExtensionFakeFor(builder); + builder.beforeWindowStart((windowDi) => { + windowDi.unoverride(extensionShouldBeEnabledForClusterFrameInjectable); + }); isEnabledForClusterMock = asyncFn(); - const testExtension = getExtensionFake({ + const testExtension = { id: "test-extension-id", name: "test-extension", @@ -52,7 +51,7 @@ describe("disable sidebar items when cluster is not relevant", () => { }, ], }, - }); + }; rendered = await builder.render(); diff --git a/src/features/cluster/extension-api/reactively-disable-cluster-pages.test.tsx b/src/features/cluster/extension-api/reactively-disable-cluster-pages.test.tsx index 4cc5e45576..57dc83d810 100644 --- a/src/features/cluster/extension-api/reactively-disable-cluster-pages.test.tsx +++ b/src/features/cluster/extension-api/reactively-disable-cluster-pages.test.tsx @@ -9,24 +9,21 @@ import React from "react"; import type { TestExtensionRenderer } from "../../../renderer/components/test-utils/get-extension-fake"; import type { ApplicationBuilder } from "../../../renderer/components/test-utils/get-application-builder"; import { getApplicationBuilder } from "../../../renderer/components/test-utils/get-application-builder"; -import { getExtensionFakeFor } from "../../../renderer/components/test-utils/get-extension-fake"; describe("reactively disable cluster pages", () => { let builder: ApplicationBuilder; let rendered: RenderResult; let someObservable: IObservableValue; - let rendererTestExtension: TestExtensionRenderer; + let testExtensionInstance: TestExtensionRenderer; beforeEach(async () => { builder = getApplicationBuilder(); builder.setEnvironmentToClusterFrame(); - const getExtensionFake = getExtensionFakeFor(builder); - someObservable = observable.box(false); - const testExtension = getExtensionFake({ + const testExtensionOptions = { id: "test-extension-id", name: "test-extension", @@ -39,17 +36,18 @@ describe("reactively disable cluster pages", () => { enabled: computed(() => someObservable.get()), }], }, - }); + }; rendered = await builder.render(); - builder.extensions.enable(testExtension); + builder.extensions.enable(testExtensionOptions); - rendererTestExtension = testExtension.renderer; + testExtensionInstance = + builder.extensions.get("test-extension-id").applicationWindows.only; }); it("when navigating to the page, does not show the page", () => { - rendererTestExtension.navigate(); + testExtensionInstance.navigate(); const actual = rendered.queryByTestId("some-test-page"); @@ -61,7 +59,7 @@ describe("reactively disable cluster pages", () => { someObservable.set(true); }); - rendererTestExtension.navigate(); + testExtensionInstance.navigate(); const actual = rendered.queryByTestId("some-test-page"); diff --git a/src/features/cluster/kube-object-details/extension-api/disable-kube-object-detail-items-when-cluster-is-not-relevant.test.tsx b/src/features/cluster/kube-object-details/extension-api/disable-kube-object-detail-items-when-cluster-is-not-relevant.test.tsx index a81071ad3e..90660f980f 100644 --- a/src/features/cluster/kube-object-details/extension-api/disable-kube-object-detail-items-when-cluster-is-not-relevant.test.tsx +++ b/src/features/cluster/kube-object-details/extension-api/disable-kube-object-detail-items-when-cluster-is-not-relevant.test.tsx @@ -8,7 +8,6 @@ import type { RenderResult } from "@testing-library/react"; import type { ApplicationBuilder } from "../../../../renderer/components/test-utils/get-application-builder"; import type { KubernetesCluster } from "../../../../common/catalog-entities"; import { getApplicationBuilder } from "../../../../renderer/components/test-utils/get-application-builder"; -import { getExtensionFakeFor } from "../../../../renderer/components/test-utils/get-extension-fake"; import { getInjectable } from "@ogre-tools/injectable"; import { frontEndRouteInjectionToken } from "../../../../common/front-end-routing/front-end-route-injection-token"; import { computed } from "mobx"; @@ -30,9 +29,10 @@ describe("disable kube object detail items when cluster is not relevant", () => beforeEach(async () => { builder = getApplicationBuilder(); + builder.setEnvironmentToClusterFrame(); - builder.beforeApplicationStart(({ rendererDi }) => { - rendererDi.override( + builder.beforeWindowStart((windowDi) => { + windowDi.override( apiManagerInjectable, () => ({ @@ -42,21 +42,15 @@ describe("disable kube object detail items when cluster is not relevant", () => }), } as unknown as ApiManager), ); + + windowDi.unoverride(extensionShouldBeEnabledForClusterFrameInjectable); + + windowDi.register(testRouteInjectable, testRouteComponentInjectable); }); - const rendererDi = builder.dis.rendererDi; - - rendererDi.unoverride(extensionShouldBeEnabledForClusterFrameInjectable); - - rendererDi.register(testRouteInjectable, testRouteComponentInjectable); - - builder.setEnvironmentToClusterFrame(); - - const getExtensionFake = getExtensionFakeFor(builder); - isEnabledForClusterMock = asyncFn(); - const testExtension = getExtensionFake({ + const testExtension = { id: "test-extension-id", name: "test-extension", @@ -77,12 +71,14 @@ describe("disable kube object detail items when cluster is not relevant", () => }, ], }, - }); + }; rendered = await builder.render(); - const navigateToRoute = rendererDi.inject(navigateToRouteInjectionToken); - const testRoute = rendererDi.inject(testRouteInjectable); + const windowDi = builder.applicationWindow.only.di; + + const navigateToRoute = windowDi.inject(navigateToRouteInjectionToken); + const testRoute = windowDi.inject(testRouteInjectable); navigateToRoute(testRoute); diff --git a/src/features/cluster/kube-object-details/extension-api/reactively-hide-kube-object-detail-item.test.tsx b/src/features/cluster/kube-object-details/extension-api/reactively-hide-kube-object-detail-item.test.tsx index 77c9c24552..5ca5961778 100644 --- a/src/features/cluster/kube-object-details/extension-api/reactively-hide-kube-object-detail-item.test.tsx +++ b/src/features/cluster/kube-object-details/extension-api/reactively-hide-kube-object-detail-item.test.tsx @@ -5,7 +5,6 @@ import type { RenderResult } from "@testing-library/react"; import type { ApplicationBuilder } from "../../../../renderer/components/test-utils/get-application-builder"; import { getApplicationBuilder } from "../../../../renderer/components/test-utils/get-application-builder"; -import { getExtensionFakeFor } from "../../../../renderer/components/test-utils/get-extension-fake"; import { getInjectable } from "@ogre-tools/injectable"; import { frontEndRouteInjectionToken } from "../../../../common/front-end-routing/front-end-route-injection-token"; import type { IObservableValue } from "mobx"; @@ -26,8 +25,10 @@ describe("reactively hide kube object detail item", () => { beforeEach(async () => { builder = getApplicationBuilder(); - builder.beforeApplicationStart(({ rendererDi }) => { - rendererDi.override( + builder.setEnvironmentToClusterFrame(); + + builder.beforeWindowStart((windowDi) => { + windowDi.override( apiManagerInjectable, () => ({ @@ -37,19 +38,13 @@ describe("reactively hide kube object detail item", () => { }), } as unknown as ApiManager), ); + + windowDi.register(testRouteInjectable, testRouteComponentInjectable); }); - const rendererDi = builder.dis.rendererDi; - - rendererDi.register(testRouteInjectable, testRouteComponentInjectable); - - builder.setEnvironmentToClusterFrame(); - - const getExtensionFake = getExtensionFakeFor(builder); - someObservable = observable.box(false); - const testExtension = getExtensionFake({ + const testExtension = { id: "test-extension-id", name: "test-extension", @@ -71,12 +66,14 @@ describe("reactively hide kube object detail item", () => { }, ], }, - }); + }; rendered = await builder.render(); - const navigateToRoute = rendererDi.inject(navigateToRouteInjectionToken); - const testRoute = rendererDi.inject(testRouteInjectable); + const windowDi = builder.applicationWindow.only.di; + + const navigateToRoute = windowDi.inject(navigateToRouteInjectionToken); + const testRoute = windowDi.inject(testRouteInjectable); navigateToRoute(testRoute); diff --git a/src/features/cluster/kube-object-menu/extension-api/disable-kube-object-menu-items-when-cluster-is-not-relevant.test.tsx b/src/features/cluster/kube-object-menu/extension-api/disable-kube-object-menu-items-when-cluster-is-not-relevant.test.tsx index 8b48d76160..94bd91681f 100644 --- a/src/features/cluster/kube-object-menu/extension-api/disable-kube-object-menu-items-when-cluster-is-not-relevant.test.tsx +++ b/src/features/cluster/kube-object-menu/extension-api/disable-kube-object-menu-items-when-cluster-is-not-relevant.test.tsx @@ -8,7 +8,6 @@ import type { RenderResult } from "@testing-library/react"; import type { ApplicationBuilder } from "../../../../renderer/components/test-utils/get-application-builder"; import type { KubernetesCluster } from "../../../../common/catalog-entities"; import { getApplicationBuilder } from "../../../../renderer/components/test-utils/get-application-builder"; -import { getExtensionFakeFor } from "../../../../renderer/components/test-utils/get-extension-fake"; import { getInjectable } from "@ogre-tools/injectable"; import { frontEndRouteInjectionToken } from "../../../../common/front-end-routing/front-end-route-injection-token"; import { computed } from "mobx"; @@ -29,19 +28,16 @@ describe("disable kube object menu items when cluster is not relevant", () => { beforeEach(async () => { builder = getApplicationBuilder(); - const rendererDi = builder.dis.rendererDi; - - rendererDi.unoverride(extensionShouldBeEnabledForClusterFrameInjectable); - - rendererDi.register(testRouteInjectable, testRouteComponentInjectable); - builder.setEnvironmentToClusterFrame(); - const getExtensionFake = getExtensionFakeFor(builder); + builder.beforeWindowStart((windowDi) => { + windowDi.unoverride(extensionShouldBeEnabledForClusterFrameInjectable); + windowDi.register(testRouteInjectable, testRouteComponentInjectable); + }); isEnabledForClusterMock = asyncFn(); - const testExtension = getExtensionFake({ + const testExtension = { id: "test-extension-id", name: "test-extension", @@ -60,12 +56,14 @@ describe("disable kube object menu items when cluster is not relevant", () => { }, ], }, - }); + }; rendered = await builder.render(); - const navigateToRoute = rendererDi.inject(navigateToRouteInjectionToken); - const testRoute = rendererDi.inject(testRouteInjectable); + const windowDi = builder.applicationWindow.only.di; + + const navigateToRoute = windowDi.inject(navigateToRouteInjectionToken); + const testRoute = windowDi.inject(testRouteInjectable); navigateToRoute(testRoute); diff --git a/src/features/cluster/kube-object-menu/extension-api/reactively-hide-kube-object-menu-item.test.tsx b/src/features/cluster/kube-object-menu/extension-api/reactively-hide-kube-object-menu-item.test.tsx index 74f33a657a..61a5fe6e90 100644 --- a/src/features/cluster/kube-object-menu/extension-api/reactively-hide-kube-object-menu-item.test.tsx +++ b/src/features/cluster/kube-object-menu/extension-api/reactively-hide-kube-object-menu-item.test.tsx @@ -5,7 +5,6 @@ import type { RenderResult } from "@testing-library/react"; import type { ApplicationBuilder } from "../../../../renderer/components/test-utils/get-application-builder"; import { getApplicationBuilder } from "../../../../renderer/components/test-utils/get-application-builder"; -import { getExtensionFakeFor } from "../../../../renderer/components/test-utils/get-extension-fake"; import { getInjectable } from "@ogre-tools/injectable"; import { frontEndRouteInjectionToken } from "../../../../common/front-end-routing/front-end-route-injection-token"; import type { IObservableValue } from "mobx"; @@ -24,17 +23,15 @@ describe("reactively hide kube object menu item", () => { beforeEach(async () => { builder = getApplicationBuilder(); - const rendererDi = builder.dis.rendererDi; - - rendererDi.register(testRouteInjectable, testRouteComponentInjectable); - builder.setEnvironmentToClusterFrame(); - const getExtensionFake = getExtensionFakeFor(builder); + builder.beforeWindowStart((windowDi) => { + windowDi.register(testRouteInjectable, testRouteComponentInjectable); + }); someObservable = observable.box(false); - const testExtension = getExtensionFake({ + const testExtension = { id: "test-extension-id", name: "test-extension", @@ -53,12 +50,14 @@ describe("reactively hide kube object menu item", () => { }, ], }, - }); + }; rendered = await builder.render(); - const navigateToRoute = rendererDi.inject(navigateToRouteInjectionToken); - const testRoute = rendererDi.inject(testRouteInjectable); + const windowDi = builder.applicationWindow.only.di; + + const navigateToRoute = windowDi.inject(navigateToRouteInjectionToken); + const testRoute = windowDi.inject(testRouteInjectable); navigateToRoute(testRoute); diff --git a/src/features/cluster/kube-object-status-icon/extension-api/disable-kube-object-statuses-when-cluster-is-not-relevant.test.tsx b/src/features/cluster/kube-object-status-icon/extension-api/disable-kube-object-statuses-when-cluster-is-not-relevant.test.tsx index da3ac641a9..7a459c258d 100644 --- a/src/features/cluster/kube-object-status-icon/extension-api/disable-kube-object-statuses-when-cluster-is-not-relevant.test.tsx +++ b/src/features/cluster/kube-object-status-icon/extension-api/disable-kube-object-statuses-when-cluster-is-not-relevant.test.tsx @@ -8,7 +8,6 @@ import type { RenderResult } from "@testing-library/react"; import type { ApplicationBuilder } from "../../../../renderer/components/test-utils/get-application-builder"; import type { KubernetesCluster } from "../../../../common/catalog-entities"; import { getApplicationBuilder } from "../../../../renderer/components/test-utils/get-application-builder"; -import { getExtensionFakeFor } from "../../../../renderer/components/test-utils/get-extension-fake"; import { getInjectable } from "@ogre-tools/injectable"; import { frontEndRouteInjectionToken } from "../../../../common/front-end-routing/front-end-route-injection-token"; import { computed } from "mobx"; @@ -30,19 +29,16 @@ describe("disable kube object statuses when cluster is not relevant", () => { beforeEach(async () => { builder = getApplicationBuilder(); - const rendererDi = builder.dis.rendererDi; - - rendererDi.unoverride(extensionShouldBeEnabledForClusterFrameInjectable); - - rendererDi.register(testRouteInjectable, testRouteComponentInjectable); - builder.setEnvironmentToClusterFrame(); - const getExtensionFake = getExtensionFakeFor(builder); + builder.beforeWindowStart((windowDi) => { + windowDi.unoverride(extensionShouldBeEnabledForClusterFrameInjectable); + windowDi.register(testRouteInjectable, testRouteComponentInjectable); + }); isEnabledForClusterMock = asyncFn(); - const testExtension = getExtensionFake({ + const testExtension = { id: "test-extension-id", name: "test-extension", @@ -61,12 +57,14 @@ describe("disable kube object statuses when cluster is not relevant", () => { }, ], }, - }); + }; rendered = await builder.render(); - const navigateToRoute = rendererDi.inject(navigateToRouteInjectionToken); - const testRoute = rendererDi.inject(testRouteInjectable); + const windowDi = builder.applicationWindow.only.di; + + const navigateToRoute = windowDi.inject(navigateToRouteInjectionToken); + const testRoute = windowDi.inject(testRouteInjectable); navigateToRoute(testRoute); diff --git a/src/features/cluster/kube-object-status-icon/extension-api/reactively-hide-kube-object-status.test.tsx b/src/features/cluster/kube-object-status-icon/extension-api/reactively-hide-kube-object-status.test.tsx index 3c9695d8fa..7dd45803a2 100644 --- a/src/features/cluster/kube-object-status-icon/extension-api/reactively-hide-kube-object-status.test.tsx +++ b/src/features/cluster/kube-object-status-icon/extension-api/reactively-hide-kube-object-status.test.tsx @@ -5,7 +5,6 @@ import type { RenderResult } from "@testing-library/react"; import type { ApplicationBuilder } from "../../../../renderer/components/test-utils/get-application-builder"; import { getApplicationBuilder } from "../../../../renderer/components/test-utils/get-application-builder"; -import { getExtensionFakeFor } from "../../../../renderer/components/test-utils/get-extension-fake"; import { getInjectable } from "@ogre-tools/injectable"; import { frontEndRouteInjectionToken } from "../../../../common/front-end-routing/front-end-route-injection-token"; import type { IObservableValue } from "mobx"; @@ -26,19 +25,16 @@ describe("reactively hide kube object status", () => { beforeEach(async () => { builder = getApplicationBuilder(); - const rendererDi = builder.dis.rendererDi; - - rendererDi.unoverride(extensionShouldBeEnabledForClusterFrameInjectable); - - rendererDi.register(testRouteInjectable, testRouteComponentInjectable); - builder.setEnvironmentToClusterFrame(); - const getExtensionFake = getExtensionFakeFor(builder); + builder.beforeWindowStart((windowDi) => { + windowDi.unoverride(extensionShouldBeEnabledForClusterFrameInjectable); + windowDi.register(testRouteInjectable, testRouteComponentInjectable); + }); someObservable = observable.box(false); - const testExtension = getExtensionFake({ + const testExtension = { id: "test-extension-id", name: "test-extension", @@ -57,12 +53,14 @@ describe("reactively hide kube object status", () => { }, ], }, - }); + }; rendered = await builder.render(); - const navigateToRoute = rendererDi.inject(navigateToRouteInjectionToken); - const testRoute = rendererDi.inject(testRouteInjectable); + const windowDi = builder.applicationWindow.only.di; + + const navigateToRoute = windowDi.inject(navigateToRouteInjectionToken); + const testRoute = windowDi.inject(testRouteInjectable); navigateToRoute(testRoute); diff --git a/src/features/cluster/kube-object-status-icon/show-status-for-a-kube-object.test.tsx b/src/features/cluster/kube-object-status-icon/show-status-for-a-kube-object.test.tsx index a63344271d..eba681ef47 100644 --- a/src/features/cluster/kube-object-status-icon/show-status-for-a-kube-object.test.tsx +++ b/src/features/cluster/kube-object-status-icon/show-status-for-a-kube-object.test.tsx @@ -32,8 +32,6 @@ describe("show status for a kube object", () => { builder = getApplicationBuilder(); - const rendererDi = builder.dis.rendererDi; - infoStatusIsShown = false; const infoStatusInjectable = getInjectable({ @@ -95,34 +93,36 @@ describe("show status for a kube object", () => { }), }); - rendererDi.register( - testRouteInjectable, - testRouteComponentInjectable, - infoStatusInjectable, - warningStatusInjectable, - criticalStatusInjectable, - someAtomInjectable, - ); + builder.beforeWindowStart((windowDi) => { + windowDi.register( + testRouteInjectable, + testRouteComponentInjectable, + infoStatusInjectable, + warningStatusInjectable, + criticalStatusInjectable, + someAtomInjectable, + ); + }); builder.setEnvironmentToClusterFrame(); }); describe("given application starts and in test page", () => { - let rendererDi: DiContainer; + let windowDi: DiContainer; let rendered: RenderResult; let rerenderParent: () => void; beforeEach(async () => { rendered = await builder.render(); - rendererDi = builder.dis.rendererDi; + windowDi = builder.applicationWindow.only.di; - const someAtom = rendererDi.inject(someAtomInjectable); + const someAtom = windowDi.inject(someAtomInjectable); rerenderParent = rerenderParentFor(someAtom); - const navigateToRoute = rendererDi.inject(navigateToRouteInjectionToken); - const testRoute = rendererDi.inject(testRouteInjectable); + const navigateToRoute = windowDi.inject(navigateToRouteInjectionToken); + const testRoute = windowDi.inject(testRouteInjectable); navigateToRoute(testRoute); }); @@ -141,7 +141,7 @@ describe("show status for a kube object", () => { describe("when status for irrelevant kube object kind emerges", () => { beforeEach(() => { - rendererDi.register(statusForIrrelevantKubeObjectKindInjectable); + windowDi.register(statusForIrrelevantKubeObjectKindInjectable); rerenderParent(); }); @@ -161,7 +161,7 @@ describe("show status for a kube object", () => { describe("when status for irrelevant kube object api version emerges", () => { beforeEach(() => { - rendererDi.register(statusForIrrelevantKubeObjectApiVersionInjectable); + windowDi.register(statusForIrrelevantKubeObjectApiVersionInjectable); rerenderParent(); }); diff --git a/src/features/cluster/namespaces/edit-namespace-from-new-tab.test.tsx b/src/features/cluster/namespaces/edit-namespace-from-new-tab.test.tsx index 41ff722bfb..efe0cdf554 100644 --- a/src/features/cluster/namespaces/edit-namespace-from-new-tab.test.tsx +++ b/src/features/cluster/namespaces/edit-namespace-from-new-tab.test.tsx @@ -44,34 +44,34 @@ describe("cluster/namespaces - edit namespace from new tab", () => { showSuccessNotificationMock = jest.fn(); showErrorNotificationMock = jest.fn(); - builder.beforeApplicationStart(({ rendererDi }) => { - rendererDi.override( + builder.beforeWindowStart((windowDi) => { + windowDi.override( directoryForLensLocalStorageInjectable, () => "/some-directory-for-lens-local-storage", ); - rendererDi.override(hostedClusterIdInjectable, () => "some-cluster-id"); + windowDi.override(hostedClusterIdInjectable, () => "some-cluster-id"); - storagesAreReady = controlWhenStoragesAreReady(rendererDi); + storagesAreReady = controlWhenStoragesAreReady(windowDi); - rendererDi.override( + windowDi.override( showSuccessNotificationInjectable, () => showSuccessNotificationMock, ); - rendererDi.override( + windowDi.override( showErrorNotificationInjectable, () => showErrorNotificationMock, ); - rendererDi.override(getRandomIdForEditResourceTabInjectable, () => + windowDi.override(getRandomIdForEditResourceTabInjectable, () => jest .fn(() => "some-irrelevant-random-id") .mockReturnValueOnce("some-first-tab-id") .mockReturnValueOnce("some-second-tab-id"), ); - rendererDi.override(callForResourceInjectable, () => async (selfLink: string) => { + windowDi.override(callForResourceInjectable, () => async (selfLink: string) => { if ( [ "/apis/some-api-version/namespaces/some-uid", @@ -84,7 +84,7 @@ describe("cluster/namespaces - edit namespace from new tab", () => { return undefined; }); - rendererDi.override(callForPatchResourceInjectable, () => async (namespace, ...args) => { + windowDi.override(callForPatchResourceInjectable, () => async (namespace, ...args) => { if ( [ "/apis/some-api-version/namespaces/some-uid", @@ -103,22 +103,22 @@ describe("cluster/namespaces - edit namespace from new tab", () => { describe("when navigating to namespaces", () => { let rendered: RenderResult; - let rendererDi: DiContainer; + let windowDi: DiContainer; beforeEach(async () => { rendered = await builder.render(); await storagesAreReady(); - rendererDi = builder.dis.rendererDi; + windowDi = builder.applicationWindow.only.di; - const navigateToNamespaces = rendererDi.inject( + const navigateToNamespaces = windowDi.inject( navigateToNamespacesInjectable, ); navigateToNamespaces(); - const dockStore = rendererDi.inject(dockStoreInjectable); + const dockStore = windowDi.inject(dockStoreInjectable); // TODO: Make TerminalWindow unit testable to allow realistic behaviour dockStore.closeTab("terminal"); @@ -168,7 +168,7 @@ describe("cluster/namespaces - edit namespace from new tab", () => { // TODO: Make implementation match the description (tests above) const namespaceStub = new Namespace(someNamespaceDataStub); - const createEditResourceTab = rendererDi.inject(createEditResourceTabInjectable); + const createEditResourceTab = windowDi.inject(createEditResourceTabInjectable); createEditResourceTab(namespaceStub); }); @@ -510,7 +510,7 @@ metadata: }); it("stores the changed configuration", async () => { - const readJsonFile = rendererDi.inject( + const readJsonFile = windowDi.inject( readJsonFileInjectable, ); @@ -719,7 +719,7 @@ metadata: // TODO: Make implementation match the description const namespaceStub = new Namespace(someOtherNamespaceDataStub); - const createEditResourceTab = rendererDi.inject(createEditResourceTabInjectable); + const createEditResourceTab = windowDi.inject(createEditResourceTabInjectable); createEditResourceTab(namespaceStub); }); diff --git a/src/features/cluster/namespaces/edit-namespace-from-previously-opened-tab.test.tsx b/src/features/cluster/namespaces/edit-namespace-from-previously-opened-tab.test.tsx index d4571b2611..a5f834563b 100644 --- a/src/features/cluster/namespaces/edit-namespace-from-previously-opened-tab.test.tsx +++ b/src/features/cluster/namespaces/edit-namespace-from-previously-opened-tab.test.tsx @@ -29,17 +29,17 @@ describe("cluster/namespaces - edit namespaces from previously opened tab", () = callForNamespaceMock = asyncFn(); - builder.beforeApplicationStart(({ rendererDi }) => { - rendererDi.override( + builder.beforeWindowStart((windowDi) => { + windowDi.override( directoryForLensLocalStorageInjectable, () => "/some-directory-for-lens-local-storage", ); - rendererDi.override(hostedClusterIdInjectable, () => "some-cluster-id"); + windowDi.override(hostedClusterIdInjectable, () => "some-cluster-id"); - storagesAreReady = controlWhenStoragesAreReady(rendererDi); + storagesAreReady = controlWhenStoragesAreReady(windowDi); - rendererDi.override(callForResourceInjectable, () => callForNamespaceMock); + windowDi.override(callForResourceInjectable, () => callForNamespaceMock); }); builder.allowKubeResource("namespaces"); @@ -49,33 +49,35 @@ describe("cluster/namespaces - edit namespaces from previously opened tab", () = let rendered: RenderResult; beforeEach(async () => { - const writeJsonFile = builder.dis.rendererDi.inject(writeJsonFileInjectable); + builder.beforeWindowStart(async (windowDi) => { + const writeJsonFile = windowDi.inject(writeJsonFileInjectable); - await writeJsonFile( - "/some-directory-for-lens-local-storage/some-cluster-id.json", - { - dock: { - height: 300, - tabs: [ - { - id: "some-first-tab-id", - kind: TabKind.EDIT_RESOURCE, - title: "Namespace: some-namespace", - pinned: false, + await writeJsonFile( + "/some-directory-for-lens-local-storage/some-cluster-id.json", + { + dock: { + height: 300, + tabs: [ + { + id: "some-first-tab-id", + kind: TabKind.EDIT_RESOURCE, + title: "Namespace: some-namespace", + pinned: false, + }, + ], + + isOpen: true, + }, + + edit_resource_store: { + "some-first-tab-id": { + resource: "/apis/some-api-version/namespaces/some-uid", + draft: "some-saved-configuration", }, - ], - - isOpen: true, - }, - - edit_resource_store: { - "some-first-tab-id": { - resource: "/apis/some-api-version/namespaces/some-uid", - draft: "some-saved-configuration", }, }, - }, - ); + ); + }); rendered = await builder.render(); diff --git a/src/features/cluster/order-of-sidebar-items.test.tsx b/src/features/cluster/order-of-sidebar-items.test.tsx index 368b1b065d..718d267e70 100644 --- a/src/features/cluster/order-of-sidebar-items.test.tsx +++ b/src/features/cluster/order-of-sidebar-items.test.tsx @@ -14,19 +14,21 @@ import { getApplicationBuilder } from "../../renderer/components/test-utils/get- describe("cluster - order of sidebar items", () => { let rendered: RenderResult; - let applicationBuilder: ApplicationBuilder; + let builder: ApplicationBuilder; beforeEach(() => { - applicationBuilder = getApplicationBuilder().setEnvironmentToClusterFrame(); + builder = getApplicationBuilder(); - applicationBuilder.beforeApplicationStart(({ rendererDi }) => { - rendererDi.register(testSidebarItemsInjectable); + builder.setEnvironmentToClusterFrame(); + + builder.beforeWindowStart((windowDi) => { + windowDi.register(testSidebarItemsInjectable); }); }); describe("when rendered", () => { beforeEach(async () => { - rendered = await applicationBuilder.render(); + rendered = await builder.render(); }); it("renders", () => { diff --git a/src/features/cluster/sidebar-and-tab-navigation-for-core.test.tsx b/src/features/cluster/sidebar-and-tab-navigation-for-core.test.tsx index e6cf1f4a64..caa9873208 100644 --- a/src/features/cluster/sidebar-and-tab-navigation-for-core.test.tsx +++ b/src/features/cluster/sidebar-and-tab-navigation-for-core.test.tsx @@ -27,24 +27,21 @@ import { advanceFakeTime, useFakeTime } from "../../common/test-utils/use-fake-t import storageSaveDelayInjectable from "../../renderer/utils/create-storage/storage-save-delay.injectable"; describe("cluster - sidebar and tab navigation for core", () => { - let applicationBuilder: ApplicationBuilder; - let rendererDi: DiContainer; + let builder: ApplicationBuilder; let rendered: RenderResult; beforeEach(() => { useFakeTime("2015-10-21T07:28:00Z"); - applicationBuilder = getApplicationBuilder(); - rendererDi = applicationBuilder.dis.rendererDi; + builder = getApplicationBuilder(); - applicationBuilder.setEnvironmentToClusterFrame(); + builder.setEnvironmentToClusterFrame(); - applicationBuilder.beforeApplicationStart(({ rendererDi }) => { - rendererDi.override(hostedClusterIdInjectable, () => "some-hosted-cluster-id"); + builder.beforeWindowStart((windowDi) => { + windowDi.override(hostedClusterIdInjectable, () => "some-hosted-cluster-id"); + windowDi.override(storageSaveDelayInjectable, () => 250); - rendererDi.override(storageSaveDelayInjectable, () => 250); - - rendererDi.override( + windowDi.override( directoryForLensLocalStorageInjectable, () => "/some-directory-for-lens-local-storage", ); @@ -53,24 +50,23 @@ describe("cluster - sidebar and tab navigation for core", () => { describe("given core registrations", () => { beforeEach(() => { - applicationBuilder.beforeApplicationStart(({ rendererDi }) => { - rendererDi.register(testRouteInjectable); - rendererDi.register(testRouteComponentInjectable); - rendererDi.register(testSidebarItemsInjectable); + builder.beforeWindowStart((windowDi) => { + windowDi.register(testRouteInjectable); + windowDi.register(testRouteComponentInjectable); + windowDi.register(testSidebarItemsInjectable); }); }); describe("given no state for expanded sidebar items exists, and navigated to child sidebar item, when rendered", () => { beforeEach(async () => { - applicationBuilder.beforeRender(({ rendererDi }) => { - const route = rendererDi.inject(testRouteInjectable); + rendered = await builder.render(); - const navigateToRoute = rendererDi.inject(navigateToRouteInjectionToken); + const windowDi = builder.applicationWindow.only.di; - navigateToRoute(route); - }); + const route = windowDi.inject(testRouteInjectable); + const navigateToRoute = windowDi.inject(navigateToRouteInjectionToken); - rendered = await applicationBuilder.render(); + navigateToRoute(route); }); it("renders", () => { @@ -96,8 +92,8 @@ describe("cluster - sidebar and tab navigation for core", () => { describe("given state for expanded sidebar items already exists, when rendered", () => { beforeEach(async () => { - applicationBuilder.beforeRender(async ({ rendererDi }) => { - const writeJsonFileFake = rendererDi.inject(writeJsonFileInjectable); + builder.beforeWindowStart(async (windowDi) => { + const writeJsonFileFake = windowDi.inject(writeJsonFileInjectable); await writeJsonFileFake( "/some-directory-for-lens-local-storage/some-hosted-cluster-id.json", @@ -108,15 +104,13 @@ describe("cluster - sidebar and tab navigation for core", () => { }, }, ); - }); - applicationBuilder.beforeRender(async ({ rendererDi }) => { - const sidebarStorage = rendererDi.inject(sidebarStorageInjectable); + const sidebarStorage = windowDi.inject(sidebarStorageInjectable); await sidebarStorage.whenReady; }); - rendered = await applicationBuilder.render(); + rendered = await builder.render(); }); it("renders", () => { @@ -138,8 +132,8 @@ describe("cluster - sidebar and tab navigation for core", () => { describe("given state for expanded unknown sidebar items already exists, when rendered", () => { beforeEach(async () => { - applicationBuilder.beforeRender(async ({ rendererDi }) => { - const writeJsonFileFake = rendererDi.inject(writeJsonFileInjectable); + builder.beforeWindowStart(async (windowDi) => { + const writeJsonFileFake = windowDi.inject(writeJsonFileInjectable); await writeJsonFileFake( "/some-directory-for-lens-local-storage/some-hosted-cluster-id.json", @@ -152,7 +146,7 @@ describe("cluster - sidebar and tab navigation for core", () => { ); }); - rendered = await applicationBuilder.render(); + rendered = await builder.render(); }); it("renders without errors", () => { @@ -168,8 +162,8 @@ describe("cluster - sidebar and tab navigation for core", () => { describe("given empty state for expanded sidebar items already exists, when rendered", () => { beforeEach(async () => { - applicationBuilder.beforeRender(async ({ rendererDi }) => { - const writeJsonFileFake = rendererDi.inject(writeJsonFileInjectable); + builder.beforeWindowStart(async (windowDi) => { + const writeJsonFileFake = windowDi.inject(writeJsonFileInjectable); await writeJsonFileFake( "/some-directory-for-lens-local-storage/some-hosted-cluster-id.json", @@ -179,7 +173,7 @@ describe("cluster - sidebar and tab navigation for core", () => { ); }); - rendered = await applicationBuilder.render(); + rendered = await builder.render(); }); it("renders without errors", () => { @@ -194,8 +188,12 @@ describe("cluster - sidebar and tab navigation for core", () => { }); describe("given no initially persisted state for sidebar items, when rendered", () => { + let windowDi: DiContainer; + beforeEach(async () => { - rendered = await applicationBuilder.render(); + rendered = await builder.render(); + + windowDi = builder.applicationWindow.only.di; }); it("renders", () => { @@ -271,7 +269,7 @@ describe("cluster - sidebar and tab navigation for core", () => { it("when not enough time passes, does not store state for expanded sidebar items to file system yet", async () => { advanceFakeTime(250 - 1); - const pathExistsFake = rendererDi.inject(pathExistsInjectable); + const pathExistsFake = windowDi.inject(pathExistsInjectable); const actual = await pathExistsFake( "/some-directory-for-lens-local-storage/some-hosted-cluster-id.json", @@ -283,7 +281,7 @@ describe("cluster - sidebar and tab navigation for core", () => { it("when enough time passes, stores state for expanded sidebar items to file system", async () => { advanceFakeTime(250); - const readJsonFileFake = rendererDi.inject(readJsonFileInjectable); + const readJsonFileFake = windowDi.inject(readJsonFileInjectable); const actual = await readJsonFileFake( "/some-directory-for-lens-local-storage/some-hosted-cluster-id.json", diff --git a/src/features/cluster/sidebar-and-tab-navigation-for-extensions.test.tsx b/src/features/cluster/sidebar-and-tab-navigation-for-extensions.test.tsx index c3fc563696..8d3de582ad 100644 --- a/src/features/cluster/sidebar-and-tab-navigation-for-extensions.test.tsx +++ b/src/features/cluster/sidebar-and-tab-navigation-for-extensions.test.tsx @@ -13,35 +13,31 @@ import { getApplicationBuilder } from "../../renderer/components/test-utils/get- import writeJsonFileInjectable from "../../common/fs/write-json-file.injectable"; import pathExistsInjectable from "../../common/fs/path-exists.injectable"; import readJsonFileInjectable from "../../common/fs/read-json-file.injectable"; -import type { DiContainer } from "@ogre-tools/injectable"; import { navigateToRouteInjectionToken } from "../../common/front-end-routing/navigate-to-route-injection-token"; import assert from "assert"; import hostedClusterIdInjectable from "../../renderer/cluster-frame-context/hosted-cluster-id.injectable"; import { advanceFakeTime, useFakeTime } from "../../common/test-utils/use-fake-time"; -import { getExtensionFakeFor } from "../../renderer/components/test-utils/get-extension-fake"; import type { IObservableValue } from "mobx"; import { runInAction, computed, observable } from "mobx"; import storageSaveDelayInjectable from "../../renderer/utils/create-storage/storage-save-delay.injectable"; +import type { DiContainer } from "@ogre-tools/injectable"; describe("cluster - sidebar and tab navigation for extensions", () => { let applicationBuilder: ApplicationBuilder; - let rendererDi: DiContainer; let rendered: RenderResult; beforeEach(() => { useFakeTime("2015-10-21T07:28:00Z"); applicationBuilder = getApplicationBuilder(); - rendererDi = applicationBuilder.dis.rendererDi; applicationBuilder.setEnvironmentToClusterFrame(); - applicationBuilder.beforeApplicationStart(({ rendererDi }) => { - rendererDi.override(hostedClusterIdInjectable, () => "some-hosted-cluster-id"); + applicationBuilder.beforeWindowStart((windowDi) => { + windowDi.override(hostedClusterIdInjectable, () => "some-hosted-cluster-id"); + windowDi.override(storageSaveDelayInjectable, () => 250); - rendererDi.override(storageSaveDelayInjectable, () => 250); - - rendererDi.override( + windowDi.override( directoryForLensLocalStorageInjectable, () => "/some-directory-for-lens-local-storage", ); @@ -54,9 +50,7 @@ describe("cluster - sidebar and tab navigation for extensions", () => { beforeEach(() => { someObservable = observable.box(false); - const getExtensionFake = getExtensionFakeFor(applicationBuilder); - - const testExtension = getExtensionFake({ + const testExtension = { id: "some-extension-id", name: "some-extension-name", @@ -130,29 +124,31 @@ describe("cluster - sidebar and tab navigation for extensions", () => { }, ], }, - }); + }; applicationBuilder.extensions.enable(testExtension); }); describe("given no state for expanded sidebar items exists, and navigated to child sidebar item, when rendered", () => { beforeEach(async () => { - applicationBuilder.beforeRender(({ rendererDi }) => { - const navigateToRoute = rendererDi.inject(navigateToRouteInjectionToken); - const route = rendererDi - .inject(routesInjectable) - .get() - .find( - matches({ - path: "/extension/some-extension-name/some-child-page-id", - }), - ); - - assert(route); - navigateToRoute(route); - }); - rendered = await applicationBuilder.render(); + + const windowDi = applicationBuilder.applicationWindow.only.di; + + const navigateToRoute = windowDi.inject(navigateToRouteInjectionToken); + + const route = windowDi + .inject(routesInjectable) + .get() + .find( + matches({ + path: "/extension/some-extension-name/some-child-page-id", + }), + ); + + assert(route); + navigateToRoute(route); + }); it("renders", () => { @@ -178,8 +174,8 @@ describe("cluster - sidebar and tab navigation for extensions", () => { describe("given state for expanded sidebar items already exists, when rendered", () => { beforeEach(async () => { - applicationBuilder.beforeRender(async ({ rendererDi }) => { - const writeJsonFileFake = rendererDi.inject(writeJsonFileInjectable); + applicationBuilder.beforeWindowStart(async (windowDi) => { + const writeJsonFileFake = windowDi.inject(writeJsonFileInjectable); await writeJsonFileFake( "/some-directory-for-lens-local-storage/some-hosted-cluster-id.json", @@ -214,8 +210,8 @@ describe("cluster - sidebar and tab navigation for extensions", () => { describe("given state for expanded unknown sidebar items already exists, when rendered", () => { beforeEach(async () => { - applicationBuilder.beforeRender(async ({ rendererDi }) => { - const writeJsonFileFake = rendererDi.inject(writeJsonFileInjectable); + applicationBuilder.beforeWindowStart(async (windowDi) => { + const writeJsonFileFake = windowDi.inject(writeJsonFileInjectable); await writeJsonFileFake( "/some-directory-for-lens-local-storage/some-hosted-cluster-id.json", @@ -244,8 +240,8 @@ describe("cluster - sidebar and tab navigation for extensions", () => { describe("given empty state for expanded sidebar items already exists, when rendered", () => { beforeEach(async () => { - applicationBuilder.beforeRender(async ({ rendererDi }) => { - const writeJsonFileFake = rendererDi.inject(writeJsonFileInjectable); + applicationBuilder.beforeWindowStart(async (windowDi) => { + const writeJsonFileFake = windowDi.inject(writeJsonFileInjectable); await writeJsonFileFake( "/some-directory-for-lens-local-storage/some-hosted-cluster-id.json", @@ -270,8 +266,12 @@ describe("cluster - sidebar and tab navigation for extensions", () => { }); describe("given no initially persisted state for sidebar items, when rendered", () => { + let windowDi: DiContainer; + beforeEach(async () => { rendered = await applicationBuilder.render(); + + windowDi = applicationBuilder.applicationWindow.only.di; }); it("renders", () => { @@ -387,7 +387,7 @@ describe("cluster - sidebar and tab navigation for extensions", () => { it("when not enough time passes, does not store state for expanded sidebar items to file system yet", async () => { advanceFakeTime(250 - 1); - const pathExistsFake = rendererDi.inject(pathExistsInjectable); + const pathExistsFake = windowDi.inject(pathExistsInjectable); const actual = await pathExistsFake( "/some-directory-for-lens-local-storage/some-hosted-cluster-id.json", @@ -399,7 +399,7 @@ describe("cluster - sidebar and tab navigation for extensions", () => { it("when enough time passes, stores state for expanded sidebar items to file system", async () => { advanceFakeTime(250); - const readJsonFileFake = rendererDi.inject(readJsonFileInjectable); + const readJsonFileFake = windowDi.inject(readJsonFileInjectable); const actual = await readJsonFileFake( "/some-directory-for-lens-local-storage/some-hosted-cluster-id.json", diff --git a/src/features/cluster/visibility-of-sidebar-items.test.tsx b/src/features/cluster/visibility-of-sidebar-items.test.tsx index 2fb837b9ed..52224b7cd1 100644 --- a/src/features/cluster/visibility-of-sidebar-items.test.tsx +++ b/src/features/cluster/visibility-of-sidebar-items.test.tsx @@ -16,24 +16,24 @@ import { getApplicationBuilder } from "../../renderer/components/test-utils/get- import { navigateToRouteInjectionToken } from "../../common/front-end-routing/navigate-to-route-injection-token"; describe("cluster - visibility of sidebar items", () => { - let applicationBuilder: ApplicationBuilder; + let builder: ApplicationBuilder; let rendered: RenderResult; beforeEach(() => { - applicationBuilder = getApplicationBuilder(); + builder = getApplicationBuilder(); - applicationBuilder.setEnvironmentToClusterFrame(); + builder.setEnvironmentToClusterFrame(); - applicationBuilder.beforeApplicationStart(({ rendererDi }) => { - rendererDi.register(testRouteInjectable); - rendererDi.register(testRouteComponentInjectable); - rendererDi.register(testSidebarItemsInjectable); + builder.beforeWindowStart((windowDi) => { + windowDi.register(testRouteInjectable); + windowDi.register(testRouteComponentInjectable); + windowDi.register(testSidebarItemsInjectable); }); }); describe("given kube resource for route is not allowed", () => { beforeEach(async () => { - rendered = await applicationBuilder.render(); + rendered = await builder.render(); }); it("renders", () => { @@ -48,7 +48,7 @@ describe("cluster - visibility of sidebar items", () => { describe("when kube resource becomes allowed", () => { beforeEach(() => { - applicationBuilder.allowKubeResource("namespaces"); + builder.allowKubeResource("namespaces"); }); it("renders", () => { diff --git a/src/features/cluster/workloads/overview/extension-api/disable-workloads-overview-details-when-cluster-is-not-relevant.test.tsx b/src/features/cluster/workloads/overview/extension-api/disable-workloads-overview-details-when-cluster-is-not-relevant.test.tsx index 35a108dde9..4b19be2cb5 100644 --- a/src/features/cluster/workloads/overview/extension-api/disable-workloads-overview-details-when-cluster-is-not-relevant.test.tsx +++ b/src/features/cluster/workloads/overview/extension-api/disable-workloads-overview-details-when-cluster-is-not-relevant.test.tsx @@ -8,7 +8,6 @@ import type { RenderResult } from "@testing-library/react"; import type { ApplicationBuilder } from "../../../../../renderer/components/test-utils/get-application-builder"; import type { KubernetesCluster } from "../../../../../common/catalog-entities"; import { getApplicationBuilder } from "../../../../../renderer/components/test-utils/get-application-builder"; -import { getExtensionFakeFor } from "../../../../../renderer/components/test-utils/get-extension-fake"; import extensionShouldBeEnabledForClusterFrameInjectable from "../../../../../renderer/extension-loader/extension-should-be-enabled-for-cluster-frame.injectable"; import apiManagerInjectable from "../../../../../common/k8s-api/api-manager/manager.injectable"; import navigateToWorkloadsOverviewInjectable from "../../../../../common/front-end-routing/routes/cluster/workloads/overview/navigate-to-workloads-overview.injectable"; @@ -24,21 +23,19 @@ describe("disable workloads overview details when cluster is not relevant", () = beforeEach(async () => { builder = getApplicationBuilder(); - builder.beforeApplicationStart(({ mainDi }) => { + builder.setEnvironmentToClusterFrame(); + + builder.beforeApplicationStart((mainDi) => { mainDi.override(apiManagerInjectable, () => ({})); }); - const rendererDi = builder.dis.rendererDi; - - rendererDi.unoverride(extensionShouldBeEnabledForClusterFrameInjectable); - - builder.setEnvironmentToClusterFrame(); - - const getExtensionFake = getExtensionFakeFor(builder); + builder.beforeWindowStart((windowDi) => { + windowDi.unoverride(extensionShouldBeEnabledForClusterFrameInjectable); + }); isEnabledForClusterMock = asyncFn(); - const testExtension = getExtensionFake({ + const testExtension = { id: "test-extension-id", name: "test-extension", @@ -55,11 +52,13 @@ describe("disable workloads overview details when cluster is not relevant", () = }, ], }, - }); + }; rendered = await builder.render(); - const navigateToWorkloadsOverview = rendererDi.inject( + const windowDi = builder.applicationWindow.only.di; + + const navigateToWorkloadsOverview = windowDi.inject( navigateToWorkloadsOverviewInjectable, ); diff --git a/src/features/cluster/workloads/overview/extension-api/order-of-workload-overview-details.test.tsx b/src/features/cluster/workloads/overview/extension-api/order-of-workload-overview-details.test.tsx index eb19bbd400..70d9983f2b 100644 --- a/src/features/cluster/workloads/overview/extension-api/order-of-workload-overview-details.test.tsx +++ b/src/features/cluster/workloads/overview/extension-api/order-of-workload-overview-details.test.tsx @@ -4,7 +4,6 @@ */ import type { RenderResult } from "@testing-library/react"; import { getApplicationBuilder } from "../../../../../renderer/components/test-utils/get-application-builder"; -import { getExtensionFakeFor } from "../../../../../renderer/components/test-utils/get-extension-fake"; import React from "react"; import getRandomIdInjectable from "../../../../../common/utils/get-random-id.injectable"; import { workloadOverviewDetailInjectionToken } from "../../../../../renderer/components/+workloads-overview/workload-overview-details/workload-overview-detail-injection-token"; @@ -17,16 +16,22 @@ describe("order of workload overview details", () => { beforeEach(async () => { const builder = getApplicationBuilder(); - builder.beforeApplicationStart(({ rendererDi }) => { - rendererDi.unoverride(getRandomIdInjectable); - rendererDi.permitSideEffects(getRandomIdInjectable); + builder.beforeWindowStart((windowDi) => { + windowDi.unoverride(getRandomIdInjectable); + windowDi.permitSideEffects(getRandomIdInjectable); + + windowDi.register( + someCoreItemWithLowOrderNumberInjectable, + someCoreItemWithHighOrderNumberInjectable, + someCoreItemWithDefaultOrderNumberInjectable, + ); }); builder.setEnvironmentToClusterFrame(); rendered = await builder.render(); - const testExtension = getExtensionFakeFor(builder)({ + const testExtension = { id: "some-extension-id", name: "some-extension", @@ -66,16 +71,9 @@ describe("order of workload overview details", () => { }, ], }, - }); + }; builder.extensions.enable(testExtension); - - - builder.dis.rendererDi.register( - someCoreItemWithLowOrderNumberInjectable, - someCoreItemWithHighOrderNumberInjectable, - someCoreItemWithDefaultOrderNumberInjectable, - ); }); it("shows items in correct order", () => { diff --git a/src/features/cluster/workloads/overview/extension-api/reactively-hide-workloads-overview-details-item.test.tsx b/src/features/cluster/workloads/overview/extension-api/reactively-hide-workloads-overview-details-item.test.tsx index 3b02d3dad9..fbc8ceebca 100644 --- a/src/features/cluster/workloads/overview/extension-api/reactively-hide-workloads-overview-details-item.test.tsx +++ b/src/features/cluster/workloads/overview/extension-api/reactively-hide-workloads-overview-details-item.test.tsx @@ -9,7 +9,6 @@ import React from "react"; import navigateToWorkloadsOverviewInjectable from "../../../../../common/front-end-routing/routes/cluster/workloads/overview/navigate-to-workloads-overview.injectable"; import type { ApplicationBuilder } from "../../../../../renderer/components/test-utils/get-application-builder"; import { getApplicationBuilder } from "../../../../../renderer/components/test-utils/get-application-builder"; -import { getExtensionFakeFor } from "../../../../../renderer/components/test-utils/get-extension-fake"; describe("reactively hide workloads overview details item", () => { let builder: ApplicationBuilder; @@ -19,15 +18,11 @@ describe("reactively hide workloads overview details item", () => { beforeEach(async () => { builder = getApplicationBuilder(); - const rendererDi = builder.dis.rendererDi; - builder.setEnvironmentToClusterFrame(); - const getExtensionFake = getExtensionFakeFor(builder); - someObservable = observable.box(false); - const testExtension = getExtensionFake({ + const testExtension = { id: "test-extension-id", name: "test-extension", @@ -44,11 +39,13 @@ describe("reactively hide workloads overview details item", () => { }, ], }, - }); + }; rendered = await builder.render(); - const navigateToWorkloadsOverview = rendererDi.inject( + const windowDi = builder.applicationWindow.only.di; + + const navigateToWorkloadsOverview = windowDi.inject( navigateToWorkloadsOverviewInjectable, ); diff --git a/src/features/command-pallet/keyboard-shortcuts.test.tsx b/src/features/command-pallet/keyboard-shortcuts.test.tsx index fba09862e3..ddf18b2f76 100644 --- a/src/features/command-pallet/keyboard-shortcuts.test.tsx +++ b/src/features/command-pallet/keyboard-shortcuts.test.tsx @@ -9,17 +9,20 @@ import platformInjectable from "../../common/vars/platform.injectable"; import { type ApplicationBuilder, getApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder"; describe("Command Pallet: keyboard shortcut tests", () => { - let applicationBuilder: ApplicationBuilder; + let builder: ApplicationBuilder; let rendered: RenderResult; beforeEach(async () => { - applicationBuilder = getApplicationBuilder(); + builder = getApplicationBuilder(); }); describe("when on macOS", () => { beforeEach(async () => { - applicationBuilder.dis.rendererDi.override(platformInjectable, () => "darwin"); - rendered = await applicationBuilder.render(); + builder.beforeWindowStart((windowDi) => { + windowDi.override(platformInjectable, () => "darwin"); + }); + + rendered = await builder.render(); }); it("renders", () => { @@ -83,8 +86,11 @@ describe("Command Pallet: keyboard shortcut tests", () => { describe("when on linux", () => { beforeEach(async () => { - applicationBuilder.dis.rendererDi.override(platformInjectable, () => "linux"); - rendered = await applicationBuilder.render(); + builder.beforeWindowStart((windowDi) => { + windowDi.override(platformInjectable, () => "linux"); + }); + + rendered = await builder.render(); }); it("renders", () => { diff --git a/src/features/extension-special-characters-in-page-registrations.test.tsx b/src/features/extension-special-characters-in-page-registrations.test.tsx index f30e300582..ac038a5743 100644 --- a/src/features/extension-special-characters-in-page-registrations.test.tsx +++ b/src/features/extension-special-characters-in-page-registrations.test.tsx @@ -2,30 +2,27 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { FakeExtensionData, TestExtension } from "../renderer/components/test-utils/get-renderer-extension-fake"; -import { getRendererExtensionFakeFor } from "../renderer/components/test-utils/get-renderer-extension-fake"; import React from "react"; import type { RenderResult } from "@testing-library/react"; import currentPathInjectable from "../renderer/routes/current-path.injectable"; import type { ApplicationBuilder } from "../renderer/components/test-utils/get-application-builder"; import { getApplicationBuilder } from "../renderer/components/test-utils/get-application-builder"; +import type { DiContainer } from "@ogre-tools/injectable"; +import type { FakeExtensionOptions } from "../renderer/components/test-utils/get-extension-fake"; describe("extension special characters in page registrations", () => { - let applicationBuilder: ApplicationBuilder; + let builder: ApplicationBuilder; let rendered: RenderResult; - let testExtension: TestExtension; + let windowDi: DiContainer; beforeEach(async () => { - applicationBuilder = getApplicationBuilder(); - const getRendererExtensionFake = getRendererExtensionFakeFor(applicationBuilder); + builder = getApplicationBuilder(); - testExtension = getRendererExtensionFake( - extensionWithPagesHavingSpecialCharacters, - ); + rendered = await builder.render(); - applicationBuilder.extensions.renderer.enable(testExtension); + builder.extensions.enable(extensionWithPagesHavingSpecialCharacters); - rendered = await applicationBuilder.render(); + windowDi = builder.applicationWindow.only.di; }); it("renders", () => { @@ -34,6 +31,9 @@ describe("extension special characters in page registrations", () => { describe("when navigating to route with ID having special characters", () => { beforeEach(() => { + const testExtension = + builder.extensions.get("some-extension-id").applicationWindows.only; + testExtension.navigate("/some-page-id/"); }); @@ -42,22 +42,25 @@ describe("extension special characters in page registrations", () => { }); it("knows URL", () => { - const currentPath = applicationBuilder.dis.rendererDi.inject(currentPathInjectable); + const currentPath = windowDi.inject(currentPathInjectable); expect(currentPath.get()).toBe("/extension/some-extension-name--/some-page-id"); }); }); }); -const extensionWithPagesHavingSpecialCharacters: FakeExtensionData = { +const extensionWithPagesHavingSpecialCharacters: FakeExtensionOptions = { id: "some-extension-id", name: "@some-extension-name/", - globalPages: [ - { - id: "/some-page-id/", - components: { - Page: () =>
Some page
, + + rendererOptions: { + globalPages: [ + { + id: "/some-page-id/", + components: { + Page: () =>
Some page
, + }, }, - }, - ], + ], + }, }; diff --git a/src/features/extensions/navigation-using-application-menu.test.ts b/src/features/extensions/navigation-using-application-menu.test.ts index a8b9cc55b1..a9e7e23b74 100644 --- a/src/features/extensions/navigation-using-application-menu.test.ts +++ b/src/features/extensions/navigation-using-application-menu.test.ts @@ -12,18 +12,20 @@ import focusWindowInjectable from "../../renderer/navigation/focus-window.inject jest.mock("../../renderer/components/input/input"); describe("extensions - navigation using application menu", () => { - let applicationBuilder: ApplicationBuilder; + let builder: ApplicationBuilder; let rendered: RenderResult; let focusWindowMock: jest.Mock; beforeEach(async () => { - applicationBuilder = getApplicationBuilder().beforeApplicationStart(({ rendererDi }) => { + builder = getApplicationBuilder(); + + builder.beforeWindowStart((windowDi) => { focusWindowMock = jest.fn(); - rendererDi.override(focusWindowInjectable, () => focusWindowMock); + windowDi.override(focusWindowInjectable, () => focusWindowMock); }); - rendered = await applicationBuilder.render(); + rendered = await builder.render(); }); it("renders", () => { @@ -38,7 +40,7 @@ describe("extensions - navigation using application menu", () => { describe("when navigating to extensions using application menu", () => { beforeEach(() => { - applicationBuilder.applicationMenu.click("root.extensions"); + builder.applicationMenu.click("root.extensions"); }); it("focuses the window", () => { diff --git a/src/features/helm-charts/add-custom-helm-repository-in-preferences.test.ts b/src/features/helm-charts/add-custom-helm-repository-in-preferences.test.ts index b8d9fd0661..d8e14d25fa 100644 --- a/src/features/helm-charts/add-custom-helm-repository-in-preferences.test.ts +++ b/src/features/helm-charts/add-custom-helm-repository-in-preferences.test.ts @@ -19,7 +19,7 @@ import showErrorNotificationInjectable from "../../renderer/components/notificat import type { AsyncResult } from "../../common/utils/async-result"; describe("add custom helm repository in preferences", () => { - let applicationBuilder: ApplicationBuilder; + let builder: ApplicationBuilder; let showSuccessNotificationMock: jest.Mock; let showErrorNotificationMock: jest.Mock; let rendered: RenderResult; @@ -31,41 +31,35 @@ describe("add custom helm repository in preferences", () => { beforeEach(async () => { jest.useFakeTimers(); - applicationBuilder = getApplicationBuilder(); + builder = getApplicationBuilder(); execFileMock = asyncFn(); getActiveHelmRepositoriesMock = asyncFn(); + showSuccessNotificationMock = jest.fn(); + showErrorNotificationMock = jest.fn(); - applicationBuilder.beforeApplicationStart(({ mainDi, rendererDi }) => { - rendererDi.override(callForPublicHelmRepositoriesInjectable, () => async () => []); - - showSuccessNotificationMock = jest.fn(); - - rendererDi.override(showSuccessNotificationInjectable, () => showSuccessNotificationMock); - - showErrorNotificationMock = jest.fn(); - - rendererDi.override(showErrorNotificationInjectable, () => showErrorNotificationMock); - - // TODO: Figure out how to make async validators unit testable - rendererDi.override(isPathInjectable, () => ({ debounce: 0, validate: async () => {} })); - - mainDi.override( - getActiveHelmRepositoriesInjectable, - () => getActiveHelmRepositoriesMock, - ); - + builder.beforeApplicationStart((mainDi) => { + mainDi.override(getActiveHelmRepositoriesInjectable, () => getActiveHelmRepositoriesMock); mainDi.override(execFileInjectable, () => execFileMock); mainDi.override(helmBinaryPathInjectable, () => "some-helm-binary-path"); }); - rendered = await applicationBuilder.render(); + builder.beforeWindowStart((windowDi) => { + windowDi.override(callForPublicHelmRepositoriesInjectable, () => async () => []); + windowDi.override(showSuccessNotificationInjectable, () => showSuccessNotificationMock); + windowDi.override(showErrorNotificationInjectable, () => showErrorNotificationMock); + + // TODO: Figure out how to make async validators unit testable + windowDi.override(isPathInjectable, () => ({ debounce: 0, validate: async () => {} })); + }); + + rendered = await builder.render(); }); describe("when navigating to preferences containing helm repositories", () => { beforeEach(async () => { - applicationBuilder.preferences.navigate(); - applicationBuilder.preferences.navigation.click("kubernetes"); + builder.preferences.navigate(); + builder.preferences.navigation.click("kubernetes"); }); it("renders", () => { diff --git a/src/features/helm-charts/add-helm-repository-from-list-in-preferences.test.ts b/src/features/helm-charts/add-helm-repository-from-list-in-preferences.test.ts index c16fcd893f..c46c30086e 100644 --- a/src/features/helm-charts/add-helm-repository-from-list-in-preferences.test.ts +++ b/src/features/helm-charts/add-helm-repository-from-list-in-preferences.test.ts @@ -17,7 +17,7 @@ import showErrorNotificationInjectable from "../../renderer/components/notificat import type { AsyncResult } from "../../common/utils/async-result"; describe("add helm repository from list in preferences", () => { - let applicationBuilder: ApplicationBuilder; + let builder: ApplicationBuilder; let showSuccessNotificationMock: jest.Mock; let showErrorNotificationMock: jest.Mock; let rendered: RenderResult; @@ -28,41 +28,33 @@ describe("add helm repository from list in preferences", () => { let callForPublicHelmRepositoriesMock: AsyncFnMock<() => Promise>; beforeEach(async () => { - applicationBuilder = getApplicationBuilder(); + builder = getApplicationBuilder(); execFileMock = asyncFn(); getActiveHelmRepositoriesMock = asyncFn(); callForPublicHelmRepositoriesMock = asyncFn(); + showSuccessNotificationMock = jest.fn(); + showErrorNotificationMock = jest.fn(); - applicationBuilder.beforeApplicationStart(({ mainDi, rendererDi }) => { - showSuccessNotificationMock = jest.fn(); - - rendererDi.override(showSuccessNotificationInjectable, () => showSuccessNotificationMock); - - showErrorNotificationMock = jest.fn(); - - rendererDi.override(showErrorNotificationInjectable, () => showErrorNotificationMock); - - rendererDi.override( - callForPublicHelmRepositoriesInjectable, - () => callForPublicHelmRepositoriesMock, - ); - - mainDi.override( - getActiveHelmRepositoriesInjectable, - () => getActiveHelmRepositoriesMock, - ); + builder.beforeApplicationStart((mainDi) => { + mainDi.override(getActiveHelmRepositoriesInjectable, () => getActiveHelmRepositoriesMock); mainDi.override(execFileInjectable, () => execFileMock); mainDi.override(helmBinaryPathInjectable, () => "some-helm-binary-path"); }); - rendered = await applicationBuilder.render(); + builder.beforeWindowStart((windowDi) => { + windowDi.override(showSuccessNotificationInjectable, () => showSuccessNotificationMock); + windowDi.override(showErrorNotificationInjectable, () => showErrorNotificationMock); + windowDi.override(callForPublicHelmRepositoriesInjectable, () => callForPublicHelmRepositoriesMock); + }); + + rendered = await builder.render(); }); describe("when navigating to preferences containing helm repositories", () => { - beforeEach(async () => { - applicationBuilder.preferences.navigate(); - applicationBuilder.preferences.navigation.click("kubernetes"); + beforeEach(() => { + builder.preferences.navigate(); + builder.preferences.navigation.click("kubernetes"); }); it("renders", () => { @@ -100,7 +92,7 @@ describe("add helm repository from list in preferences", () => { describe("when select for adding public repositories is clicked", () => { beforeEach(() => { - applicationBuilder.select.openMenu( + builder.select.openMenu( "selection-of-active-public-helm-repository", ); }); @@ -113,7 +105,7 @@ describe("add helm repository from list in preferences", () => { beforeEach(async () => { getActiveHelmRepositoriesMock.mockClear(); - applicationBuilder.select.selectOption( + builder.select.selectOption( "selection-of-active-public-helm-repository", "Some to be added repository", ); @@ -207,7 +199,7 @@ describe("add helm repository from list in preferences", () => { describe("when select for selecting active repositories is clicked", () => { beforeEach(() => { - applicationBuilder.select.openMenu( + builder.select.openMenu( "selection-of-active-public-helm-repository", ); }); @@ -221,7 +213,7 @@ describe("add helm repository from list in preferences", () => { execFileMock.mockClear(); getActiveHelmRepositoriesMock.mockClear(); - applicationBuilder.select.selectOption( + builder.select.selectOption( "selection-of-active-public-helm-repository", "Some already active repository", ); diff --git a/src/features/helm-charts/installing-chart/__snapshots__/installing-helm-chart-from-new-tab.test.ts.snap b/src/features/helm-charts/installing-chart/__snapshots__/installing-helm-chart-from-new-tab.test.ts.snap index 2a9f1f3ed8..600c86f0a9 100644 --- a/src/features/helm-charts/installing-chart/__snapshots__/installing-helm-chart-from-new-tab.test.ts.snap +++ b/src/features/helm-charts/installing-chart/__snapshots__/installing-helm-chart-from-new-tab.test.ts.snap @@ -1,6 +1,448 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`installing helm chart from new tab given tab for installing chart was not previously opened and application is started, when navigating to helm charts renders 1`] = ` +exports[`installing helm chart from new tab given tab for installing chart was not previously opened and application is started renders 1`] = ` + +
+
+
+