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 { 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,
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user