1
0
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:
Janne Savolainen 2022-05-11 08:13:40 +03:00
parent 384d39cd6c
commit 44e0ebc10d
No known key found for this signature in database
GPG Key ID: 8C6CFB2FFFE8F68A
12 changed files with 79 additions and 54 deletions

View File

@ -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();
});

View File

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

View File

@ -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();
});

View File

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

View File

@ -0,0 +1,18 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import 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;

View File

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

View File

@ -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() {

View File

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

View File

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

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

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

View File

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