fix(worktree-delete): bound abortable web scan responses

This commit is contained in:
Jinjing
2026-11-12 23:33:52 -08:00
parent d8981a29c6
commit 5ae42e208e
3 changed files with 24 additions and 14 deletions
@@ -90,20 +90,37 @@ describe('git:atRiskLocalFiles cancellation', () => {
it('does not let another window cancel the scan', async () => {
let scanSignal: AbortSignal | undefined
readAtRiskMock.mockImplementation((args: { gitOptions?: { signal?: AbortSignal } }) => {
scanSignal = args.gitOptions?.signal
return Promise.resolve({ count: 0, samplePaths: [], complete: true })
let startScan!: () => void
const scanStarted = new Promise<void>((resolve) => {
startScan = resolve
})
readAtRiskMock.mockImplementation(
(args: { gitOptions?: { signal?: AbortSignal } }) =>
new Promise((_resolve, reject) => {
scanSignal = args.gitOptions?.signal
scanSignal?.addEventListener('abort', () => reject(new Error('aborted')), { once: true })
startScan()
})
)
const owner = requestEvent(1)
void invoke('git:atRiskLocalFiles', requestEvent(1), {
const scan = invoke('git:atRiskLocalFiles', owner, {
worktreePath: '/repo-feature',
requestToken: 'at-risk-1'
})
await vi.waitFor(() => expect(readAtRiskMock).toHaveBeenCalled())
const cancelled = expect(scan).rejects.toThrow('aborted')
await scanStarted
await invoke('git:cancelAtRiskLocalFiles', requestEvent(2), {
requestToken: 'at-risk-1'
})
expect(scanSignal?.aborted).toBe(false)
const abortedByOtherWindow = scanSignal?.aborted
await invoke('git:cancelAtRiskLocalFiles', owner, {
requestToken: 'at-risk-1'
})
expect(scanSignal?.aborted).toBe(true)
await cancelled
expect(abortedByOtherWindow).toBe(false)
})
})
@@ -80,12 +80,5 @@ describe('web git atRiskLocalFiles', () => {
await expect(scan).rejects.toBeInstanceOf(RuntimeRpcCallError)
await expect(scan).rejects.toMatchObject({ code: 'method_not_found' })
expect(abortableCallMock).toHaveBeenCalledWith(
'env-1',
'git.atRiskLocalFiles',
{ worktree: expect.anything() },
undefined,
expect.any(AbortSignal)
)
})
})
@@ -30,7 +30,7 @@ async function callAbortableAtRiskLocalFiles(
environment.id,
'git.atRiskLocalFiles',
{ worktree: toRuntimeWorktreeSelector(worktree.id) },
undefined,
30_000,
controller.signal
)
updateEnvironmentFromResponse(environment, response)