mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
* Give an UpdateButton injectables Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * AppUpdateWarning class and injectable Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Rename folder to app-update-warning Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Add appPublishDateInjectable Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Inject ipcRenderer into app-update-warning Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Add setter for downloadedUpdateDate Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Add tests for AppUpdateWarning Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * appPublishDate initial test Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Parsing app release date from the package version Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Introduce appUpdateWarningLevelInjectable Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Fix withInjectables props Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Determine warning from days passed after update available Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Save update available date in session storage Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Move quitAndInstall() to separate function Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Register quit-and-install ipc channel Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Make update function injectable for button Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Update tests Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Set proper timeframes Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Setting global UTC timezone for tests Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Refresh tests Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Testing warning level changes over time Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Remove unused app-publish-date files Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Make linter happy Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Pass quitAndInstallUpdateInjectable to UpdateButton Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Remove updateAppInjectable Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Initial tests for installing update using topbar button Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Refactor AppUpdateWarning class using injectables Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Permit side effects in injectable periodicalCheckForUpdateWarningInjectable Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Temporarily set noop for UpdateButton update() Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Remove previous implementation files Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Unoverriding topbar injectables Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Render TopBar inside ApplicationBuilder Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Move updateWarningLevelInjectable to /common subfolders from /main Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Make UpdateButton warning prop observable by using computed() structure Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Updating snapshots Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Add sync box files allowing to restart & install update from renderer process Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Add Update button dropdown tests Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Fix jest.advanceTimersByTime usage Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Check for severe warning level Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Linter fixes Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Remove usage of legacy global causing trouble in unit tests Co-authored-by: Alex Andreev <alex.andreev.email@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Make update warning level completely reactive and responsibility of a renderer Co-authored-by: Alex Andreev <alex.andreev.email@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Remove dead code Co-authored-by: Alex Andreev <alex.andreev.email@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Remove tests that are covered by behaviour Co-authored-by: Alex Andreev <alex.andreev.email@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Fix restarting and installing update when pressing update button Co-authored-by: Alex Andreev <alex.andreev.email@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Update snapshots Co-authored-by: Alex Andreev <alex.andreev.email@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Remove dead code Co-authored-by: Alex Andreev <alex.andreev.email@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Update more snapshots Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Remove duplication from behavioural unit test Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Reducing too large MenuItems height Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Reduce too large UpdateButton paddings Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Add jest globalSetup into package.json to fix timezone test Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Do not triggering computed value every time it is being used Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> Co-authored-by: Janne Savolainen <janne.savolainen@live.fi>
186 lines
8.6 KiB
TypeScript
186 lines
8.6 KiB
TypeScript
/**
|
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
|
*/
|
|
|
|
import glob from "glob";
|
|
import { memoize, noop } from "lodash/fp";
|
|
import type {
|
|
DiContainer,
|
|
Injectable } from "@ogre-tools/injectable";
|
|
import {
|
|
createContainer,
|
|
} from "@ogre-tools/injectable";
|
|
import { Environments, setLegacyGlobalDiForExtensionApi } from "../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";
|
|
import requestFromChannelInjectable from "./utils/channel/request-from-channel.injectable";
|
|
import loggerInjectable from "../common/logger.injectable";
|
|
import { overrideFsWithFakes } from "../test-utils/override-fs-with-fakes";
|
|
import { createMemoryHistory } from "history";
|
|
import focusWindowInjectable from "./navigation/focus-window.injectable";
|
|
import extensionsStoreInjectable from "../extensions/extensions-store/extensions-store.injectable";
|
|
import type { ExtensionsStore } from "../extensions/extensions-store/extensions-store";
|
|
import fileSystemProvisionerStoreInjectable from "../extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store.injectable";
|
|
import type { FileSystemProvisionerStore } from "../extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store";
|
|
import clusterStoreInjectable from "../common/cluster-store/cluster-store.injectable";
|
|
import type { ClusterStore } from "../common/cluster-store/cluster-store";
|
|
import type { Cluster } from "../common/cluster/cluster";
|
|
import userStoreInjectable from "../common/user-store/user-store.injectable";
|
|
import type { UserStore } from "../common/user-store";
|
|
import getAbsolutePathInjectable from "../common/path/get-absolute-path.injectable";
|
|
import { getAbsolutePathFake } from "../common/test-utils/get-absolute-path-fake";
|
|
import joinPathsInjectable from "../common/path/join-paths.injectable";
|
|
import { joinPathsFake } from "../common/test-utils/join-paths-fake";
|
|
import hotbarStoreInjectable from "../common/hotbars/store.injectable";
|
|
import terminalSpawningPoolInjectable from "./components/dock/terminal/terminal-spawning-pool.injectable";
|
|
import hostedClusterIdInjectable from "./cluster-frame-context/hosted-cluster-id.injectable";
|
|
import historyInjectable from "./navigation/history.injectable";
|
|
import { ApiManager } from "../common/k8s-api/api-manager";
|
|
import lensResourcesDirInjectable from "../common/vars/lens-resources-dir.injectable";
|
|
import broadcastMessageInjectable from "../common/ipc/broadcast-message.injectable";
|
|
import apiManagerInjectable from "../common/k8s-api/api-manager/manager.injectable";
|
|
import ipcRendererInjectable from "./utils/channel/ipc-renderer.injectable";
|
|
import type { IpcRenderer } from "electron";
|
|
import setupOnApiErrorListenersInjectable from "./api/setup-on-api-errors.injectable";
|
|
import { observable } from "mobx";
|
|
import defaultShellInjectable from "./components/+preferences/default-shell.injectable";
|
|
import appVersionInjectable from "../common/get-configuration-file-model/app-version/app-version.injectable";
|
|
import provideInitialValuesForSyncBoxesInjectable from "./utils/sync-box/provide-initial-values-for-sync-boxes.injectable";
|
|
import requestAnimationFrameInjectable from "./components/animate/request-animation-frame.injectable";
|
|
import getRandomIdInjectable from "../common/utils/get-random-id.injectable";
|
|
import getFilePathsInjectable from "./components/+preferences/kubernetes/helm-charts/adding-of-custom-helm-repository/helm-file-input/get-file-paths.injectable";
|
|
import callForPublicHelmRepositoriesInjectable from "./components/+preferences/kubernetes/helm-charts/adding-of-public-helm-repository/public-helm-repositories/call-for-public-helm-repositories.injectable";
|
|
import platformInjectable from "../common/vars/platform.injectable";
|
|
import startTopbarStateSyncInjectable from "./components/layout/top-bar/start-state-sync.injectable";
|
|
import { registerMobX } from "@ogre-tools/injectable-extension-for-mobx";
|
|
import watchHistoryStateInjectable from "./remote-helpers/watch-history-state.injectable";
|
|
import openAppContextMenuInjectable from "./components/layout/top-bar/open-app-context-menu.injectable";
|
|
import goBackInjectable from "./components/layout/top-bar/go-back.injectable";
|
|
import goForwardInjectable from "./components/layout/top-bar/go-forward.injectable";
|
|
import closeWindowInjectable from "./components/layout/top-bar/close-window.injectable";
|
|
import maximizeWindowInjectable from "./components/layout/top-bar/maximize-window.injectable";
|
|
import toggleMaximizeWindowInjectable from "./components/layout/top-bar/toggle-maximize-window.injectable";
|
|
|
|
export const getDiForUnitTesting = (opts: { doGeneralOverrides?: boolean } = {}) => {
|
|
const {
|
|
doGeneralOverrides = false,
|
|
} = opts;
|
|
|
|
const di = createContainer("renderer");
|
|
|
|
registerMobX(di);
|
|
|
|
setLegacyGlobalDiForExtensionApi(di, Environments.renderer);
|
|
|
|
for (const filePath of getInjectableFilePaths()) {
|
|
const injectableInstance = require(filePath).default;
|
|
|
|
di.register({
|
|
...injectableInstance,
|
|
aliases: [injectableInstance, ...(injectableInstance.aliases || [])],
|
|
});
|
|
}
|
|
|
|
di.preventSideEffects();
|
|
|
|
if (doGeneralOverrides) {
|
|
di.override(getRandomIdInjectable, () => () => "some-irrelevant-random-id");
|
|
di.override(platformInjectable, () => "darwin");
|
|
di.override(startTopbarStateSyncInjectable, () => ({
|
|
run: () => {},
|
|
}));
|
|
|
|
di.override(terminalSpawningPoolInjectable, () => document.createElement("div"));
|
|
di.override(hostedClusterIdInjectable, () => undefined);
|
|
|
|
di.override(getAbsolutePathInjectable, () => getAbsolutePathFake);
|
|
di.override(joinPathsInjectable, () => joinPathsFake);
|
|
|
|
di.override(appVersionInjectable, () => "1.0.0");
|
|
|
|
di.override(historyInjectable, () => createMemoryHistory());
|
|
|
|
di.override(requestAnimationFrameInjectable, () => (callback) => callback());
|
|
|
|
di.override(lensResourcesDirInjectable, () => "/irrelevant");
|
|
|
|
di.override(watchHistoryStateInjectable, () => () => () => {});
|
|
|
|
di.override(openAppContextMenuInjectable, () => () => {});
|
|
di.override(goBackInjectable, () => () => {});
|
|
di.override(goForwardInjectable, () => () => {});
|
|
di.override(closeWindowInjectable, () => () => {});
|
|
di.override(maximizeWindowInjectable, () => () => {});
|
|
di.override(toggleMaximizeWindowInjectable, () => () => {});
|
|
|
|
di.override(ipcRendererInjectable, () => ({
|
|
invoke: () => {},
|
|
on: () => {},
|
|
}) as unknown as IpcRenderer);
|
|
|
|
overrideFunctionalInjectables(di, [
|
|
broadcastMessageInjectable,
|
|
getFilePathsInjectable,
|
|
callForPublicHelmRepositoriesInjectable,
|
|
]);
|
|
|
|
// eslint-disable-next-line unused-imports/no-unused-vars-ts
|
|
di.override(extensionsStoreInjectable, () => ({ isEnabled: ({ id, isBundled }) => false }) as ExtensionsStore);
|
|
|
|
di.override(hotbarStoreInjectable, () => ({}));
|
|
|
|
di.override(fileSystemProvisionerStoreInjectable, () => ({}) as FileSystemProvisionerStore);
|
|
|
|
// eslint-disable-next-line unused-imports/no-unused-vars-ts
|
|
di.override(clusterStoreInjectable, () => ({ getById: (id): Cluster => ({}) as Cluster }) as ClusterStore);
|
|
|
|
di.override(setupOnApiErrorListenersInjectable, () => ({ run: () => {} }));
|
|
di.override(provideInitialValuesForSyncBoxesInjectable, () => ({ run: () => {} }));
|
|
|
|
di.override(defaultShellInjectable, () => "some-default-shell");
|
|
|
|
di.override(
|
|
userStoreInjectable,
|
|
() =>
|
|
({
|
|
isTableColumnHidden: () => false,
|
|
extensionRegistryUrl: { customUrl: "some-custom-url" },
|
|
syncKubeconfigEntries: observable.map(),
|
|
terminalConfig: { fontSize: 42 },
|
|
editorConfiguration: { minimap: {}, tabSize: 42, fontSize: 42 },
|
|
} as unknown as UserStore),
|
|
);
|
|
|
|
di.override(apiManagerInjectable, () => new ApiManager());
|
|
|
|
di.override(requestFromChannelInjectable, () => () => Promise.resolve(undefined as never));
|
|
|
|
overrideFsWithFakes(di);
|
|
|
|
di.override(focusWindowInjectable, () => () => {});
|
|
|
|
di.override(loggerInjectable, () => ({
|
|
warn: noop,
|
|
debug: noop,
|
|
error: noop,
|
|
info: noop,
|
|
silly: noop,
|
|
}));
|
|
}
|
|
|
|
return di;
|
|
};
|
|
|
|
const getInjectableFilePaths = memoize(() => [
|
|
...glob.sync("./**/*.injectable.{ts,tsx}", { cwd: __dirname }),
|
|
...glob.sync("../common/**/*.injectable.{ts,tsx}", { cwd: __dirname }),
|
|
...glob.sync("../extensions/**/*.injectable.{ts,tsx}", { cwd: __dirname }),
|
|
]);
|
|
|
|
const overrideFunctionalInjectables = (di: DiContainer, injectables: Injectable<any, any, any>[]) => {
|
|
injectables.forEach(injectable => {
|
|
di.override(injectable, () => () => {
|
|
throw new Error(`Tried to run "${injectable.id}" without explicit override.`);
|
|
});
|
|
});
|
|
};
|