uppy
Version:
Almost as cute as a Puppy :dog:
160 lines (122 loc) • 5.93 kB
JavaScript
;
var _UppySocket = require('./UppySocket');
var _UppySocket2 = _interopRequireDefault(_UppySocket);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
describe('core/uppySocket', function () {
var webSocketConstructorSpy = void 0;
var webSocketCloseSpy = void 0;
var webSocketSendSpy = void 0;
beforeEach(function () {
webSocketConstructorSpy = jest.fn();
webSocketCloseSpy = jest.fn();
webSocketSendSpy = jest.fn();
global.WebSocket = function () {
function WebSocket(target) {
_classCallCheck(this, WebSocket);
webSocketConstructorSpy(target);
}
WebSocket.prototype.close = function close(args) {
webSocketCloseSpy(args);
};
WebSocket.prototype.send = function send(json) {
webSocketSendSpy(json);
};
WebSocket.prototype.triggerOpen = function triggerOpen() {
this.onopen();
};
WebSocket.prototype.triggerClose = function triggerClose() {
this.onclose();
};
return WebSocket;
}();
});
afterEach(function () {
global.WebSocket = undefined;
});
it('should expose a class', function () {
expect(_UppySocket2.default.name).toEqual('UppySocket');
expect(new _UppySocket2.default({
target: 'foo'
}) instanceof _UppySocket2.default);
});
it('should setup a new WebSocket', function () {
new _UppySocket2.default({ target: 'foo' }); // eslint-disable-line no-new
expect(webSocketConstructorSpy.mock.calls[0][0]).toEqual('foo');
});
it('should send a message via the websocket if the connection is open', function () {
var uppySocket = new _UppySocket2.default({ target: 'foo' });
var webSocketInstance = uppySocket.socket;
webSocketInstance.triggerOpen();
uppySocket.send('bar', 'boo');
expect(webSocketSendSpy.mock.calls.length).toEqual(1);
expect(webSocketSendSpy.mock.calls[0]).toEqual([JSON.stringify({ action: 'bar', payload: 'boo' })]);
});
it('should queue the message for the websocket if the connection is not open', function () {
var uppySocket = new _UppySocket2.default({ target: 'foo' });
uppySocket.send('bar', 'boo');
expect(uppySocket.queued).toEqual([{ action: 'bar', payload: 'boo' }]);
expect(webSocketSendSpy.mock.calls.length).toEqual(0);
});
it('should queue any messages for the websocket if the connection is not open, then send them when the connection is open', function () {
var uppySocket = new _UppySocket2.default({ target: 'foo' });
var webSocketInstance = uppySocket.socket;
uppySocket.send('bar', 'boo');
uppySocket.send('moo', 'baa');
expect(uppySocket.queued).toEqual([{ action: 'bar', payload: 'boo' }, { action: 'moo', payload: 'baa' }]);
expect(webSocketSendSpy.mock.calls.length).toEqual(0);
webSocketInstance.triggerOpen();
expect(uppySocket.queued).toEqual([]);
expect(webSocketSendSpy.mock.calls.length).toEqual(2);
expect(webSocketSendSpy.mock.calls[0]).toEqual([JSON.stringify({ action: 'bar', payload: 'boo' })]);
expect(webSocketSendSpy.mock.calls[1]).toEqual([JSON.stringify({ action: 'moo', payload: 'baa' })]);
});
it('should start queuing any messages when the websocket connection is closed', function () {
var uppySocket = new _UppySocket2.default({ target: 'foo' });
var webSocketInstance = uppySocket.socket;
webSocketInstance.triggerOpen();
uppySocket.send('bar', 'boo');
expect(uppySocket.queued).toEqual([]);
webSocketInstance.triggerClose();
uppySocket.send('bar', 'boo');
expect(uppySocket.queued).toEqual([{ action: 'bar', payload: 'boo' }]);
});
it('should close the websocket when it is force closed', function () {
var uppySocket = new _UppySocket2.default({ target: 'foo' });
var webSocketInstance = uppySocket.socket;
webSocketInstance.triggerOpen();
uppySocket.close();
expect(webSocketCloseSpy.mock.calls.length).toEqual(1);
});
it('should be able to subscribe to messages received on the websocket', function () {
var uppySocket = new _UppySocket2.default({ target: 'foo' });
var webSocketInstance = uppySocket.socket;
var emitterListenerMock = jest.fn();
uppySocket.on('hi', emitterListenerMock);
webSocketInstance.triggerOpen();
webSocketInstance.onmessage({
data: JSON.stringify({ action: 'hi', payload: 'ho' })
});
expect(emitterListenerMock.mock.calls).toEqual([['ho', undefined, undefined, undefined, undefined, undefined]]);
});
it('should be able to emit messages and subscribe to them', function () {
var uppySocket = new _UppySocket2.default({ target: 'foo' });
var emitterListenerMock = jest.fn();
uppySocket.on('hi', emitterListenerMock);
uppySocket.emit('hi', 'ho');
uppySocket.emit('hi', 'ho');
uppySocket.emit('hi', 'off to work we go');
expect(emitterListenerMock.mock.calls).toEqual([['ho', undefined, undefined, undefined, undefined, undefined], ['ho', undefined, undefined, undefined, undefined, undefined], ['off to work we go', undefined, undefined, undefined, undefined, undefined]]);
});
it('should be able to subscribe to the first event for a particular action', function () {
var uppySocket = new _UppySocket2.default({ target: 'foo' });
var emitterListenerMock = jest.fn();
uppySocket.once('hi', emitterListenerMock);
uppySocket.emit('hi', 'ho');
uppySocket.emit('hi', 'ho');
uppySocket.emit('hi', 'off to work we go');
expect(emitterListenerMock.mock.calls.length).toEqual(1);
expect(emitterListenerMock.mock.calls).toEqual([['ho', undefined, undefined, undefined, undefined, undefined]]);
});
});
//# sourceMappingURL=UppySocket.test.js.map