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

Cleanup typing around getting injectables within jest

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2022-12-22 14:25:57 -05:00
parent 5725da72b1
commit 41d90ca75a
3 changed files with 38 additions and 30 deletions

View File

@ -10,6 +10,16 @@ import glob from "glob";
import path from "path";
import { enableMapSet, setAutoFreeze } from "immer";
declare global {
interface InjectablePaths {
paths: string[];
globalOverridePaths: string[];
}
// eslint-disable-next-line no-var
var injectablePaths: Record<"main" | "renderer", InjectablePaths>;
}
configure({
// Needed because we want to use jest.spyOn()
// ref https://github.com/mobxjs/mobx/issues/2784
@ -57,7 +67,13 @@ const getInjectables = (environment: "renderer" | "main", filePathGlob: string)
}),
].map(x => path.resolve(__dirname, x));
(global as any).rendererInjectablePaths = getInjectables("renderer", "*.{injectable,injectable.testing-env}.{ts,tsx}");
(global as any).rendererGlobalOverridePaths = getInjectables("renderer", "*.global-override-for-injectable.{ts,tsx}");
(global as any).mainInjectablePaths = getInjectables("main", "*.{injectable,injectable.testing-env}.{ts,tsx}");
(global as any).mainGlobalOverridePaths = getInjectables("main", "*.global-override-for-injectable.{ts,tsx}");
global.injectablePaths = {
renderer: {
globalOverridePaths: getInjectables("renderer", "*.global-override-for-injectable.{ts,tsx}"),
paths: getInjectables("renderer", "*.{injectable,injectable.testing-env}.{ts,tsx}"),
},
main: {
globalOverridePaths: getInjectables("main", "*.global-override-for-injectable.{ts,tsx}"),
paths: getInjectables("main", "*.{injectable,injectable.testing-env}.{ts,tsx}"),
},
};

View File

@ -77,13 +77,12 @@ export function getDiForUnitTesting(opts: { doGeneralOverrides?: boolean } = {})
di.preventSideEffects();
const injectables: Injectable<any, any, any>[] = (
global as any
).mainInjectablePaths.flatMap((filePath: string) =>
Object.values(require(filePath)).filter(
(maybeInjectable: any) => isInjectable(maybeInjectable),
),
);
const injectables = (
global.injectablePaths.main.paths
.map(path => require(path))
.flatMap(Object.values)
.filter(isInjectable)
) as Injectable<any, any, any>[];
runInAction(() => {
registerMobX(di);
@ -95,13 +94,11 @@ export function getDiForUnitTesting(opts: { doGeneralOverrides?: boolean } = {})
});
if (doGeneralOverrides) {
const globalOverrides: GlobalOverride[] = (global as any).mainGlobalOverridePaths.map(
(filePath: string) => require(filePath).default,
);
for (const globalOverridePath of global.injectablePaths.main.globalOverridePaths) {
const globalOverride = require(globalOverridePath).default as GlobalOverride;
globalOverrides.forEach(globalOverride => {
di.override(globalOverride.injectable, globalOverride.overridingInstantiate);
});
}
di.override(electronInjectable, () => ({}));
di.override(waitUntilBundledExtensionsAreLoadedInjectable, () => async () => {});

View File

@ -20,7 +20,6 @@ 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 setupSystemCaInjectable from "./frames/root-frame/setup-system-ca.injectable";
import extensionShouldBeEnabledForClusterFrameInjectable from "./extension-loader/extension-should-be-enabled-for-cluster-frame.injectable";
import { asyncComputed } from "@ogre-tools/injectable-react";
import legacyOnChannelListenInjectable from "./ipc/legacy-channel-listen.injectable";
@ -47,13 +46,12 @@ export const getDiForUnitTesting = (
setLegacyGlobalDiForExtensionApi(di, Environments.renderer);
const injectables: Injectable<any, any, any>[] = (
global as any
).rendererInjectablePaths.flatMap((filePath: string) =>
Object.values(require(filePath)).filter(
(maybeInjectable: any) => isInjectable(maybeInjectable),
),
);
const injectables = (
global.injectablePaths.renderer.paths
.map(path => require(path))
.flatMap(Object.values)
.filter(isInjectable)
) as Injectable<any, any, any>[];
runInAction(() => {
registerMobX(di);
@ -65,20 +63,17 @@ export const getDiForUnitTesting = (
});
if (doGeneralOverrides) {
const globalOverrides: GlobalOverride[] = (global as any).rendererGlobalOverridePaths.map(
(filePath: string) => require(filePath).default,
);
for (const globalOverridePath of global.injectablePaths.renderer.globalOverridePaths) {
const globalOverride = require(globalOverridePath).default as GlobalOverride;
globalOverrides.forEach(globalOverride => {
di.override(globalOverride.injectable, globalOverride.overridingInstantiate);
});
}
di.override(getRandomIdInjectable, () => () => "some-irrelevant-random-id");
di.override(platformInjectable, () => "darwin");
[
startTopbarStateSyncInjectable,
setupSystemCaInjectable,
].forEach((injectable) => {
di.override(injectable, () => ({
id: injectable.id,