1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00
lens/src/test-utils/override-ipc-bridge.ts
Janne Savolainen 589472c2b5
Shorten license header to reduce amount of clutter in top of the files (#4709)
Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>
2022-01-18 10:18:10 +02:00

67 lines
1.9 KiB
TypeScript

/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import type { DependencyInjectionContainer } from "@ogre-tools/injectable";
import type { Channel } from "../common/ipc-channel/channel";
import getValueFromRegisteredChannelInjectable from "../renderer/app-paths/get-value-from-registered-channel/get-value-from-registered-channel.injectable";
import registerChannelInjectable from "../main/app-paths/register-channel/register-channel.injectable";
import asyncFn from "@async-fn/jest";
export const overrideIpcBridge = ({
rendererDi,
mainDi,
}: {
rendererDi: DependencyInjectionContainer;
mainDi: DependencyInjectionContainer;
}) => {
const fakeChannelMap = new Map<
Channel<any>,
{ promise: Promise<any>; resolve: (arg0: any) => Promise<void> }
>();
const mainIpcRegistrations = {
set: <TChannel extends Channel<TInstance>, TInstance>(
key: TChannel,
callback: () => TChannel["_template"],
) => {
if (!fakeChannelMap.has(key)) {
const mockInstance = asyncFn();
fakeChannelMap.set(key, {
promise: mockInstance(),
resolve: mockInstance.resolve,
});
}
return fakeChannelMap.get(key).resolve(callback);
},
get: <TChannel extends Channel<TInstance>, TInstance>(key: TChannel) => {
if (!fakeChannelMap.has(key)) {
const mockInstance = asyncFn();
fakeChannelMap.set(key, {
promise: mockInstance(),
resolve: mockInstance.resolve,
});
}
return fakeChannelMap.get(key).promise;
},
};
rendererDi.override(
getValueFromRegisteredChannelInjectable,
() => async (channel) => {
const callback = await mainIpcRegistrations.get(channel);
return callback();
},
);
mainDi.override(registerChannelInjectable, () => (channel, callback) => {
mainIpcRegistrations.set(channel, callback);
});
};