divvy-lib-orderbook
Version:
Convenient Orderbook class.
90 lines (71 loc) • 2.43 kB
JavaScript
/* eslint-disable max-nested-callbacks */
/* eslint-disable max-params */
/* eslint-disable max-len */
// eslint-disable-line strict
const assert = require('assert-diff')
const DivvyAPI = require('divvy-lib').DivvyAPI
const OrderBook = require('../src/orderbook').OrderBook
const {normalizeCurrency} = require('../src/currencyutils')
const regression = require('./fixtures/regression-data.json')
const regressionResults = require('./fixtures/regression-data-results.json')
const regressionTransactions = require('./fixtures/regression-data-transactions.json')
describe.skip('regression test', function() {
it('usd/usd model', function(done) {
const api = new DivvyAPI()
const book = OrderBook.createOrderBook(api, {
currency_gets: 'USD',
issuer_gets: 'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B',
currency_pays: 'USD',
issuer_pays: 'rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q'
})
let models = 0
book._api.isConnected = function() {
return true
}
book._api.connection.request = function(message) {
let response = {}
switch (message.command) {
case 'subscribe': {
break
}
case 'account_info': {
response = regression.account_info
break
}
case 'book_offers': {
const key = message.taker_gets.currency + message.taker_pays.currency
response = regression.book_offers[key]
break
}
}
return Promise.resolve(response)
}
function emitLedger(index) {
setTimeout(() => {
book._api.emit('ledgerClosed', regression.ledgerClosed[index])
const length = regressionTransactions[index].length
for (let j = 0; j < length; j++) {
book._api.connection.emit('transaction',
regressionTransactions[index][j])
}
}, 1)
}
function normalizeResult(offers) {
offers.forEach(offer => {
offer.TakerGets.currency = normalizeCurrency(offer.TakerGets.currency)
offer.TakerPays.currency = normalizeCurrency(offer.TakerPays.currency)
})
}
book.on('model', function(offers) {
const expected = regressionResults[models]
normalizeResult(expected)
assert.deepEqual(offers, expected)
if (models < regressionResults.length - 1) {
emitLedger(models)
models++
} else {
done()
}
})
})
})