tv
Version:
Interactive debug console plugin for hapi
122 lines (69 loc) • 3.02 kB
JavaScript
'use strict';
// Load modules
var Sinon = require('sinon');
var WebSocketManager = require('../../source/js/webSocketManager');
// Declare internals
var internals = {};
describe('WebSocketManager', function () {
beforeEach(function () {
this.webSocketSendSpy = Sinon.spy();
this.onmessageSpy = Sinon.spy();
this.mockWebSocket = { send: this.webSocketSendSpy, onmessage: this.onmessageSpy };
this.manager = WebSocketManager.create(this.mockWebSocket);
});
describe('#create', function () {
it('creates a new instance of a WebSocketManager', function () {
expect(WebSocketManager.create(this.mockWebSocket)).to.be.an.instanceOf(WebSocketManager);
});
});
describe('when a websocket is openned', function () {
it('calls teh onSocketOpen callback', function () {
var onSocketOpenSpy = Sinon.spy();
this.manager.onSocketOpen = onSocketOpenSpy;
this.mockWebSocket.onopen();
expect(onSocketOpenSpy).to.have.been.calledOnce;
});
});
describe('#applyFilter', function (){
context('with a webSocket connection that is open', function () {
it('filters the messages by the given client id', function () {
this.mockWebSocket.onopen();
this.manager.applyFilter('456');
expect(this.mockWebSocket.send.callCount).to.equal(2);
expect(this.mockWebSocket.send.args[1][0]).to.equal('subscribe:456');
});
});
});
describe('#clearFilter', function () {
it('clears any previously set filter so all messages are received', function () {
this.mockWebSocket.onopen();
this.manager.clearFilter();
expect(this.mockWebSocket.send.callCount).to.equal(2);
expect(this.mockWebSocket.send.args[1][0]).to.equal('subscribe:*');
});
});
describe('#onMessage', function (){
it('registers a callback that\'s called whenever a message is received', function () {
var onMessageFn = function () { };
this.manager.onMessage(onMessageFn);
expect(this.mockWebSocket.onmessage).to.equal(onMessageFn);
});
});
describe('#pause', function (){
it('stops forwarding messages to the onMesssage callback', function () {
var onMessageFn = function () { };
this.manager.onMessage(onMessageFn);
this.manager.pause();
expect(this.mockWebSocket.onmessage).to.equal(null);
});
});
describe('#resume', function (){
it('resumes forwarding messages to the onMesssage callback', function () {
var onMessageFn = function () { };
this.manager.onMessage(onMessageFn);
this.manager.pause();
this.manager.resume();
expect(this.mockWebSocket.onmessage).to.equal(onMessageFn);
});
});
});