Support itbit exchange/ticker. Additions (#232)

* Initial itBit implementation

* Add tests for calculatePrice in exchange/itbit.js

* Add etherium to supported crypto codes in common/itbit.js

* Apply standardjs to itbit files

* itbit trade test. not important

* test getCurrencyRates in ticker/itbit.js
This commit is contained in:
Davit Abulashvili 2018-12-11 13:47:34 +04:00 committed by Josh Harvey
parent 8e1f9e0b83
commit b254f7f2be
12 changed files with 775 additions and 11 deletions

View file

@ -0,0 +1,78 @@
import test from 'ava'
import rewire from 'rewire'
function rewireCalculatePrice (commonMock) {
const itbit = rewire('../../lib/plugins/exchange/itbit/itbit')
itbit.__set__('common', commonMock)
const calculatePrice = itbit.__get__('calculatePrice')
return calculatePrice
}
test('calculate minimum available price for buy', async t => {
const commonMock = {
request () {
return Promise.resolve({
asks: [
[2, 10],
[4, 15],
[4.5, 17]
],
bids: []
})
}
}
const calculatePrice = rewireCalculatePrice(commonMock)
let price = await calculatePrice('buy', 'XBTUSD', 20)
t.is(price, 4)
})
test('calculate minimum available price for sell', async t => {
const commonMock = {
request () {
return Promise.resolve({
bids: [
[2, 10],
[3, 15],
[4.5, 17]
],
asks: []
})
}
}
const calculatePrice = rewireCalculatePrice(commonMock)
let price = await calculatePrice('sell', 'XBTUSD', 20)
t.is(price, 3)
})
test('throw error on insufficient trade depth', async t => {
t.plan(1)
const commonMock = {
request () {
return Promise.resolve({
asks: [
[2, 10],
[4, 15],
[4.5, 17]
],
bids: []
})
}
}
const calculatePrice = rewireCalculatePrice(commonMock)
calculatePrice('buy', 'XBTUSD', 100)
.catch(err => {
t.is(err.message, 'Insufficient market depth')
})
})

View file

@ -0,0 +1,48 @@
import test from 'ava'
import rewire from 'rewire'
import BN from '../../lib/bn'
function rewireGetCurrencyRates (commonMock) {
const itbit = rewire('../../lib/plugins/ticker/itbit/itbit')
itbit.__set__('common', commonMock)
const getCurrencyRates = itbit.__get__('getCurrencyRates')
return getCurrencyRates
}
test('get currency rates of BTC USD', async t => {
function mockRequest() {
return Promise.resolve({
pair: 'XBTUSD',
bid: '622',
bidAmt: '0.0006',
ask: '641.29',
askAmt: '0.5',
lastPrice: '618.00000000',
lastAmt: '0.00040000',
volume24h: '0.00040000',
volumeToday: '0.00040000',
high24h: '618.00000000',
low24h: '618.00000000',
highToday: '618.00000000',
lowToday: '618.00000000',
openToday: '618.00000000',
vwapToday: '618.00000000',
vwap24h: '618.00000000',
serverTimeUTC: '2014-06-24T20:42:35.6160000Z'
})
}
const common = rewire('../../lib/plugins/common/itbit')
common.request = mockRequest
const getCurrencyRates = rewireGetCurrencyRates(common)
let result = await getCurrencyRates('USD', 'BTC')
t.true(result.rates.bid.eq('622'))
t.true(result.rates.ask.eq('641.29'))
})

35
test/unit/itbit-trade.js Normal file
View file

@ -0,0 +1,35 @@
import test from 'ava'
import rewire from 'rewire'
import BN from '../../lib/bn'
function rewireTrade (commonMock, calculatePrice = () => Promise.resolve(15)) {
const itbit = rewire('../../lib/plugins/exchange/itbit/itbit')
itbit.__set__('common', commonMock)
itbit.__set__('calculatePrice', calculatePrice)
const trade = itbit.__get__('trade')
return trade
}
test('should handle itbit error response', async t => {
t.plan(1)
const commonMock = {
mock: true,
authRequest () {
return Promise.reject(new Error('The wallet provided does not have the funds required to place the order.'))
},
buildMarket () {
return 'XBTUSD'
}
}
const trade = rewireTrade(commonMock)
trade('buy', { walletId: 'id' }, BN('93410'), 'USD', 'BTC')
.catch(err => {
t.regex(err.message, /wallet provided/g)
})
})