describe('cli', function () { it('#config', function (done) { let ttl1 = Date.now(); cli.once('done', () => { configs.getRc('cache').then(ttl2 => { expect(ttl2).to.be.equal(ttl1); configs.setLocalRc('cache', 0); done(); }); }); cli.parse(['node', 'dn', 'config', 'cache', ttl1]); }); });
describe('cli', function () { it('#init', function (done) { this.timeout(60000); process.chdir(path.resolve(__dirname, './demo2')); let confDir = path.resolve(__dirname, './demo2/.dawn/'); let pipeFile = path.resolve(__dirname, './demo2/.dawn/pipe.yml'); let rcFile = path.resolve(__dirname, './demo2/.dawn/rc.yml'); if (fs.existsSync(pipeFile)) fs.unlinkSync(pipeFile); if (fs.existsSync(rcFile)) fs.unlinkSync(rcFile); if (fs.existsSync(confDir)) fs.rmdirSync(confDir); expect(fs.existsSync(pipeFile)).to.be.equal(false); cli.once('done', function () { expect(fs.existsSync(pipeFile)).to.be.equal(true); done(); }); cli.parse(['node', 'dn', 'init', '-t', 'unit-demo']); }); });
done(); }); cli.parse(['node', 'dn', 'update']); cli.once('done', function (ctx) { expect(ctx.opts && ctx.opts.value).to.be.equal('mw1'); done(); }); cli.parse(['node', 'dn', 'run', 'test1']); cli.once('fail', function (err) { expect(err.message).to.be.equal('mw2'); done(); }); cli.parse(['node', 'dn', 'run', 'test2']); done(); }); cli.parse(['node', 'dn', 'dev']); done(); }); cli.parse(['node', 'dn', '$', 'clean']);
it('applies cached deltas with new sequence numbers after initial snapshot retrieval', (done) => { jest.useFakeTimers(); const mock = new MockSnapshotRetriever(); const updater = new Updater(mock); updater.applyDelta(mockDelta4); updater.onOrderBookUpdate((snapshot) => { expect(snapshot.seqNum).toEqual(mockDelta4.seqNum); done(); }); jest.runAllTimers(); });
it('constructs an OrderBookWatcher with the correct parameters', async (done) => { const mockStreamClient = Substitute.for<StreamClient>(); const mockRestClient = Substitute.for<RESTClient>(); mockRestClient.getMarket(123).returns(getMarketPromise()); await createOrderBookWatcher(123, mockStreamClient, mockRestClient); const mockUpdater = getLastInitializedUpdater(); const mockWatcher = getLastInitializedWatcher(); expect(mockWatcher.marketID).toBe(123); expect(mockWatcher.snapshotUpdater).toBe(mockUpdater); expect(mockWatcher.streamClient).toBe(mockStreamClient); done(); });
it('can get exchanges', async (done) => { mock.get(REST_API_ROUTE + '/exchanges', () => ({ body: EXCHANGES })); const response = await client.getExchanges(); expect(response).toEqual(EXCHANGES.result); done(); });
it('can get orderbook snapshot data', async (done) => { mock.get(REST_API_ROUTE + '/markets/kraken/btcusd/orderbook', () => ({ body: ORDERBOOK_SNAPSHOT })); const response = await client.getOrderBookSnapshot('kraken', 'btcusd'); expect(response.seqNum).toEqual(ORDERBOOK_SNAPSHOT.result.seqNum); expect(response.asks[0].price).toEqual(ORDERBOOK_SNAPSHOT.result.asks[0][0].toString()); expect(response.asks[0].amount).toEqual(ORDERBOOK_SNAPSHOT.result.asks[0][1].toString()); expect(response.bids[0].price).toEqual(ORDERBOOK_SNAPSHOT.result.bids[0][0].toString()); expect(response.bids[0].amount).toEqual(ORDERBOOK_SNAPSHOT.result.bids[0][1].toString()); done(); });
it('can get trades', async (done) => { mock.get(REST_API_ROUTE + '/markets/kraken/btcusd/trades', () => ({ body: TRADES })); const response = await client.getTrades('kraken', 'btcusd'); expect(response[0].id).toEqual(TRADES.result[0][0]); expect(response[0].timestamp).toEqual(TRADES.result[0][1]); expect(response[0].price).toEqual(TRADES.result[0][2].toString()); expect(response[0].amount).toEqual(TRADES.result[0][3].toString()); done(); });
it('gets the market via the rest client', async (done) => { const mockStreamClient = Substitute.for<StreamClient>(); const mockRestClient = Substitute.for<RESTClient>(); await createOrderBookWatcher(123, mockStreamClient, mockRestClient); mockRestClient.received(1).getMarket(123); done(); });
it('updates state to out of sync if a delta comes in out of order', (done) => { jest.useFakeTimers(); const mock = new MockSnapshotRetriever(); const updater = new Updater(mock); updater.applyDelta(mockDelta5); updater.onStateUpdate((state) => { expect(state.inSync).toEqual(false); done(); }); jest.runAllTimers(); });
it('sets up a callback for StreamClient market updates', async (done) => { const mockStreamClient = Substitute.for<StreamClient>(); const mockRestClient = Substitute.for<RESTClient>(); mockRestClient.getMarket(123).returns(getMarketPromise()); await createOrderBookWatcher(123, mockStreamClient, mockRestClient); mockStreamClient.received(1).onMarketUpdate(Arg.any()); done(); });
it('constructs an Updater with the correct parameter', async (done) => { const mockStreamClient = Substitute.for<StreamClient>(); const mockRestClient = Substitute.for<RESTClient>(); mockRestClient.getMarket(123).returns(getMarketPromise()); await createOrderBookWatcher(123, mockStreamClient, mockRestClient); const mockSnapshotRetriever = getLastInitializedSnapshotRetriever(); const mockUpdater = getLastInitializedUpdater(); expect(mockUpdater.snapshotRetriever).toBe(mockSnapshotRetriever); done(); });
it('can get market description', async (done) => { mock.get(REST_API_ROUTE + '/markets/kraken/btcusd', () => ({ body: MARKET_DESCRIPTION })); const response = await client.getMarketDescription('kraken', 'btcusd'); expect(response).toEqual(MARKET_DESCRIPTION.result); done(); });
it('can get a single exchange', async (done) => { mock.get(REST_API_ROUTE + '/exchanges/kraken', () => ({ body: EXCHANGE_KRAKEN })); const response = await client.getExchange('kraken'); expect(response).toEqual(EXCHANGE_KRAKEN.result); done(); });
it('can get asset by id', async (done) => { mock.get(REST_API_ROUTE + '/v2/assets/60', () => ({ body: ASSET_V2 })); const response = await client.getAsset(60); expect(response).toEqual(ASSET_V2.result); done(); });