UNPKG

@novo-learning/novo-sdk

Version:

SDK for the Novolanguage Speech Analysis API

81 lines (68 loc) 2.81 kB
import WS from 'jest-websocket-mock'; import { ConnectionStateChangedEvent } from '../../../src/clients/speech-api'; import { EventBus } from '../../../src/clients/speech-api/event-bus'; import { MessageQueue } from '../../../src/clients/speech-api/websocket/message-queue'; import { ConnectionMonitor } from '../../../src/clients/speech-api/websocket/monitor'; const TEST_WS_URL = 'ws://localhost:2999'; describe('Connection monitor', () => { let monitor: ConnectionMonitor | undefined; let eventbus: EventBus; let queue: MessageQueue; let socket: WebSocket; let server: WS; beforeEach(() => { server = new WS(TEST_WS_URL); eventbus = new EventBus(); socket = new WebSocket(TEST_WS_URL); queue = new MessageQueue(eventbus, socket); monitor = new ConnectionMonitor(eventbus, queue, socket); }); afterEach(() => { WS.clean(); if (monitor !== undefined) { monitor.close(); monitor = undefined; } }); describe('Creates websocket connection event handlers', () => { it('should register an onOpen, onClose and onError handler', () => { expect(socket.onopen).toBeDefined(); expect(socket.onclose).toBeDefined(); expect(socket.onerror).toBeDefined(); }); }); describe('Emits a state change event on websocket connection event', () => { it('should emit state open when onopen websocket event was received', () => { const dispatch = jest.spyOn(eventbus, 'dispatch'); if (socket.onopen) { socket.onopen({} as unknown as Event); } expect(dispatch).toBeCalledWith(ConnectionStateChangedEvent.type, { previous: 'initial', state: 'open' }); }); it('should emit state closed when onerror websocket event was received', () => { const dispatch = jest.spyOn(eventbus, 'dispatch'); server.error(); expect(dispatch).toBeCalledWith(ConnectionStateChangedEvent.type, { previous: 'initial', state: 'closed' }); }); it('should emit state close when onclose websocket event was received', () => { const dispatch = jest.spyOn(eventbus, 'dispatch'); server.close(); expect(dispatch).toBeCalledWith(ConnectionStateChangedEvent.type, { previous: 'initial', state: 'closed' }); }); }); // describe('Connection quality', () => { // beforeEach(() => { // jest.useFakeTimers(); // // eslint-disable-next-line @typescript-eslint/no-explicit-any // (socket.onopen as any)[0]({} as unknown); // }); // afterEach(() => { // jest.useRealTimers(); // }); // it('should start to monitor connection quality', async () => { // const req = jest.spyOn(queue, 'request'); // await monitor?.checkConnection(true); // expect(req).toBeCalled(); // }); // }); });