Files
orca/src/main/browser/browser-webauthn-access.test.ts
T
Brennan Benson 5e189d6081 feat(browser): add a WebAuthn account picker (#14687)
* fix(browser): prompt for WebAuthn account selection

* fix(browser): scope WebAuthn cancellation to session

* fix(renderer): keep WebAuthn render phase pure
2026-08-16 18:32:20 -07:00

58 lines
1.9 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from 'vitest'
const { requestAccountMock, cancelSessionAccountRequestsMock } = vi.hoisted(() => ({
requestAccountMock: vi.fn(),
cancelSessionAccountRequestsMock: vi.fn()
}))
vi.mock('./browser-webauthn-account-picker', () => ({
requestBrowserWebAuthnAccount: requestAccountMock,
cancelBrowserWebAuthnAccountRequestsForSession: cancelSessionAccountRequestsMock
}))
import { installBrowserWebAuthnAccessHandlers } from './browser-webauthn-access'
describe('browser WebAuthn access', () => {
beforeEach(() => {
requestAccountMock.mockReset()
cancelSessionAccountRequestsMock.mockReset()
})
it('dispatches multi-account assertions to the account picker', async () => {
let selectHandler:
| ((
event: Electron.Event,
details: Electron.SelectWebauthnAccountDetails,
callback: (credentialId?: string | null) => void
) => Promise<void>)
| undefined
const browserSession = {
setDevicePermissionHandler: vi.fn(),
removeListener: vi.fn(),
on: vi.fn((eventName: string, listener: unknown) => {
if (eventName === 'select-webauthn-account') {
selectHandler = listener as typeof selectHandler
}
})
} as unknown as Electron.Session
const details = {
relyingPartyId: 'example.com',
frame: {} as Electron.WebFrameMain,
accounts: [{ credentialId: 'first' }, { credentialId: 'second' }]
}
const callback = vi.fn()
requestAccountMock.mockResolvedValue('second')
installBrowserWebAuthnAccessHandlers(browserSession)
await selectHandler?.(
{ preventDefault: vi.fn() } as unknown as Electron.Event,
details,
callback
)
expect(requestAccountMock).toHaveBeenCalledWith(details, browserSession)
expect(callback).toHaveBeenCalledOnce()
expect(callback).toHaveBeenCalledWith('second')
})
})