50 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import * as chai from 'chai';
 | |
| import * as dirtyChai from 'dirty-chai';
 | |
| import * as _ from 'lodash';
 | |
| import 'mocha';
 | |
| import * as Sinon from 'sinon';
 | |
| import * as WebSocket from 'websocket';
 | |
| 
 | |
| import { WebSocketOrdersChannel } from '../src/ws_orders_channel';
 | |
| 
 | |
| chai.config.includeStack = true;
 | |
| chai.use(dirtyChai);
 | |
| const expect = chai.expect;
 | |
| const emptyOrdersChannelHandler = {
 | |
|     onUpdate: _.noop.bind(_),
 | |
|     onError: _.noop.bind(_),
 | |
|     onClose: _.noop.bind(_),
 | |
| };
 | |
| 
 | |
| describe('WebSocketOrdersChannel', () => {
 | |
|     const websocketUrl = 'ws://localhost:8080';
 | |
|     const openClient = new WebSocket.w3cwebsocket(websocketUrl);
 | |
|     Sinon.stub(openClient, 'readyState').get(() => WebSocket.w3cwebsocket.OPEN);
 | |
|     Sinon.stub(openClient, 'send').callsFake(_.noop.bind(_));
 | |
|     const openOrdersChannel = new WebSocketOrdersChannel(openClient, emptyOrdersChannelHandler);
 | |
|     const subscriptionOpts = {
 | |
|         baseAssetData: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
 | |
|         quoteAssetData: '0xef7fff64389b814a946f3e92105513705ca6b990',
 | |
|         limit: 100,
 | |
|     };
 | |
|     describe('#subscribe', () => {
 | |
|         it('throws when subscriptionOpts does not conform to schema', () => {
 | |
|             const badSubscribeCall = openOrdersChannel.subscribe.bind(openOrdersChannel, {
 | |
|                 makerAssetData: 5,
 | |
|             });
 | |
|             expect(badSubscribeCall).throws();
 | |
|         });
 | |
|         it('does not throw when inputs are of correct types', () => {
 | |
|             const goodSubscribeCall = openOrdersChannel.subscribe.bind(openOrdersChannel, subscriptionOpts);
 | |
|             expect(goodSubscribeCall).to.not.throw();
 | |
|         });
 | |
|         it('throws when client is closed', () => {
 | |
|             const closedClient = new WebSocket.w3cwebsocket(websocketUrl);
 | |
|             Sinon.stub(closedClient, 'readyState').get(() => WebSocket.w3cwebsocket.CLOSED);
 | |
|             const closedOrdersChannel = new WebSocketOrdersChannel(closedClient, emptyOrdersChannelHandler);
 | |
|             const badSubscribeCall = closedOrdersChannel.subscribe.bind(closedOrdersChannel, subscriptionOpts);
 | |
|             expect(badSubscribeCall).throws('WebSocket connection is closed');
 | |
|         });
 | |
|     });
 | |
| });
 |