From 33acb495376e00f89ccdd7a364bba084cb8a4e30 Mon Sep 17 00:00:00 2001 From: Neil <4138956+nwparker@users.noreply.github.com> Date: Sun, 2 Aug 2026 01:14:18 -0700 Subject: [PATCH] test(preload): exercise restart IPC registrations --- src/preload/index.ts | 10 ++-------- src/preload/renderer-restart-wiring.test.ts | 16 ++++++++++++---- src/preload/renderer-restart-wiring.ts | 19 +++++++++++-------- 3 files changed, 25 insertions(+), 20 deletions(-) diff --git a/src/preload/index.ts b/src/preload/index.ts index 3c3fd23ef70..2425a7d4219 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -279,8 +279,7 @@ import { } from '../shared/renderer-restart-preparation' import { prepareAndInvokeUpdaterInstall, - relayRendererUnloadPrevented, - relayUpdaterStatus + registerRendererRestartIpcRelays } from './renderer-restart-wiring' type NativeFileDropCallback = (data: NativeFileDropPayload) => void @@ -292,12 +291,7 @@ const updaterQuitAbortRelay = createUpdaterQuitAbortRelay( ORCA_UPDATER_QUIT_AND_INSTALL_ABORTED_EVENT ) -ipcRenderer.on('updater:status', (_event, status: UpdateStatus) => { - relayUpdaterStatus(updaterQuitAbortRelay, status) -}) -ipcRenderer.on('window:unload-prevented', () => { - relayRendererUnloadPrevented(window) -}) +registerRendererRestartIpcRelays(ipcRenderer, window, updaterQuitAbortRelay) function getLinuxDisplayServer(): 'wayland' | 'x11' | null { if (process.platform !== 'linux') { diff --git a/src/preload/renderer-restart-wiring.test.ts b/src/preload/renderer-restart-wiring.test.ts index 048da8074d8..56cd5d3dd9e 100644 --- a/src/preload/renderer-restart-wiring.test.ts +++ b/src/preload/renderer-restart-wiring.test.ts @@ -3,8 +3,7 @@ import { ORCA_RENDERER_UNLOAD_PREVENTED_EVENT } from '../shared/renderer-shutdow import { ORCA_UPDATER_QUIT_AND_INSTALL_STARTED_EVENT } from '../shared/updater-renderer-events' import { prepareAndInvokeUpdaterInstall, - relayRendererUnloadPrevented, - relayUpdaterStatus + registerRendererRestartIpcRelays } from './renderer-restart-wiring' describe('renderer restart wiring', () => { @@ -12,11 +11,20 @@ describe('renderer restart wiring', () => { const eventTarget = new EventTarget() const unloadPrevented = vi.fn() const handleStatus = vi.fn() + const listeners = new Map void>() + const ipcRenderer = { + on: vi.fn((channel: string, listener: (...args: unknown[]) => void) => { + listeners.set(channel, listener) + return ipcRenderer + }) + } as unknown as Parameters[0] eventTarget.addEventListener(ORCA_RENDERER_UNLOAD_PREVENTED_EVENT, unloadPrevented) - relayUpdaterStatus({ handleStatus }, { state: 'error', message: 'install failed' }) - relayRendererUnloadPrevented(eventTarget) + registerRendererRestartIpcRelays(ipcRenderer, eventTarget, { handleStatus }) + listeners.get('updater:status')?.({}, { state: 'error', message: 'install failed' }) + listeners.get('window:unload-prevented')?.({}) + expect(ipcRenderer.on).toHaveBeenCalledTimes(2) expect(handleStatus).toHaveBeenCalledWith({ state: 'error', message: 'install failed' }) expect(unloadPrevented).toHaveBeenCalledTimes(1) }) diff --git a/src/preload/renderer-restart-wiring.ts b/src/preload/renderer-restart-wiring.ts index 80770c52a3f..fbd3e26a71d 100644 --- a/src/preload/renderer-restart-wiring.ts +++ b/src/preload/renderer-restart-wiring.ts @@ -1,3 +1,4 @@ +import type { IpcRenderer } from 'electron' import { ORCA_RENDERER_UNLOAD_PREVENTED_EVENT } from '../shared/renderer-shutdown-events' import { prepareRendererForAppRestart, @@ -9,15 +10,17 @@ import { ORCA_UPDATER_QUIT_AND_INSTALL_STARTED_EVENT } from '../shared/updater-renderer-events' -export function relayUpdaterStatus( - relay: Pick, - status: UpdateStatus +export function registerRendererRestartIpcRelays( + ipcRenderer: Pick, + eventTarget: EventTarget, + relay: Pick ): void { - relay.handleStatus(status) -} - -export function relayRendererUnloadPrevented(eventTarget: EventTarget): void { - eventTarget.dispatchEvent(new Event(ORCA_RENDERER_UNLOAD_PREVENTED_EVENT)) + ipcRenderer.on('updater:status', (_event, status: UpdateStatus) => { + relay.handleStatus(status) + }) + ipcRenderer.on('window:unload-prevented', () => { + eventTarget.dispatchEvent(new Event(ORCA_RENDERER_UNLOAD_PREVENTED_EVENT)) + }) } export async function prepareAndInvokeUpdaterInstall(