mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Fix raw requests not being handled in tests
Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
4fe38cc09a
commit
9704598e92
@ -6,8 +6,9 @@ import type { DiContainer } from "@ogre-tools/injectable";
|
||||
import { deserialize, serialize } from "v8";
|
||||
import type { RequestChannel } from "../../common/utils/channel/request-channel-listener-injection-token";
|
||||
import type { RequestFromChannel } from "../../common/utils/channel/request-from-channel-injection-token";
|
||||
import enlistRawRequestChannelListenerInjectable from "../../main/utils/channel/channel-listeners/enlist-raw-request-channel-listener.injectable";
|
||||
import enlistRequestChannelListenerInjectableInMain from "../../main/utils/channel/channel-listeners/enlist-request-channel-listener.injectable";
|
||||
import type { RequestChannelListener } from "../../main/utils/channel/channel-listeners/listener-tokens";
|
||||
import type { RawRequestChannelListener, RequestChannelListener } from "../../main/utils/channel/channel-listeners/listener-tokens";
|
||||
import requestFromChannelInjectable from "../../renderer/utils/channel/request-from-channel.injectable";
|
||||
|
||||
export const overrideRequestingFromWindowToMain = (mainDi: DiContainer) => {
|
||||
@ -15,6 +16,10 @@ export const overrideRequestingFromWindowToMain = (mainDi: DiContainer) => {
|
||||
string,
|
||||
RequestChannelListener<RequestChannel<unknown, unknown>>
|
||||
>();
|
||||
const rawRequestChannelListenerFakesForMain = new Map<
|
||||
string,
|
||||
RawRequestChannelListener<RequestChannel<unknown, unknown>>
|
||||
>();
|
||||
|
||||
mainDi.override(
|
||||
enlistRequestChannelListenerInjectableInMain,
|
||||
@ -33,27 +38,51 @@ export const overrideRequestingFromWindowToMain = (mainDi: DiContainer) => {
|
||||
};
|
||||
},
|
||||
);
|
||||
mainDi.override(
|
||||
enlistRawRequestChannelListenerInjectable,
|
||||
() => (listener) => {
|
||||
if (requestChannelListenerFakesForMain.has(listener.channel.id)) {
|
||||
throw new Error(
|
||||
`Tried to enlist listener for channel "${listener.channel.id}", but it was already enlisted`,
|
||||
);
|
||||
}
|
||||
|
||||
rawRequestChannelListenerFakesForMain.set(listener.channel.id, listener);
|
||||
|
||||
return () => {
|
||||
rawRequestChannelListenerFakesForMain.delete(listener.channel.id);
|
||||
};
|
||||
},
|
||||
);
|
||||
|
||||
return (windowDi: DiContainer) => {
|
||||
windowDi.override(
|
||||
requestFromChannelInjectable,
|
||||
|
||||
() => (async (channel, request) => {
|
||||
const requestListener = requestChannelListenerFakesForMain.get(channel.id);
|
||||
|
||||
if (!requestListener) {
|
||||
throw new Error(
|
||||
`Tried to get value from channel "${channel.id}", but no listeners were registered`,
|
||||
);
|
||||
}
|
||||
|
||||
try {
|
||||
request = deserialize(serialize(request));
|
||||
} catch (error) {
|
||||
throw new Error(`Tried to request from channel "${channel.id}" with data that is not compatible with StructuredClone: ${error}`);
|
||||
}
|
||||
|
||||
return requestListener.handler(request);
|
||||
const requestListener = requestChannelListenerFakesForMain.get(channel.id);
|
||||
|
||||
if (requestListener) {
|
||||
return requestListener.handler(request);
|
||||
}
|
||||
|
||||
const rawRequestListener = rawRequestChannelListenerFakesForMain.get(channel.id);
|
||||
|
||||
if (rawRequestListener) {
|
||||
return rawRequestListener.handler({
|
||||
frameId: 1,
|
||||
processId: 123,
|
||||
} as Electron.IpcMainInvokeEvent, request);
|
||||
}
|
||||
|
||||
throw new Error(
|
||||
`Tried to get value from channel "${channel.id}", but no listeners were registered`,
|
||||
);
|
||||
}) as RequestFromChannel,
|
||||
);
|
||||
};
|
||||
|
||||
Loading…
Reference in New Issue
Block a user