test(preload): exercise restart IPC registrations

This commit is contained in:
Neil
2026-08-02 01:14:18 -07:00
parent 8e5030028f
commit 33acb49537
3 changed files with 25 additions and 20 deletions
+2 -8
View File
@@ -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') {
+12 -4
View File
@@ -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<string, (...args: unknown[]) => void>()
const ipcRenderer = {
on: vi.fn((channel: string, listener: (...args: unknown[]) => void) => {
listeners.set(channel, listener)
return ipcRenderer
})
} as unknown as Parameters<typeof registerRendererRestartIpcRelays>[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)
})
+11 -8
View File
@@ -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<UpdaterQuitAbortRelay, 'handleStatus'>,
status: UpdateStatus
export function registerRendererRestartIpcRelays(
ipcRenderer: Pick<IpcRenderer, 'on'>,
eventTarget: EventTarget,
relay: Pick<UpdaterQuitAbortRelay, 'handleStatus'>
): 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(