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

Fix tests by making the setup more like the real application

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2022-11-02 11:29:18 -04:00
parent a70992e005
commit fe9f585b71
20 changed files with 187 additions and 167 deletions

View File

@ -15,16 +15,18 @@ import clusterStoreInjectable from "../cluster-store/cluster-store.injectable";
import type { DiContainer } from "@ogre-tools/injectable";
import type { CreateCluster } from "../cluster/create-cluster-injection-token";
import { createClusterInjectionToken } from "../cluster/create-cluster-injection-token";
import directoryForUserDataInjectable from "../app-paths/directory-for-user-data.injectable";
import { getDiForUnitTesting } from "../../main/getDiForUnitTesting";
import getConfigurationFileModelInjectable from "../get-configuration-file-model/get-configuration-file-model.injectable";
import assert from "assert";
import directoryForTempInjectable from "../app-paths/directory-for-temp.injectable";
import kubectlBinaryNameInjectable from "../../main/kubectl/binary-name.injectable";
import kubectlDownloadingNormalizedArchInjectable from "../../main/kubectl/normalized-arch.injectable";
import normalizedPlatformInjectable from "../vars/normalized-platform.injectable";
import fsInjectable from "../fs/fs.injectable";
import storeMigrationVersionInjectable from "../vars/store-migration-version.injectable";
import { beforeApplicationIsLoadingInjectionToken } from "../../main/start-main-application/runnable-tokens/before-application-is-loading-injection-token";
import { beforeElectronIsReadyInjectionToken } from "../../main/start-main-application/runnable-tokens/before-electron-is-ready-injection-token";
import { runManyFor } from "../runnable/run-many-for";
import { runManySyncFor } from "../runnable/run-many-sync-for";
console = new Console(stdout, stderr);
@ -86,12 +88,14 @@ describe("cluster-store", () => {
mockFs();
mainDi.override(directoryForUserDataInjectable, () => ({
get: () => "some-directory-for-user-data",
}));
mainDi.override(directoryForTempInjectable, () => ({
get: () => "some-directory-for-temp",
}));
const runManySync = runManySyncFor(mainDi);
const runMany = runManyFor(mainDi);
const runAllBeforeElectronIsReady = runManySync(beforeElectronIsReadyInjectionToken);
const runAllBeforeApplicationIsLoading = runMany(beforeApplicationIsLoadingInjectionToken);
runAllBeforeElectronIsReady();
await runAllBeforeApplicationIsLoading();
mainDi.override(kubectlBinaryNameInjectable, () => "kubectl");
mainDi.override(kubectlDownloadingNormalizedArchInjectable, () => "amd64");
mainDi.override(normalizedPlatformInjectable, () => "darwin");
@ -213,7 +217,7 @@ describe("cluster-store", () => {
beforeEach(() => {
const mockOpts = {
"temp-kube-config": kubeconfig,
"some-directory-for-user-data": {
"/some-electron-app-path-for-user-data": {
"lens-cluster-store.json": JSON.stringify({
__internal__: {
migrations: {
@ -304,7 +308,7 @@ users:
const mockOpts = {
"invalid-kube-config": invalidKubeconfig,
"valid-kube-config": kubeconfig,
"some-directory-for-user-data": {
"/some-electron-app-path-for-user-data": {
"lens-cluster-store.json": JSON.stringify({
__internal__: {
migrations: {
@ -352,7 +356,7 @@ users:
describe("pre 3.6.0-beta.1 config with an existing cluster", () => {
beforeEach(() => {
const mockOpts = {
"some-directory-for-user-data": {
"/some-electron-app-path-for-user-data": {
"lens-cluster-store.json": JSON.stringify({
__internal__: {
migrations: {

View File

@ -26,14 +26,16 @@ import { Console } from "console";
import { stdout, stderr } from "process";
import userStoreInjectable from "../user-store/user-store.injectable";
import type { DiContainer } from "@ogre-tools/injectable";
import directoryForUserDataInjectable from "../app-paths/directory-for-user-data.injectable";
import type { ClusterStoreModel } from "../cluster-store/cluster-store";
import { defaultThemeId } from "../vars";
import writeFileInjectable from "../fs/write-file.injectable";
import { getDiForUnitTesting } from "../../main/getDiForUnitTesting";
import getConfigurationFileModelInjectable from "../get-configuration-file-model/get-configuration-file-model.injectable";
import storeMigrationVersionInjectable from "../vars/store-migration-version.injectable";
import releaseChannelInjectable from "../vars/release-channel.injectable";
import { beforeApplicationIsLoadingInjectionToken } from "../../main/start-main-application/runnable-tokens/before-application-is-loading-injection-token";
import { beforeElectronIsReadyInjectionToken } from "../../main/start-main-application/runnable-tokens/before-electron-is-ready-injection-token";
import { runManyFor } from "../runnable/run-many-for";
import { runManySyncFor } from "../runnable/run-many-sync-for";
console = new Console(stdout, stderr);
@ -47,18 +49,16 @@ describe("user store tests", () => {
mockFs();
di.override(writeFileInjectable, () => () => Promise.resolve());
di.override(directoryForUserDataInjectable, () => ({
get: () => "some-directory-for-user-data",
}));
di.permitSideEffects(getConfigurationFileModelInjectable);
di.permitSideEffects(userStoreInjectable);
di.override(releaseChannelInjectable, () => ({
get: () => "latest" as const,
init: async () => {},
}));
di.unoverride(userStoreInjectable);
const runManySync = runManySyncFor(di);
const runAllBeforeElectronIsReady = runManySync(beforeElectronIsReadyInjectionToken);
runAllBeforeElectronIsReady();
});
afterEach(() => {
@ -66,11 +66,15 @@ describe("user store tests", () => {
});
describe("for an empty config", () => {
beforeEach(() => {
mockFs({ "some-directory-for-user-data": { "config.json": "{}", "kube_config": "{}" }});
beforeEach(async () => {
mockFs({ "/some-electron-app-path-for-user-data": { "config.json": "{}", "kube_config": "{}" }});
userStore = di.inject(userStoreInjectable);
userStore.load();
const runMany = runManyFor(di);
const runAllBeforeApplicationIsLoading = runMany(beforeApplicationIsLoadingInjectionToken);
await runAllBeforeApplicationIsLoading();
});
it("allows setting and retrieving lastSeenAppVersion", () => {
@ -96,9 +100,9 @@ describe("user store tests", () => {
});
describe("migrations", () => {
beforeEach(() => {
beforeEach(async () => {
mockFs({
"some-directory-for-user-data": {
"/some-electron-app-path-for-user-data": {
"config.json": JSON.stringify({
user: { username: "foobar" },
preferences: { colorTheme: "light" },
@ -108,7 +112,7 @@ describe("user store tests", () => {
clusters: [
{
id: "foobar",
kubeConfigPath: "some-directory-for-user-data/extension_data/foo/bar",
kubeConfigPath: "/some-electron-app-path-for-user-data/extension_data/foo/bar",
},
{
id: "barfoo",
@ -128,15 +132,19 @@ describe("user store tests", () => {
di.override(storeMigrationVersionInjectable, () => "10.0.0");
userStore = di.inject(userStoreInjectable);
userStore.load();
const runMany = runManyFor(di);
const runAllBeforeApplicationIsLoading = runMany(beforeApplicationIsLoadingInjectionToken);
await runAllBeforeApplicationIsLoading();
});
it("sets last seen app version to 0.0.0", () => {
expect(userStore.lastSeenAppVersion).toBe("0.0.0");
});
it.only("skips clusters for adding to kube-sync with files under extension_data/", () => {
expect(userStore.syncKubeconfigEntries.has("some-directory-for-user-data/extension_data/foo/bar")).toBe(false);
it("skips clusters for adding to kube-sync with files under extension_data/", () => {
expect(userStore.syncKubeconfigEntries.has("/some-electron-app-path-for-user-data/extension_data/foo/bar")).toBe(false);
expect(userStore.syncKubeconfigEntries.has("some/other/path")).toBe(true);
});
});

View File

@ -1,13 +0,0 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import type { AppPaths } from "./token";
import type { RequestChannel } from "../utils/channel/request-channel-listener-injection-token";
export type AppPathsChannel = RequestChannel<void, AppPaths>;
export const appPathsChannel: AppPathsChannel = {
id: "app-paths",
};

View File

@ -32,7 +32,9 @@ describe("InitializableState tests", () => {
} = createInitializableState({
id: "my-state",
init: initMock,
when: null as any,
when: {
id: "some-id",
} as any,
}));
runInAction(() => {
@ -49,14 +51,14 @@ describe("InitializableState tests", () => {
});
it("when get is called, throw", () => {
expect(() => state.get()).toThrowError("InitializableState(my-state) has not been initialized yet");
expect(() => state.get()).toThrowError("Cannot get value from \"my-state\"; it is currently in state=uninitialized");
});
describe("when init is called", () => {
beforeEach(async () => {
const initState = di.inject(initStateInjectable);
await initState.run();
initState.run();
});
it("should call provided initialization function", () => {
@ -64,7 +66,7 @@ describe("InitializableState tests", () => {
});
it("when get is called, throw", () => {
expect(() => state.get()).toThrowError("InitializableState(my-state) has not finished initializing");
expect(() => state.get()).toThrowError("Cannot get value from \"my-state\"; it is currently in state=initializing");
});
describe("when initialization resolves", () => {
@ -79,7 +81,7 @@ describe("InitializableState tests", () => {
it("when init is called again, throws", async () => {
const initState = di.inject(initStateInjectable);
await expect(() => initState.run()).rejects.toThrow("Cannot initialize InitializableState(my-state) more than once");
await expect(async () => initState.run()).rejects.toThrow("Cannot start initializing value for \"my-state\"; it is currently in state=initialized");
});
});
});

View File

@ -6,6 +6,7 @@ import type { DiContainerForInjection, InjectionToken } from "@ogre-tools/inject
import type { Composite } from "../utils/composite/get-composite/get-composite";
import { getCompositeFor } from "../utils/composite/get-composite/get-composite";
import * as uuid from "uuid";
import assert from "assert";
export interface RunnableSync<TParameter = void> {
id: string;
@ -18,7 +19,7 @@ type RunSync<Param> = (parameter: Param) => void;
export type RunManySync = <Param>(injectionToken: InjectionToken<RunnableSync<Param>, void>) => RunSync<Param>;
function runCompositeRunnableSyncs<Param>(param: Param, composite: Composite<RunnableSync<Param>>) {
composite.value.run(param);
assert(!((composite.value.run(param) as any) instanceof Promise), "Cannot be an async function for runnable sync");
composite.children.map(composite => runCompositeRunnableSyncs(param, composite));
}

View File

@ -8,9 +8,7 @@ import { getDiForUnitTesting } from "../../main/getDiForUnitTesting";
import extensionDiscoveryInjectable from "../extension-discovery/extension-discovery.injectable";
import type { ExtensionDiscovery } from "../extension-discovery/extension-discovery";
import installExtensionInjectable from "../extension-installer/install-extension/install-extension.injectable";
import directoryForUserDataInjectable from "../../common/app-paths/directory-for-user-data.injectable";
import { delay } from "../../renderer/utils";
import { observable, runInAction, when } from "mobx";
import readJsonFileInjectable from "../../common/fs/read-json-file.injectable";
import pathExistsInjectable from "../../common/fs/path-exists.injectable";
import watchInjectable from "../../common/fs/watch/watch.injectable";
@ -19,6 +17,10 @@ import removePathInjectable from "../../common/fs/remove-path.injectable";
import type { JoinPaths } from "../../common/path/join-paths.injectable";
import joinPathsInjectable from "../../common/path/join-paths.injectable";
import homeDirectoryPathInjectable from "../../common/os/home-directory-path.injectable";
import { runManyFor } from "../../common/runnable/run-many-for";
import { runManySyncFor } from "../../common/runnable/run-many-sync-for";
import { beforeApplicationIsLoadingInjectionToken } from "../../main/start-main-application/runnable-tokens/before-application-is-loading-injection-token";
import { beforeElectronIsReadyInjectionToken } from "../../main/start-main-application/runnable-tokens/before-electron-is-ready-injection-token";
describe("ExtensionDiscovery", () => {
let extensionDiscovery: ExtensionDiscovery;
@ -28,15 +30,20 @@ describe("ExtensionDiscovery", () => {
let joinPaths: JoinPaths;
let homeDirectoryPath: string;
beforeEach(() => {
beforeEach(async () => {
const di = getDiForUnitTesting({ doGeneralOverrides: true });
di.override(directoryForUserDataInjectable, () => ({
get: () => "/some-directory-for-user-data",
}));
di.override(installExtensionInjectable, () => () => Promise.resolve());
di.override(extensionApiVersionInjectable, () => "5.0.0");
const runManySync = runManySyncFor(di);
const runMany = runManyFor(di);
const runAllBeforeElectronIsReady = runManySync(beforeElectronIsReadyInjectionToken);
const runAllBeforeApplicationIsLoading = runMany(beforeApplicationIsLoadingInjectionToken);
runAllBeforeElectronIsReady();
await runAllBeforeApplicationIsLoading();
joinPaths = di.inject(joinPathsInjectable);
homeDirectoryPath = di.inject(homeDirectoryPathInjectable);
@ -55,7 +62,6 @@ describe("ExtensionDiscovery", () => {
});
it("emits add for added extension", async () => {
const letTestFinish = observable.box(false);
let addHandler!: (filePath: string) => void;
readJsonFileMock.mockImplementation((p) => {
@ -87,27 +93,27 @@ describe("ExtensionDiscovery", () => {
await extensionDiscovery.watchExtensions();
extensionDiscovery.events.on("add", extension => {
expect(extension).toEqual({
absolutePath: expect.any(String),
id: "/some-directory-for-user-data/node_modules/my-extension/package.json",
isBundled: false,
isEnabled: false,
isCompatible: true,
manifest: {
name: "my-extension",
version: "1.0.0",
engines: {
lens: "5.0.0",
},
},
manifestPath: "/some-directory-for-user-data/node_modules/my-extension/package.json",
});
runInAction(() => letTestFinish.set(true));
});
const onAdd = jest.fn();
extensionDiscovery.events.on("add", onAdd);
addHandler(joinPaths(extensionDiscovery.localFolderPath, "/my-extension/package.json"));
await when(() => letTestFinish.get());
await delay(10);
expect(onAdd).toBeCalledWith({
absolutePath: "/some-home-directory/.k8slens/extensions/my-extension",
id: "/some-electron-app-path-for-user-data/node_modules/my-extension/package.json",
isBundled: false,
isEnabled: false,
isCompatible: true,
manifest: {
name: "my-extension",
version: "1.0.0",
engines: {
lens: "5.0.0",
},
},
manifestPath: "/some-electron-app-path-for-user-data/node_modules/my-extension/package.json",
});
});
it("doesn't emit add for added file under extension", async () => {

View File

@ -21,8 +21,6 @@ import { Namespace } from "../../../common/k8s-api/endpoints";
import showSuccessNotificationInjectable from "../../../renderer/components/notifications/show-success-notification.injectable";
import showErrorNotificationInjectable from "../../../renderer/components/notifications/show-error-notification.injectable";
import readJsonFileInjectable from "../../../common/fs/read-json-file.injectable";
import directoryForLensLocalStorageInjectable from "../../../common/directory-for-lens-local-storage/directory-for-lens-local-storage.injectable";
import hostedClusterIdInjectable from "../../../renderer/cluster-frame-context/hosted-cluster-id.injectable";
import { controlWhenStoragesAreReady } from "../../../renderer/utils/create-storage/storages-are-ready";
describe("cluster/namespaces - edit namespace from new tab", () => {
@ -45,12 +43,6 @@ describe("cluster/namespaces - edit namespace from new tab", () => {
showErrorNotificationMock = jest.fn();
builder.beforeWindowStart((windowDi) => {
windowDi.override(directoryForLensLocalStorageInjectable, () => ({
get: () => "/some-directory-for-lens-local-storage",
}));
windowDi.override(hostedClusterIdInjectable, () => "some-cluster-id");
storagesAreReady = controlWhenStoragesAreReady(windowDi);
windowDi.override(
@ -514,7 +506,7 @@ metadata:
);
const actual = (await readJsonFile(
"/some-directory-for-lens-local-storage/some-cluster-id.json",
"/some-electron-app-path-for-user-data/lens-local-storage/some-cluster-id.json",
)) as any;
expect(

View File

@ -10,8 +10,6 @@ import type { AsyncFnMock } from "@async-fn/jest";
import asyncFn from "@async-fn/jest";
import type { CallForResource } from "../../../renderer/components/dock/edit-resource/edit-resource-model/call-for-resource/call-for-resource.injectable";
import callForResourceInjectable from "../../../renderer/components/dock/edit-resource/edit-resource-model/call-for-resource/call-for-resource.injectable";
import directoryForLensLocalStorageInjectable from "../../../common/directory-for-lens-local-storage/directory-for-lens-local-storage.injectable";
import hostedClusterIdInjectable from "../../../renderer/cluster-frame-context/hosted-cluster-id.injectable";
import { controlWhenStoragesAreReady } from "../../../renderer/utils/create-storage/storages-are-ready";
import writeJsonFileInjectable from "../../../common/fs/write-json-file.injectable";
import { TabKind } from "../../../renderer/components/dock/dock/store";
@ -30,12 +28,6 @@ describe("cluster/namespaces - edit namespaces from previously opened tab", () =
callForNamespaceMock = asyncFn();
builder.beforeWindowStart((windowDi) => {
windowDi.override(directoryForLensLocalStorageInjectable, () => ({
get: () => "/some-directory-for-lens-local-storage",
}));
windowDi.override(hostedClusterIdInjectable, () => "some-cluster-id");
storagesAreReady = controlWhenStoragesAreReady(windowDi);
windowDi.override(callForResourceInjectable, () => callForNamespaceMock);
@ -52,7 +44,7 @@ describe("cluster/namespaces - edit namespaces from previously opened tab", () =
const writeJsonFile = windowDi.inject(writeJsonFileInjectable);
await writeJsonFile(
"/some-directory-for-lens-local-storage/some-cluster-id.json",
"/some-electron-app-path-for-user-data/lens-local-storage/some-cluster-id.json",
{
dock: {
height: 300,

View File

@ -7,7 +7,6 @@ import { getInjectable } from "@ogre-tools/injectable";
import React from "react";
import type { RenderResult } from "@testing-library/react";
import { fireEvent } from "@testing-library/react";
import directoryForLensLocalStorageInjectable from "../../common/directory-for-lens-local-storage/directory-for-lens-local-storage.injectable";
import { routeSpecificComponentInjectionToken } from "../../renderer/routes/route-specific-component-injection-token";
import type { SidebarItemRegistration } from "../../renderer/components/layout/sidebar-items.injectable";
import { sidebarItemsInjectionToken } from "../../renderer/components/layout/sidebar-items.injectable";
@ -38,10 +37,6 @@ describe("cluster - sidebar and tab navigation for core", () => {
builder.beforeWindowStart((windowDi) => {
windowDi.override(storageSaveDelayInjectable, () => 250);
windowDi.override(directoryForLensLocalStorageInjectable, () => ({
get: () => "/some-directory-for-lens-local-storage",
}));
});
});
@ -95,7 +90,7 @@ describe("cluster - sidebar and tab navigation for core", () => {
const writeJsonFileFake = windowDi.inject(writeJsonFileInjectable);
await writeJsonFileFake(
"/some-directory-for-lens-local-storage/some-cluster-id.json",
"/some-electron-app-path-for-user-data/lens-local-storage/some-cluster-id.json",
{
sidebar: {
expanded: { "some-parent-id": true },
@ -103,7 +98,9 @@ describe("cluster - sidebar and tab navigation for core", () => {
},
},
);
});
builder.afterWindowStart(async (windowDi) => {
const sidebarStorage = windowDi.inject(sidebarStorageInjectable);
await sidebarStorage.whenReady;
@ -135,7 +132,7 @@ describe("cluster - sidebar and tab navigation for core", () => {
const writeJsonFileFake = windowDi.inject(writeJsonFileInjectable);
await writeJsonFileFake(
"/some-directory-for-lens-local-storage/some-hosted-cluster-id.json",
"/some-electron-app-path-for-user-data/lens-local-storage/some-hosted-cluster-id.json",
{
sidebar: {
expanded: { "some-unknown-parent-id": true },
@ -165,7 +162,7 @@ describe("cluster - sidebar and tab navigation for core", () => {
const writeJsonFileFake = windowDi.inject(writeJsonFileInjectable);
await writeJsonFileFake(
"/some-directory-for-lens-local-storage/some-hosted-cluster-id.json",
"/some-electron-app-path-for-user-data/lens-local-storage/some-hosted-cluster-id.json",
{
someThingButSidebar: {},
},
@ -271,7 +268,7 @@ describe("cluster - sidebar and tab navigation for core", () => {
const pathExistsFake = windowDi.inject(pathExistsInjectable);
const actual = await pathExistsFake(
"/some-directory-for-lens-local-storage/some-hosted-cluster-id.json",
"/some-electron-app-path-for-user-data/lens-local-storage/some-hosted-cluster-id.json",
);
expect(actual).toBe(false);
@ -283,7 +280,7 @@ describe("cluster - sidebar and tab navigation for core", () => {
const readJsonFileFake = windowDi.inject(readJsonFileInjectable);
const actual = await readJsonFileFake(
"/some-directory-for-lens-local-storage/some-cluster-id.json",
"/some-electron-app-path-for-user-data/lens-local-storage/some-cluster-id.json",
);
expect(actual).toEqual({

View File

@ -5,7 +5,6 @@
import React from "react";
import type { RenderResult } from "@testing-library/react";
import { fireEvent } from "@testing-library/react";
import directoryForLensLocalStorageInjectable from "../../common/directory-for-lens-local-storage/directory-for-lens-local-storage.injectable";
import routesInjectable from "../../renderer/routes/routes.injectable";
import { matches } from "lodash/fp";
import type { ApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder";
@ -34,10 +33,6 @@ describe("cluster - sidebar and tab navigation for extensions", () => {
applicationBuilder.beforeWindowStart((windowDi) => {
windowDi.override(storageSaveDelayInjectable, () => 250);
windowDi.override(directoryForLensLocalStorageInjectable, () => ({
get: () => "/some-directory-for-lens-local-storage",
}));
});
});
@ -175,7 +170,7 @@ describe("cluster - sidebar and tab navigation for extensions", () => {
const writeJsonFileFake = windowDi.inject(writeJsonFileInjectable);
await writeJsonFileFake(
"/some-directory-for-lens-local-storage/some-cluster-id.json",
"/some-electron-app-path-for-user-data/lens-local-storage/some-cluster-id.json",
{
sidebar: {
expanded: { "some-extension-name-some-parent-id": true },
@ -211,7 +206,7 @@ describe("cluster - sidebar and tab navigation for extensions", () => {
const writeJsonFileFake = windowDi.inject(writeJsonFileInjectable);
await writeJsonFileFake(
"/some-directory-for-lens-local-storage/some-cluster-id.json",
"/some-electron-app-path-for-user-data/lens-local-storage/some-cluster-id.json",
{
sidebar: {
expanded: { "some-extension-name-some-unknown-parent-id": true },
@ -241,7 +236,7 @@ describe("cluster - sidebar and tab navigation for extensions", () => {
const writeJsonFileFake = windowDi.inject(writeJsonFileInjectable);
await writeJsonFileFake(
"/some-directory-for-lens-local-storage/some-cluster-id.json",
"/some-electron-app-path-for-user-data/lens-local-storage/some-cluster-id.json",
{
someThingButSidebar: {},
},
@ -387,7 +382,7 @@ describe("cluster - sidebar and tab navigation for extensions", () => {
const pathExistsFake = windowDi.inject(pathExistsInjectable);
const actual = await pathExistsFake(
"/some-directory-for-lens-local-storage/some-cluster-id.json",
"/some-electron-app-path-for-user-data/lens-local-storage/some-cluster-id.json",
);
expect(actual).toBe(false);
@ -399,7 +394,7 @@ describe("cluster - sidebar and tab navigation for extensions", () => {
const readJsonFileFake = windowDi.inject(readJsonFileInjectable);
const actual = await readJsonFileFake(
"/some-directory-for-lens-local-storage/some-cluster-id.json",
"/some-electron-app-path-for-user-data/lens-local-storage/some-cluster-id.json",
);
expect(actual).toEqual({

View File

@ -14,7 +14,6 @@ import type { RequestCreateHelmRelease } from "../../../common/k8s-api/endpoints
import requestCreateHelmReleaseInjectable from "../../../common/k8s-api/endpoints/helm-releases.api/request-create.injectable";
import currentPathInjectable from "../../../renderer/routes/current-path.injectable";
import writeJsonFileInjectable from "../../../common/fs/write-json-file.injectable";
import directoryForLensLocalStorageInjectable from "../../../common/directory-for-lens-local-storage/directory-for-lens-local-storage.injectable";
import dockStoreInjectable from "../../../renderer/components/dock/dock/store.injectable";
import type { ReadJsonFile } from "../../../common/fs/read-json-file.injectable";
import readJsonFileInjectable from "../../../common/fs/read-json-file.injectable";
@ -52,9 +51,6 @@ describe("installing helm chart from new tab", () => {
requestCreateHelmReleaseMock = asyncFn();
builder.beforeWindowStart((windowDi) => {
windowDi.override(directoryForLensLocalStorageInjectable, () => ({
get: () => "/some-directory-for-lens-local-storage",
}));
windowDi.override(requestDetailedHelmReleaseInjectable, () => requestDetailedHelmReleaseMock);
windowDi.override(requestHelmChartsInjectable, () => requestHelmChartsMock);
windowDi.override(requestHelmChartVersionsInjectable, () => requestHelmChartVersionsMock);
@ -88,7 +84,7 @@ describe("installing helm chart from new tab", () => {
const writeJsonFile = windowDi.inject(writeJsonFileInjectable);
await writeJsonFile(
"/some-directory-for-lens-local-storage/some-cluster-id.json",
"/some-electron-app-path-for-user-data/lens-local-storage/some-cluster-id.json",
{
dock: {
height: 300,
@ -688,7 +684,7 @@ describe("installing helm chart from new tab", () => {
});
it("stores the selected version", async () => {
const actual = await readJsonFile("/some-directory-for-lens-local-storage/some-cluster-id.json");
const actual = await readJsonFile("/some-electron-app-path-for-user-data/lens-local-storage/some-cluster-id.json");
expect(actual).toMatchObject({
install_charts: {
@ -765,7 +761,7 @@ describe("installing helm chart from new tab", () => {
});
it("stores the selected namespace", async () => {
const actual = await readJsonFile("/some-directory-for-lens-local-storage/some-cluster-id.json");
const actual = await readJsonFile("/some-electron-app-path-for-user-data/lens-local-storage/some-cluster-id.json");
expect(actual).toMatchObject({
install_charts: {
@ -878,7 +874,7 @@ describe("installing helm chart from new tab", () => {
});
it("stores the changed configuration", async () => {
const actual = await readJsonFile("/some-directory-for-lens-local-storage/some-cluster-id.json");
const actual = await readJsonFile("/some-electron-app-path-for-user-data/lens-local-storage/some-cluster-id.json");
expect(actual).toMatchObject({
install_charts: {
@ -946,7 +942,7 @@ describe("installing helm chart from new tab", () => {
});
it("stores the changed custom name", async () => {
const actual = await readJsonFile("/some-directory-for-lens-local-storage/some-cluster-id.json");
const actual = await readJsonFile("/some-electron-app-path-for-user-data/lens-local-storage/some-cluster-id.json");
expect(actual).toMatchObject({
install_charts: {

View File

@ -12,8 +12,6 @@ import getRandomInstallChartTabIdInjectable from "../../../renderer/components/d
import namespaceStoreInjectable from "../../../renderer/components/+namespaces/store.injectable";
import type { NamespaceStore } from "../../../renderer/components/+namespaces/store";
import writeJsonFileInjectable from "../../../common/fs/write-json-file.injectable";
import directoryForLensLocalStorageInjectable from "../../../common/directory-for-lens-local-storage/directory-for-lens-local-storage.injectable";
import hostedClusterIdInjectable from "../../../renderer/cluster-frame-context/hosted-cluster-id.injectable";
import { TabKind } from "../../../renderer/components/dock/dock/store";
import { controlWhenStoragesAreReady } from "../../../renderer/utils/create-storage/storages-are-ready";
import requestCreateHelmReleaseInjectable from "../../../common/k8s-api/endpoints/helm-releases.api/request-create.injectable";
@ -39,10 +37,6 @@ describe("installing helm chart from previously opened tab", () => {
builder.beforeWindowStart((windowDi) => {
storagesAreReady = controlWhenStoragesAreReady(windowDi);
windowDi.override(directoryForLensLocalStorageInjectable, () => ({
get: () => "/some-directory-for-lens-local-storage",
}));
windowDi.override(hostedClusterIdInjectable, () => "some-cluster-id");
windowDi.override(requestHelmChartVersionsInjectable, () => requestHelmChartVersionsMock);
windowDi.override(requestHelmChartValuesInjectable, () => requestHelmChartValuesMock);
windowDi.override(requestCreateHelmReleaseInjectable, () => jest.fn());
@ -77,7 +71,7 @@ describe("installing helm chart from previously opened tab", () => {
const writeJsonFile = windowDi.inject(writeJsonFileInjectable);
await writeJsonFile(
"/some-directory-for-lens-local-storage/some-cluster-id.json",
"/some-electron-app-path-for-user-data/lens-local-storage/some-cluster-id.json",
{
dock: {
height: 300,

View File

@ -12,8 +12,6 @@ import { HelmChart } from "../../../common/k8s-api/endpoints/helm-charts.api";
import getRandomInstallChartTabIdInjectable from "../../../renderer/components/dock/install-chart/get-random-install-chart-tab-id.injectable";
import requestCreateHelmReleaseInjectable from "../../../common/k8s-api/endpoints/helm-releases.api/request-create.injectable";
import { flushPromises } from "../../../common/test-utils/flush-promises";
import directoryForLensLocalStorageInjectable from "../../../common/directory-for-lens-local-storage/directory-for-lens-local-storage.injectable";
import hostedClusterIdInjectable from "../../../renderer/cluster-frame-context/hosted-cluster-id.injectable";
import dockStoreInjectable from "../../../renderer/components/dock/dock/store.injectable";
import type { RequestHelmCharts } from "../../../common/k8s-api/endpoints/helm-charts.api/request-charts.injectable";
import type { RequestHelmChartVersions } from "../../../common/k8s-api/endpoints/helm-charts.api/request-versions.injectable";
@ -39,10 +37,6 @@ describe("opening dock tab for installing helm chart", () => {
requestHelmChartValuesMock = jest.fn();
builder.beforeWindowStart((windowDi) => {
windowDi.override(directoryForLensLocalStorageInjectable, () => ({
get: () => "/some-directory-for-lens-local-storage",
}));
windowDi.override(hostedClusterIdInjectable, () => "some-cluster-id");
windowDi.override(requestHelmChartsInjectable, () => requestHelmChartsMock);
windowDi.override(requestHelmChartVersionsInjectable, () => requestHelmChartVersionsMock);
windowDi.override(requestHelmChartReadmeInjectable, () => requestHelmChartReadmeMock);

View File

@ -2,7 +2,7 @@
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { appPathsChannel } from "../../common/app-paths/app-paths-channel";
import { appPathsChannel } from "../../common/app-paths/channel";
import { getRequestChannelListenerInjectable } from "../utils/channel/channel-listeners/listener-tokens";
import appPathsInjectable from "./impl.injectable";

View File

@ -8,8 +8,6 @@ import type { CatalogEntity } from "../../../common/catalog";
import { loadFromOptions } from "../../../common/kube-helpers";
import type { Cluster } from "../../../common/cluster/cluster";
import { getDiForUnitTesting } from "../../getDiForUnitTesting";
import directoryForUserDataInjectable from "../../../common/app-paths/directory-for-user-data.injectable";
import directoryForTempInjectable from "../../../common/app-paths/directory-for-temp.injectable";
import { iter, strictGet } from "../../../common/utils";
import type { ComputeKubeconfigDiff } from "../kubeconfig-sync/compute-diff.injectable";
import computeKubeconfigDiffInjectable from "../kubeconfig-sync/compute-diff.injectable";
@ -33,6 +31,10 @@ import createReadFileStreamInjectable from "../../../common/fs/create-read-file-
import kubectlBinaryNameInjectable from "../../kubectl/binary-name.injectable";
import kubectlDownloadingNormalizedArchInjectable from "../../kubectl/normalized-arch.injectable";
import normalizedPlatformInjectable from "../../../common/vars/normalized-platform.injectable";
import { runManyFor } from "../../../common/runnable/run-many-for";
import { runManySyncFor } from "../../../common/runnable/run-many-sync-for";
import { beforeApplicationIsLoadingInjectionToken } from "../../start-main-application/runnable-tokens/before-application-is-loading-injection-token";
import { beforeElectronIsReadyInjectionToken } from "../../start-main-application/runnable-tokens/before-electron-is-ready-injection-token";
describe("kubeconfig-sync.source tests", () => {
let computeKubeconfigDiff: ComputeKubeconfigDiff;
@ -46,16 +48,18 @@ describe("kubeconfig-sync.source tests", () => {
clusters = new Map();
di.override(getClusterByIdInjectable, () => id => clusters.get(id));
di.override(directoryForUserDataInjectable, () => ({
get: () => "some-directory-for-user-data",
}));
di.override(directoryForTempInjectable, () => ({
get: () => "some-directory-for-temp",
}));
di.override(kubectlBinaryNameInjectable, () => "kubectl");
di.override(kubectlDownloadingNormalizedArchInjectable, () => "amd64");
di.override(normalizedPlatformInjectable, () => "darwin");
const runManySync = runManySyncFor(di);
const runMany = runManyFor(di);
const runAllBeforeElectronIsReady = runManySync(beforeElectronIsReadyInjectionToken);
const runAllBeforeApplicationIsLoading = runMany(beforeApplicationIsLoadingInjectionToken);
runAllBeforeElectronIsReady();
await runAllBeforeApplicationIsLoading();
kubeconfigSyncs = observable.map();
di.override(kubeconfigSyncsInjectable, () => kubeconfigSyncs);

View File

@ -14,7 +14,6 @@ import asyncFn from "@async-fn/jest";
import parseRequestInjectable from "./parse-request.injectable";
import { contentTypes } from "./router-content-types";
import mockFs from "mock-fs";
import directoryForUserDataInjectable from "../../common/app-paths/directory-for-user-data.injectable";
import type { Route } from "./route";
import type { SetRequired } from "type-fest";
import normalizedPlatformInjectable from "../../common/vars/normalized-platform.injectable";
@ -22,6 +21,10 @@ import kubectlBinaryNameInjectable from "../kubectl/binary-name.injectable";
import kubectlDownloadingNormalizedArchInjectable from "../kubectl/normalized-arch.injectable";
import fsInjectable from "../../common/fs/fs.injectable";
import { runInAction } from "mobx";
import { runManyFor } from "../../common/runnable/run-many-for";
import { runManySyncFor } from "../../common/runnable/run-many-sync-for";
import { beforeApplicationIsLoadingInjectionToken } from "../start-main-application/runnable-tokens/before-application-is-loading-injection-token";
import { beforeElectronIsReadyInjectionToken } from "../start-main-application/runnable-tokens/before-electron-is-ready-injection-token";
describe("router", () => {
let router: Router;
@ -39,13 +42,18 @@ describe("router", () => {
payload: "some-payload",
mime: "some-mime",
}));
di.override(directoryForUserDataInjectable, () => ({
get: () => "some-directory-for-user-data",
}));
di.override(kubectlBinaryNameInjectable, () => "kubectl");
di.override(kubectlDownloadingNormalizedArchInjectable, () => "amd64");
di.override(normalizedPlatformInjectable, () => "darwin");
const runManySync = runManySyncFor(di);
const runMany = runManyFor(di);
const runAllBeforeElectronIsReady = runManySync(beforeElectronIsReadyInjectionToken);
const runAllBeforeApplicationIsLoading = runMany(beforeApplicationIsLoadingInjectionToken);
runAllBeforeElectronIsReady();
await runAllBeforeApplicationIsLoading();
const injectable = getInjectable({
id: "some-route",

View File

@ -5,13 +5,15 @@
import type { DiContainer } from "@ogre-tools/injectable";
import { WebSocket } from "ws";
import directoryForUserDataInjectable from "../../../common/app-paths/directory-for-user-data.injectable";
import type { Cluster } from "../../../common/cluster/cluster";
import { runManyFor } from "../../../common/runnable/run-many-for";
import { runManySyncFor } from "../../../common/runnable/run-many-sync-for";
import platformInjectable from "../../../common/vars/platform.injectable";
import { getDiForUnitTesting } from "../../getDiForUnitTesting";
import createKubectlInjectable from "../../kubectl/create-kubectl.injectable";
import type { Kubectl } from "../../kubectl/kubectl";
import buildVersionInjectable from "../../vars/build-version/build-version.injectable";
import { beforeApplicationIsLoadingInjectionToken } from "../../start-main-application/runnable-tokens/before-application-is-loading-injection-token";
import { beforeElectronIsReadyInjectionToken } from "../../start-main-application/runnable-tokens/before-electron-is-ready-injection-token";
import type { OpenShellSession } from "../create-shell-session.injectable";
import type { SpawnPty } from "../spawn-pty.injectable";
import spawnPtyInjectable from "../spawn-pty.injectable";
@ -20,17 +22,18 @@ import openLocalShellSessionInjectable from "./open.injectable";
describe("technical unit tests for local shell sessions", () => {
let di: DiContainer;
beforeEach(() => {
beforeEach(async () => {
di = getDiForUnitTesting({
doGeneralOverrides: true,
});
di.override(directoryForUserDataInjectable, () => ({
get: () => "/some-directory-for-user-data",
}));
di.override(buildVersionInjectable, () => ({
get: () => "1.1.1",
}));
const runManySync = runManySyncFor(di);
const runMany = runManyFor(di);
const runAllBeforeElectronIsReady = runManySync(beforeElectronIsReadyInjectionToken);
const runAllBeforeApplicationIsLoading = runMany(beforeApplicationIsLoadingInjectionToken);
runAllBeforeElectronIsReady();
await runAllBeforeApplicationIsLoading();
});
describe("when on windows", () => {

View File

@ -5,8 +5,8 @@
import { getInjectable } from "@ogre-tools/injectable";
import userStoreFileNameMigrationInjectable from "../../common/user-store/file-name-migration.injectable";
import userStoreInjectable from "../../common/user-store/user-store.injectable";
import { initDefaultUpdateChannelOnMainInjectable } from "../../features/application-update/common/selected-update-channel/default-update-channel.injectable";
import { beforeApplicationIsLoadingInjectionToken } from "../start-main-application/runnable-tokens/before-application-is-loading-injection-token";
import { initializeBuildVersionOnMainInjectable } from "../vars/build-version/build-version.injectable";
const initUserStoreInjectable = getInjectable({
id: "init-user-store",
@ -20,7 +20,7 @@ const initUserStoreInjectable = getInjectable({
await userStoreFileNameMigration();
userStore.load();
},
runAfter: di.inject(initializeBuildVersionOnMainInjectable),
runAfter: di.inject(initDefaultUpdateChannelOnMainInjectable),
};
},
injectionToken: beforeApplicationIsLoadingInjectionToken,

View File

@ -14,9 +14,16 @@ import { getDiForUnitTesting } from "../../../getDiForUnitTesting";
import dockStoreInjectable from "../dock/store.injectable";
import type { DiRender } from "../../test-utils/renderFor";
import { renderFor } from "../../test-utils/renderFor";
import directoryForUserDataInjectable from "../../../../common/app-paths/directory-for-user-data.injectable";
import assert from "assert";
import hostedClusterIdInjectable from "../../../cluster-frame-context/hosted-cluster-id.injectable";
import { beforeFrameStartsInjectionToken } from "../../../before-frame-starts/before-frame-starts-injection-token";
import requestFromChannelInjectable from "../../../utils/channel/request-from-channel.injectable";
import { appPathsChannel } from "../../../../common/app-paths/channel";
import type { AppPaths } from "../../../../common/app-paths/token";
import type { RequestChannel } from "../../../../common/utils/channel/request-channel-listener-injection-token";
import { runManyFor } from "../../../../common/runnable/run-many-for";
import { syncBoxInitialValueChannel } from "../../../../common/utils/sync-box/channels";
import { buildVersionChannel } from "../../../../common/vars/build-version/channel";
jest.mock("electron", () => ({
app: {
@ -75,9 +82,43 @@ describe("<DockTabs />", () => {
render = renderFor(di);
di.override(hostedClusterIdInjectable, () => "some-cluster-id");
di.override(directoryForUserDataInjectable, () => ({
get: () => "/some-test-suite-specific-directory-for-user-data",
}));
di.override(requestFromChannelInjectable, () => async (channel: RequestChannel<any, any>) => {
if (channel === appPathsChannel) {
return {
appData: `/some-electron-app-path-for-app-data`,
home: `/some-electron-app-path-for-home`,
userData: `/some-electron-app-path-for-user-data`,
cache: `/some-electron-app-path-for-cache`,
temp: `/some-electron-app-path-for-temp`,
exe: `/some-electron-app-path-for-exe`,
module: `/some-electron-app-path-for-module`,
desktop: `/some-electron-app-path-for-desktop`,
documents: `/some-electron-app-path-for-documents`,
downloads: `/some-electron-app-path-for-downloads`,
music: `/some-electron-app-path-for-music`,
pictures: `/some-electron-app-path-for-pictures`,
videos: `/some-electron-app-path-for-videos`,
logs: `/some-electron-app-path-for-logs`,
crashDumps: `/some-electron-app-path-for-crash-dumps`,
recent: `/some-electron-app-path-for-recent`,
} as AppPaths;
}
if (channel === syncBoxInitialValueChannel) {
return [];
}
if (channel === buildVersionChannel) {
return "1.1.1";
}
throw new Error(`tried to request data from id="${channel.id}" without override`);
});
const runMany = runManyFor(di);
const runAllBeforeFrameStarts = runMany(beforeFrameStartsInjectionToken);
await runAllBeforeFrameStarts();
dockStore = di.inject(dockStoreInjectable);

View File

@ -9,7 +9,6 @@ import type { IObservableArray } from "mobx";
import { computed, observable } from "mobx";
import type { StatusBarItems } from "./status-bar-items.injectable";
import statusBarItemsInjectable from "./status-bar-items.injectable";
import directoryForUserDataInjectable from "../../../common/app-paths/directory-for-user-data.injectable";
import type { ApplicationBuilder } from "../test-utils/get-application-builder";
import { getApplicationBuilder } from "../test-utils/get-application-builder";
import getRandomIdInjectable from "../../../common/utils/get-random-id.injectable";
@ -26,9 +25,6 @@ describe("<StatusBar />", () => {
builder.beforeWindowStart((windowDi) => {
windowDi.unoverride(getRandomIdInjectable);
windowDi.permitSideEffects(getRandomIdInjectable);
windowDi.override(directoryForUserDataInjectable, () => ({
get: () => "some-directory-for-user-data",
}));
});
builder.extensions.enable({