1
0
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:
Sebastian Malton 2023-02-24 15:30:53 -05:00
parent 4fe38cc09a
commit 9704598e92

View File

@ -6,8 +6,9 @@ import type { DiContainer } from "@ogre-tools/injectable";
import { deserialize, serialize } from "v8"; import { deserialize, serialize } from "v8";
import type { RequestChannel } from "../../common/utils/channel/request-channel-listener-injection-token"; 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 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 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"; import requestFromChannelInjectable from "../../renderer/utils/channel/request-from-channel.injectable";
export const overrideRequestingFromWindowToMain = (mainDi: DiContainer) => { export const overrideRequestingFromWindowToMain = (mainDi: DiContainer) => {
@ -15,6 +16,10 @@ export const overrideRequestingFromWindowToMain = (mainDi: DiContainer) => {
string, string,
RequestChannelListener<RequestChannel<unknown, unknown>> RequestChannelListener<RequestChannel<unknown, unknown>>
>(); >();
const rawRequestChannelListenerFakesForMain = new Map<
string,
RawRequestChannelListener<RequestChannel<unknown, unknown>>
>();
mainDi.override( mainDi.override(
enlistRequestChannelListenerInjectableInMain, 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) => { return (windowDi: DiContainer) => {
windowDi.override( windowDi.override(
requestFromChannelInjectable, requestFromChannelInjectable,
() => (async (channel, request) => { () => (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 { try {
request = deserialize(serialize(request)); request = deserialize(serialize(request));
} catch (error) { } catch (error) {
throw new Error(`Tried to request from channel "${channel.id}" with data that is not compatible with StructuredClone: ${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, }) as RequestFromChannel,
); );
}; };