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

Add behaviours for quitting the application using application menu

Co-authored-by: Janne Savolainen <janne.savolainen@live.fi>

Signed-off-by: Iku-turso <mikko.aspiala@gmail.com>
This commit is contained in:
Iku-turso 2022-06-01 15:02:58 +03:00 committed by Janne Savolainen
parent a0a181702d
commit 9ea452d399
No known key found for this signature in database
GPG Key ID: 8C6CFB2FFFE8F68A
2 changed files with 91 additions and 1 deletions

View File

@ -0,0 +1,90 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import type { ApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder";
import { getApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder";
import type { ClusterManager } from "../../main/cluster-manager";
import { lensWindowInjectionToken } from "../../main/start-main-application/lens-window/application-window/lens-window-injection-token";
import exitAppInjectable from "../../main/electron-app/features/exit-app.injectable";
import clusterManagerInjectable from "../../main/cluster-manager.injectable";
import stopServicesAndExitAppInjectable from "../../main/stop-services-and-exit-app.injectable";
describe("quitting the app using application menu", () => {
describe("given application has started", () => {
let applicationBuilder: ApplicationBuilder;
let clusterManagerStub: ClusterManager;
let exitAppMock: jest.Mock;
beforeEach(async () => {
jest.useFakeTimers();
applicationBuilder = getApplicationBuilder().beforeApplicationStart(
({ mainDi }) => {
mainDi.unoverride(stopServicesAndExitAppInjectable);
clusterManagerStub = { stop: jest.fn() } as unknown as ClusterManager;
mainDi.override(clusterManagerInjectable, () => clusterManagerStub);
exitAppMock = jest.fn();
mainDi.override(exitAppInjectable, () => exitAppMock);
},
);
await applicationBuilder.render();
});
it("only an application window is open", () => {
const windows = applicationBuilder.dis.mainDi.injectMany(
lensWindowInjectionToken,
);
expect(
windows.map((window) => ({ id: window.id, visible: window.visible })),
).toEqual([
{ id: "only-application-window", visible: true },
{ id: "splash", visible: false },
]);
});
describe("when application is quit", () => {
beforeEach(async () => {
await applicationBuilder.applicationMenu.click("root.quit");
});
it("closes all windows", () => {
const windows = applicationBuilder.dis.mainDi.injectMany(
lensWindowInjectionToken,
);
expect(
windows.map((window) => ({ id: window.id, visible: window.visible })),
).toEqual([
{ id: "only-application-window", visible: false },
{ id: "splash", visible: false },
]);
});
it("disconnects all clusters", () => {
expect(clusterManagerStub.stop).toHaveBeenCalled();
});
it("after insufficient time passes, does not terminate application yet", () => {
jest.advanceTimersByTime(999);
expect(exitAppMock).not.toHaveBeenCalled();
});
describe("after sufficient time passes", () => {
beforeEach(() => {
jest.advanceTimersByTime(1000);
});
it("terminates application", () => {
expect(exitAppMock).toHaveBeenCalled();
});
});
});
});
});

View File

@ -242,7 +242,7 @@ const overrideElectronFeatures = (di: DiContainer) => {
di.override(getCommandLineSwitchInjectable, () => () => "irrelevant");
di.override(requestSingleInstanceLockInjectable, () => () => true);
di.override(disableHardwareAccelerationInjectable, () => () => {});
di.override(shouldStartHiddenInjectable, () => true);
di.override(shouldStartHiddenInjectable, () => false);
di.override(showMessagePopupInjectable, () => () => {});
di.override(waitForElectronToBeReadyInjectable, () => () => Promise.resolve());
di.override(ipcMainInjectable, () => ({}));