From 9704598e9259829f1817cfcdaf4c709d37b109b0 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Fri, 24 Feb 2023 15:30:53 -0500 Subject: [PATCH] Fix raw requests not being handled in tests Signed-off-by: Sebastian Malton --- ...override-requesting-from-window-to-main.ts | 51 +++++++++++++++---- 1 file changed, 40 insertions(+), 11 deletions(-) diff --git a/packages/core/src/test-utils/channel-fakes/override-requesting-from-window-to-main.ts b/packages/core/src/test-utils/channel-fakes/override-requesting-from-window-to-main.ts index 70526bd84c..ecd4d5d713 100644 --- a/packages/core/src/test-utils/channel-fakes/override-requesting-from-window-to-main.ts +++ b/packages/core/src/test-utils/channel-fakes/override-requesting-from-window-to-main.ts @@ -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> >(); + const rawRequestChannelListenerFakesForMain = new Map< + string, + RawRequestChannelListener> + >(); 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, ); };