mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Add Open Closed Principle compliant way to introduce global overrides without modification in getDiForUnitTesting
Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>
This commit is contained in:
parent
1bcc0e4592
commit
a79d760842
13
src/common/test-utils/get-global-override.ts
Normal file
13
src/common/test-utils/get-global-override.ts
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
|
*/
|
||||||
|
import type { Injectable } from "@ogre-tools/injectable";
|
||||||
|
|
||||||
|
export const getGlobalOverride = <T extends Injectable<any, any, any>>(
|
||||||
|
injectable: T,
|
||||||
|
overridingInstantiate: T["instantiate"],
|
||||||
|
) => ({
|
||||||
|
injectable,
|
||||||
|
overridingInstantiate,
|
||||||
|
});
|
||||||
@ -124,6 +124,16 @@ export function getDiForUnitTesting(opts: { doGeneralOverrides?: boolean } = {})
|
|||||||
di.preventSideEffects();
|
di.preventSideEffects();
|
||||||
|
|
||||||
if (doGeneralOverrides) {
|
if (doGeneralOverrides) {
|
||||||
|
const globalOverrideFilePaths = getGlobalOverridePaths();
|
||||||
|
|
||||||
|
const globalOverrides = globalOverrideFilePaths.map(
|
||||||
|
(filePath) => require(filePath).default,
|
||||||
|
);
|
||||||
|
|
||||||
|
globalOverrides.forEach(globalOverride => {
|
||||||
|
di.override(globalOverride.injectable, globalOverride.overridingInstantiate);
|
||||||
|
});
|
||||||
|
|
||||||
di.override(electronInjectable, () => ({}));
|
di.override(electronInjectable, () => ({}));
|
||||||
di.override(waitUntilBundledExtensionsAreLoadedInjectable, () => async () => {});
|
di.override(waitUntilBundledExtensionsAreLoadedInjectable, () => async () => {});
|
||||||
di.override(getRandomIdInjectable, () => () => "some-irrelevant-random-id");
|
di.override(getRandomIdInjectable, () => () => "some-irrelevant-random-id");
|
||||||
@ -211,6 +221,14 @@ const getInjectableFilePaths = memoize(() => [
|
|||||||
...glob.sync("../common/**/*.injectable.{ts,tsx}", { cwd: __dirname }),
|
...glob.sync("../common/**/*.injectable.{ts,tsx}", { cwd: __dirname }),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
const getGlobalOverridePaths = memoize(() =>
|
||||||
|
glob.sync(
|
||||||
|
"../{common,extensions,main}/**/*.global-override-for-injectable.{ts,tsx}",
|
||||||
|
|
||||||
|
{ cwd: __dirname },
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
// TODO: Reorganize code in Runnables to get rid of requirement for override
|
// TODO: Reorganize code in Runnables to get rid of requirement for override
|
||||||
const overrideRunnablesHavingSideEffects = (di: DiContainer) => {
|
const overrideRunnablesHavingSideEffects = (di: DiContainer) => {
|
||||||
[
|
[
|
||||||
|
|||||||
@ -96,6 +96,16 @@ export const getDiForUnitTesting = (opts: { doGeneralOverrides?: boolean } = {})
|
|||||||
di.preventSideEffects();
|
di.preventSideEffects();
|
||||||
|
|
||||||
if (doGeneralOverrides) {
|
if (doGeneralOverrides) {
|
||||||
|
const globalOverrideFilePaths = getGlobalOverridePaths();
|
||||||
|
|
||||||
|
const globalOverrides = globalOverrideFilePaths.map(
|
||||||
|
(filePath) => require(filePath).default,
|
||||||
|
);
|
||||||
|
|
||||||
|
globalOverrides.forEach(globalOverride => {
|
||||||
|
di.override(globalOverride.injectable, globalOverride.overridingInstantiate);
|
||||||
|
});
|
||||||
|
|
||||||
di.override(getRandomIdInjectable, () => () => "some-irrelevant-random-id");
|
di.override(getRandomIdInjectable, () => () => "some-irrelevant-random-id");
|
||||||
di.override(platformInjectable, () => "darwin");
|
di.override(platformInjectable, () => "darwin");
|
||||||
di.override(startTopbarStateSyncInjectable, () => ({
|
di.override(startTopbarStateSyncInjectable, () => ({
|
||||||
@ -228,6 +238,14 @@ const getInjectableFilePaths = memoize(() => [
|
|||||||
...glob.sync("../extensions/**/*.injectable.{ts,tsx}", { cwd: __dirname }),
|
...glob.sync("../extensions/**/*.injectable.{ts,tsx}", { cwd: __dirname }),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
const getGlobalOverridePaths = memoize(() =>
|
||||||
|
glob.sync(
|
||||||
|
"../{common,extensions,renderer}/**/*.global-override-for-injectable.{ts,tsx}",
|
||||||
|
|
||||||
|
{ cwd: __dirname },
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
const overrideFunctionalInjectables = (di: DiContainer, injectables: Injectable<any, any, any>[]) => {
|
const overrideFunctionalInjectables = (di: DiContainer, injectables: Injectable<any, any, any>[]) => {
|
||||||
injectables.forEach(injectable => {
|
injectables.forEach(injectable => {
|
||||||
di.override(injectable, () => () => {
|
di.override(injectable, () => () => {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user