mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Extract updating is enabled to separate injectable
Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>
This commit is contained in:
parent
384d39cd6c
commit
44e0ebc10d
@ -6,16 +6,17 @@
|
||||
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 isAutoUpdateEnabledInjectable from "../../main/update-app/is-auto-update-enabled.injectable";
|
||||
import React from "react";
|
||||
|
||||
// TODO: Make components free of side effects by making them deterministic
|
||||
jest.mock("../../renderer/components/tooltip/tooltip", () => ({
|
||||
Tooltip: () => null,
|
||||
}));
|
||||
|
||||
jest.mock("../../renderer/components/tooltip/withTooltip", () => ({
|
||||
withTooltip: (Target: any) => ({ tooltip, tooltipOverrideDisabled, ...props }: any) => <Target {...props} />,
|
||||
}));
|
||||
|
||||
jest.mock("../../renderer/components/monaco-editor/monaco-editor", () => ({
|
||||
MonacoEditor: () => null,
|
||||
}));
|
||||
@ -25,9 +26,7 @@ describe("add-cluster - navigation using application menu", () => {
|
||||
let rendered: RenderResult;
|
||||
|
||||
beforeEach(async () => {
|
||||
applicationBuilder = getApplicationBuilder().beforeApplicationStart(({ mainDi }) => {
|
||||
mainDi.override(isAutoUpdateEnabledInjectable, () => () => false);
|
||||
});
|
||||
applicationBuilder = getApplicationBuilder();
|
||||
|
||||
rendered = await applicationBuilder.render();
|
||||
});
|
||||
|
||||
@ -6,7 +6,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 isAutoUpdateEnabledInjectable from "../../main/update-app/is-auto-update-enabled.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";
|
||||
@ -22,8 +21,7 @@ describe("extensions - navigation using application menu", () => {
|
||||
let focusWindowMock: jest.Mock;
|
||||
|
||||
beforeEach(async () => {
|
||||
applicationBuilder = getApplicationBuilder().beforeApplicationStart(({ mainDi, rendererDi }) => {
|
||||
mainDi.override(isAutoUpdateEnabledInjectable, () => () => false);
|
||||
applicationBuilder = getApplicationBuilder().beforeApplicationStart(({ rendererDi }) => {
|
||||
rendererDi.override(extensionsStoreInjectable, () => ({}) as unknown as ExtensionsStore);
|
||||
rendererDi.override(fileSystemProvisionerStoreInjectable, () => ({}) as unknown as FileSystemProvisionerStore);
|
||||
|
||||
|
||||
@ -6,16 +6,13 @@
|
||||
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 isAutoUpdateEnabledInjectable from "../../main/update-app/is-auto-update-enabled.injectable";
|
||||
|
||||
describe("welcome - navigation using application menu", () => {
|
||||
let applicationBuilder: ApplicationBuilder;
|
||||
let rendered: RenderResult;
|
||||
|
||||
beforeEach(async () => {
|
||||
applicationBuilder = getApplicationBuilder().beforeApplicationStart(({ mainDi }) => {
|
||||
mainDi.override(isAutoUpdateEnabledInjectable, () => () => false);
|
||||
});
|
||||
applicationBuilder = getApplicationBuilder();
|
||||
|
||||
rendered = await applicationBuilder.render();
|
||||
});
|
||||
|
||||
@ -38,15 +38,15 @@ autoUpdater.logger = {
|
||||
};
|
||||
|
||||
interface Dependencies {
|
||||
isAutoUpdateEnabled: () => boolean;
|
||||
updatingIsEnabled: boolean;
|
||||
}
|
||||
|
||||
/**
|
||||
* starts the automatic update checking
|
||||
* @param interval milliseconds between interval to check on, defaults to 2h
|
||||
*/
|
||||
export const startUpdateChecking = ({ isAutoUpdateEnabled } : Dependencies) => once(function (interval = 1000 * 60 * 60 * 2): void {
|
||||
if (!isAutoUpdateEnabled() || isTestEnv) {
|
||||
export const startUpdateChecking = ({ updatingIsEnabled } : Dependencies) => once(function (interval = 1000 * 60 * 60 * 2): void {
|
||||
if (!updatingIsEnabled || isTestEnv) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,18 @@
|
||||
/**
|
||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
import { getInjectable } from "@ogre-tools/injectable";
|
||||
import electronUpdaterInjectable from "./electron-updater.injectable";
|
||||
|
||||
const electronUpdaterIsActiveInjectable = getInjectable({
|
||||
id: "electron-updater-is-active",
|
||||
|
||||
instantiate: (di) => {
|
||||
const electronUpdater = di.inject(electronUpdaterInjectable);
|
||||
|
||||
return electronUpdater.isUpdaterActive();
|
||||
},
|
||||
});
|
||||
|
||||
export default electronUpdaterIsActiveInjectable;
|
||||
@ -31,7 +31,6 @@ 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 type { GetDiForUnitTestingOptions } from "../test-utils/get-dis-for-unit-testing";
|
||||
import isAutoUpdateEnabledInjectable from "./update-app/is-auto-update-enabled.injectable";
|
||||
import appEventBusInjectable from "../common/app-event-bus/app-event-bus.injectable";
|
||||
import { EventEmitter } from "../common/event-emitter";
|
||||
import type { AppEvent } from "../common/app-event-bus/event-bus";
|
||||
@ -80,7 +79,8 @@ import platformInjectable from "../common/vars/platform.injectable";
|
||||
import productNameInjectable from "./app-paths/app-name/product-name.injectable";
|
||||
import syncUpdateIsReadyToBeInstalledInjectable from "./electron-app/runnables/update-application/sync-update-is-ready-to-be-installed.injectable";
|
||||
import quitAndInstallUpdateInjectable from "./electron-app/features/quit-and-install-update.injectable";
|
||||
import packageJsonInjectable from "../common/vars/package-json.injectable";
|
||||
import electronUpdaterIsActiveInjectable from "./electron-app/features/electron-updater-is-active.injectable";
|
||||
import publishIsConfiguredInjectable from "./update-app/publish-is-configured.injectable";
|
||||
|
||||
export function getDiForUnitTesting(opts: GetDiForUnitTestingOptions = {}) {
|
||||
const {
|
||||
@ -117,7 +117,6 @@ export function getDiForUnitTesting(opts: GetDiForUnitTestingOptions = {}) {
|
||||
di.override(isDevelopmentInjectable, () => false);
|
||||
di.override(environmentVariablesInjectable, () => ({}));
|
||||
di.override(commandLineArgumentsInjectable, () => []);
|
||||
di.override(packageJsonInjectable, () => ({}));
|
||||
|
||||
di.override(productNameInjectable, () => "some-product-name");
|
||||
|
||||
@ -245,6 +244,8 @@ const overrideElectronFeatures = (di: DiContainer) => {
|
||||
);
|
||||
|
||||
di.override(setElectronAppPathInjectable, () => () => {});
|
||||
di.override(isAutoUpdateEnabledInjectable, () => () => false);
|
||||
di.override(registerFileProtocolInjectable, () => () => {});
|
||||
|
||||
di.override(publishIsConfiguredInjectable, () => false);
|
||||
di.override(electronUpdaterIsActiveInjectable, () => false);
|
||||
};
|
||||
|
||||
@ -12,7 +12,7 @@ import { webContents } from "electron";
|
||||
import loggerInjectable from "../../common/logger.injectable";
|
||||
import appNameInjectable from "../app-paths/app-name/app-name.injectable";
|
||||
import electronMenuItemsInjectable from "./electron-menu-items.injectable";
|
||||
import isAutoUpdateEnabledInjectable from "../update-app/is-auto-update-enabled.injectable";
|
||||
import updatingIsEnabledInjectable from "../update-app/updating-is-enabled.injectable";
|
||||
import navigateToPreferencesInjectable from "../../common/front-end-routing/routes/preferences/navigate-to-preferences.injectable";
|
||||
import navigateToExtensionsInjectable from "../../common/front-end-routing/routes/extensions/navigate-to-extensions.injectable";
|
||||
import navigateToCatalogInjectable from "../../common/front-end-routing/routes/catalog/navigate-to-catalog.injectable";
|
||||
@ -41,7 +41,7 @@ const applicationMenuItemsInjectable = getInjectable({
|
||||
const logger = di.inject(loggerInjectable);
|
||||
const appName = di.inject(appNameInjectable);
|
||||
const isMac = di.inject(isMacInjectable);
|
||||
const isAutoUpdateEnabled = di.inject(isAutoUpdateEnabledInjectable);
|
||||
const updatingIsEnabled = di.inject(updatingIsEnabledInjectable);
|
||||
const electronMenuItems = di.inject(electronMenuItemsInjectable);
|
||||
const showAbout = di.inject(showAboutInjectable);
|
||||
const applicationWindow = di.inject(applicationWindowInjectable);
|
||||
@ -54,11 +54,9 @@ const applicationMenuItemsInjectable = getInjectable({
|
||||
const navigateToAddCluster = di.inject(navigateToAddClusterInjectable);
|
||||
const stopServicesAndExitApp = di.inject(stopServicesAndExitAppInjectable);
|
||||
|
||||
logger.info(`[MENU]: autoUpdateEnabled=${updatingIsEnabled}`);
|
||||
|
||||
return computed((): MenuItemOpts[] => {
|
||||
const autoUpdateDisabled = !isAutoUpdateEnabled();
|
||||
|
||||
logger.info(`[MENU]: autoUpdateDisabled=${autoUpdateDisabled}`);
|
||||
|
||||
const macAppMenu: MenuItemOpts = {
|
||||
label: appName,
|
||||
id: "root",
|
||||
@ -70,7 +68,7 @@ const applicationMenuItemsInjectable = getInjectable({
|
||||
showAbout();
|
||||
},
|
||||
},
|
||||
...ignoreIf(autoUpdateDisabled, [
|
||||
...ignoreIf(!updatingIsEnabled, [
|
||||
{
|
||||
label: "Check for updates",
|
||||
click() {
|
||||
@ -282,7 +280,7 @@ const applicationMenuItemsInjectable = getInjectable({
|
||||
showAbout();
|
||||
},
|
||||
},
|
||||
...ignoreIf(autoUpdateDisabled, [
|
||||
...ignoreIf(!updatingIsEnabled, [
|
||||
{
|
||||
label: "Check for updates",
|
||||
click() {
|
||||
|
||||
@ -4,13 +4,13 @@
|
||||
*/
|
||||
import { getInjectable } from "@ogre-tools/injectable";
|
||||
import { startUpdateChecking } from "./app-updater";
|
||||
import isAutoUpdateEnabledInjectable from "./update-app/is-auto-update-enabled.injectable";
|
||||
import updatingIsEnabledInjectable from "./update-app/updating-is-enabled.injectable";
|
||||
|
||||
const startUpdateCheckingInjectable = getInjectable({
|
||||
id: "start-update-checking",
|
||||
|
||||
instantiate: (di) => startUpdateChecking({
|
||||
isAutoUpdateEnabled: di.inject(isAutoUpdateEnabledInjectable),
|
||||
updatingIsEnabled: di.inject(updatingIsEnabledInjectable),
|
||||
}),
|
||||
|
||||
causesSideEffects: true,
|
||||
|
||||
@ -1,24 +0,0 @@
|
||||
/**
|
||||
* 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 electronUpdaterInjectable from "../electron-app/features/electron-updater.injectable";
|
||||
import packageJsonInjectable from "../../common/vars/package-json.injectable";
|
||||
|
||||
const isAutoUpdateEnabledInjectable = getInjectable({
|
||||
id: "is-auto-update-enabled",
|
||||
|
||||
instantiate: (di) => {
|
||||
const electronUpdater = di.inject(electronUpdaterInjectable);
|
||||
const packageJson = di.inject(packageJsonInjectable);
|
||||
|
||||
const isPublishConfigured = Object.keys(packageJson.build).includes("publish");
|
||||
|
||||
return () => {
|
||||
return electronUpdater.isUpdaterActive() && isPublishConfigured;
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
export default isAutoUpdateEnabledInjectable;
|
||||
20
src/main/update-app/publish-is-configured.injectable.ts
Normal file
20
src/main/update-app/publish-is-configured.injectable.ts
Normal file
@ -0,0 +1,20 @@
|
||||
/**
|
||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
import { getInjectable } from "@ogre-tools/injectable";
|
||||
import packageJsonInjectable from "../../common/vars/package-json.injectable";
|
||||
import { has } from "lodash/fp";
|
||||
|
||||
// TOOO: Rename to something less technical
|
||||
const publishIsConfiguredInjectable = getInjectable({
|
||||
id: "publish-is-configured",
|
||||
|
||||
instantiate: (di) => {
|
||||
const packageJson = di.inject(packageJsonInjectable);
|
||||
|
||||
return has("build.publish", packageJson);
|
||||
},
|
||||
});
|
||||
|
||||
export default publishIsConfiguredInjectable;
|
||||
20
src/main/update-app/updating-is-enabled.injectable.ts
Normal file
20
src/main/update-app/updating-is-enabled.injectable.ts
Normal file
@ -0,0 +1,20 @@
|
||||
/**
|
||||
* 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 electronUpdaterIsActiveInjectable from "../electron-app/features/electron-updater-is-active.injectable";
|
||||
import publishIsConfiguredInjectable from "./publish-is-configured.injectable";
|
||||
|
||||
const updatingIsEnabledInjectable = getInjectable({
|
||||
id: "updating-is-enabled",
|
||||
|
||||
instantiate: (di) => {
|
||||
const electronUpdaterIsActive = di.inject(electronUpdaterIsActiveInjectable);
|
||||
const publishIsConfigured = di.inject(publishIsConfiguredInjectable);
|
||||
|
||||
return electronUpdaterIsActive && publishIsConfigured;
|
||||
},
|
||||
});
|
||||
|
||||
export default updatingIsEnabledInjectable;
|
||||
@ -44,7 +44,6 @@ import setupOnApiErrorListenersInjectable from "./api/setup-on-api-errors.inject
|
||||
import { observable } from "mobx";
|
||||
import defaultShellInjectable from "./components/+preferences/default-shell.injectable";
|
||||
import themeStoreInjectable from "./themes/store.injectable";
|
||||
import packageJsonInjectable from "../common/vars/package-json.injectable";
|
||||
|
||||
export const getDiForUnitTesting = (opts: GetDiForUnitTestingOptions = {}) => {
|
||||
const {
|
||||
@ -70,7 +69,6 @@ export const getDiForUnitTesting = (opts: GetDiForUnitTestingOptions = {}) => {
|
||||
di.override(isMacInjectable, () => true);
|
||||
di.override(isWindowsInjectable, () => false);
|
||||
di.override(isLinuxInjectable, () => false);
|
||||
di.override(packageJsonInjectable, () => ({}));
|
||||
|
||||
di.override(terminalSpawningPoolInjectable, () => document.createElement("div"));
|
||||
di.override(hostedClusterIdInjectable, () => undefined);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user