@novo-learning/novo-sdk
Version:
SDK for the Novolanguage Speech Analysis API
81 lines (68 loc) • 2.81 kB
text/typescript
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();
// });
// });
});