Files
hermes-desktop/tests/client/workflow-socket.test.ts
toor 01d9e301fc
Build / build (push) Canceled after 0s
Playwright / browser (push) Canceled after 0s
initialize Electron desktop app and remove unused files
2026-10-25 01:09:01 +08:00

52 lines
1.5 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from 'vitest'
const ioMock = vi.hoisted(() => vi.fn())
const sockets = vi.hoisted(() => [] as Array<{ connected: boolean; disconnect: ReturnType<typeof vi.fn> }>)
vi.mock('socket.io-client', () => ({
io: ioMock,
}))
vi.mock('@/api/client', () => ({
getActiveProfileName: vi.fn(() => 'default'),
getApiKey: vi.fn(() => 'test-key'),
getBaseUrlValue: vi.fn(() => 'http://localhost:3000'),
}))
describe('workflow socket client', () => {
beforeEach(() => {
vi.resetModules()
ioMock.mockReset()
sockets.splice(0)
ioMock.mockImplementation(() => {
const socket = {
connected: false,
disconnect: vi.fn(),
}
sockets.push(socket)
return socket
})
})
it('reuses the pending socket for the same profile', async () => {
const { connectWorkflowSocket } = await import('@/api/hermes/workflow-socket')
const first = connectWorkflowSocket('default')
const second = connectWorkflowSocket('default')
expect(second).toBe(first)
expect(ioMock).toHaveBeenCalledTimes(1)
expect(sockets[0].disconnect).not.toHaveBeenCalled()
})
it('recreates the socket when the profile changes', async () => {
const { connectWorkflowSocket } = await import('@/api/hermes/workflow-socket')
connectWorkflowSocket('default')
connectWorkflowSocket('travel')
expect(ioMock).toHaveBeenCalledTimes(2)
expect(sockets[0].disconnect).toHaveBeenCalledTimes(1)
})
})