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:
parent
8e1f9e0b83
commit
b254f7f2be
12 changed files with 775 additions and 11 deletions
78
test/unit/itbit-calculate-price.js
Normal file
78
test/unit/itbit-calculate-price.js
Normal 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')
|
||||
})
|
||||
})
|
||||
48
test/unit/itbit-get-currency-rates.js
Normal file
48
test/unit/itbit-get-currency-rates.js
Normal 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
35
test/unit/itbit-trade.js
Normal 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)
|
||||
})
|
||||
})
|
||||
Loading…
Add table
Add a link
Reference in a new issue