mirror of
https://github.com/claude-code-best/claude-code.git
synced 2026-06-15 12:55:51 +00:00
72 lines
1.6 KiB
TypeScript
72 lines
1.6 KiB
TypeScript
import { EventEmitter } from 'node:events'
|
|
import { describe, expect, test } from 'bun:test'
|
|
import { ServerWebSocketTransport } from '../src/server/serverWebSocketTransport.js'
|
|
|
|
class FakeWebSocket extends EventEmitter {
|
|
readyState = 1
|
|
sent: string[] = []
|
|
closed = false
|
|
|
|
send(data: string, callback?: (error?: Error) => void) {
|
|
this.sent.push(data)
|
|
callback?.()
|
|
}
|
|
|
|
close() {
|
|
this.closed = true
|
|
this.emit('close')
|
|
}
|
|
}
|
|
|
|
describe('server web socket transport', () => {
|
|
test('forwards incoming JSON-RPC messages to the MCP server', async () => {
|
|
const socket = new FakeWebSocket()
|
|
const transport = new ServerWebSocketTransport(socket)
|
|
const messages: unknown[] = []
|
|
|
|
transport.onmessage = message => {
|
|
messages.push(message)
|
|
}
|
|
|
|
await transport.start()
|
|
socket.emit(
|
|
'message',
|
|
Buffer.from(
|
|
JSON.stringify({
|
|
jsonrpc: '2.0',
|
|
id: 1,
|
|
method: 'ping',
|
|
params: {},
|
|
}),
|
|
),
|
|
)
|
|
|
|
expect(messages).toHaveLength(1)
|
|
expect(messages[0]).toEqual({
|
|
jsonrpc: '2.0',
|
|
id: 1,
|
|
method: 'ping',
|
|
params: {},
|
|
})
|
|
})
|
|
|
|
test('serializes outgoing JSON-RPC messages back to the websocket', async () => {
|
|
const socket = new FakeWebSocket()
|
|
const transport = new ServerWebSocketTransport(socket)
|
|
|
|
await transport.start()
|
|
await transport.send({
|
|
jsonrpc: '2.0',
|
|
id: 2,
|
|
result: {},
|
|
})
|
|
|
|
expect(socket.sent).toHaveLength(1)
|
|
expect(JSON.parse(socket.sent[0] ?? 'null')).toEqual({
|
|
jsonrpc: '2.0',
|
|
id: 2,
|
|
result: {},
|
|
})
|
|
})
|
|
})
|