Skip to content

Commit 92dd732

Browse files
committed
(feature) add public REST API model tests where possible
1 parent 3a2ba55 commit 92dd732

7 files changed

Lines changed: 170 additions & 4 deletions

File tree

lib/public_trade.js

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,55 @@
11
'use strict'
22

3+
const _isArray = require('lodash/isArray')
4+
const _isObject = require('lodash/isObject')
35
const Model = require('./model')
46
const BOOL_FIELDS = []
5-
const FIELDS = {
7+
const TRADING_FIELDS = {
68
id: 0,
79
mts: 1,
810
amount: 2,
911
price: 3
1012
}
1113

12-
const FIELD_KEYS = Object.keys(FIELDS)
14+
const FUNDING_FIELDS = {
15+
id: 0,
16+
mts: 1,
17+
amount: 2,
18+
rate: 3,
19+
period: 4
20+
}
21+
22+
const TRADING_FIELD_KEYS = Object.keys(TRADING_FIELDS)
23+
const FUNDING_FIELD_KEYS = Object.keys(FUNDING_FIELDS)
1324

1425
class PublicTrade extends Model {
1526
constructor (data = {}) {
16-
super(data, FIELDS, BOOL_FIELDS, FIELD_KEYS)
27+
if (_isArray(data)) {
28+
if (data.length === 5) {
29+
super(data, FUNDING_FIELDS, BOOL_FIELDS, FUNDING_FIELD_KEYS)
30+
} else {
31+
super(data, TRADING_FIELDS, BOOL_FIELDS, TRADING_FIELD_KEYS)
32+
}
33+
} else if (_isObject(data)) {
34+
if (data.rate) {
35+
super(data, FUNDING_FIELDS, BOOL_FIELDS, FUNDING_FIELD_KEYS)
36+
} else {
37+
super(data, TRADING_FIELDS, BOOL_FIELDS, TRADING_FIELD_KEYS)
38+
}
39+
} else {
40+
throw new Error('unknown data type')
41+
}
1742
}
1843

1944
static unserialize (arr) {
20-
return super.unserialize(arr, FIELDS, BOOL_FIELDS, FIELD_KEYS)
45+
if ((_isArray(arr[0]) && arr[0].length === 5) || (arr.length === 5)) {
46+
return super.unserialize(arr, FUNDING_FIELDS, BOOL_FIELDS, FUNDING_FIELD_KEYS)
47+
} else {
48+
return super.unserialize(arr, TRADING_FIELDS, BOOL_FIELDS, TRADING_FIELD_KEYS)
49+
}
2150
}
2251
}
2352

2453
module.exports = PublicTrade
54+
module.exports.TRADING_FIELDS = TRADING_FIELDS
55+
module.exports.FUNDING_FIELDS = FUNDING_FIELDS

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
},
3434
"homepage": "http://bitfinexcom.github.io/bfx-api-node-models/",
3535
"devDependencies": {
36+
"bfx-api-node-rest": "^1.0.0",
3637
"chai": "^3.4.1",
3738
"debug": "^3.1.0",
3839
"mocha": "^3.4.2",

test/lib/models/candle.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
/* eslint-env mocha */
22
'use strict'
33

4+
const assert = require('assert')
5+
const { RESTv2 } = require('bfx-api-node-rest')
46
const { Candle } = require('../../../lib')
57
const testModel = require('../../helpers/test_model')
68

@@ -9,4 +11,20 @@ describe('Candle model', () => {
911
model: Candle,
1012
orderedFields: ['mts', 'open', 'close', 'high', 'low', 'volume']
1113
})
14+
15+
it('unserializes live data correctly', async () => {
16+
const rest = new RESTv2()
17+
const arr = await rest.candles('tBTCUSD')
18+
19+
arr.forEach(candle => {
20+
const obj = Candle.unserialize(candle)
21+
22+
assert.equal(obj.mts, candle[0])
23+
assert.equal(obj.open, candle[1])
24+
assert.equal(obj.close, candle[2])
25+
assert.equal(obj.high, candle[3])
26+
assert.equal(obj.low, candle[4])
27+
assert.equal(obj.volume, candle[5])
28+
})
29+
})
1230
})

test/lib/models/funding_ticker.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
'use strict'
33

44
const assert = require('assert')
5+
const { RESTv2 } = require('bfx-api-node-rest')
56
const { FundingTicker } = require('../../../lib')
67

78
const DATA = [
@@ -63,4 +64,24 @@ describe('FundingTicker model', () => {
6364
assert.equal(obj.high, 0.000163)
6465
assert.equal(obj.low, 2.7e-7)
6566
})
67+
68+
it('unserializes live data correctly', async () => {
69+
const rest = new RESTv2()
70+
const arr = await rest.ticker('fUSD')
71+
const obj = FundingTicker.unserialize(arr)
72+
73+
assert.equal(obj.frr, arr[0])
74+
assert.equal(obj.bid, arr[1])
75+
assert.equal(obj.bidPeriod, arr[2])
76+
assert.equal(obj.bidSize, arr[3])
77+
assert.equal(obj.ask, arr[4])
78+
assert.equal(obj.askPeriod, arr[5])
79+
assert.equal(obj.askSize, arr[6])
80+
assert.equal(obj.dailyChange, arr[7])
81+
assert.equal(obj.dailyChangePerc, arr[8])
82+
assert.equal(obj.lastPrice, arr[9])
83+
assert.equal(obj.volume, arr[10])
84+
assert.equal(obj.high, arr[11])
85+
assert.equal(obj.low, arr[12])
86+
})
6687
})

test/lib/models/order_book.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
const assert = require('assert')
55
const CRC = require('crc-32')
6+
const { RESTv2 } = require('bfx-api-node-rest')
67
const { OrderBook } = require('../../../lib')
78

89
describe('OrderBook model', () => {
@@ -742,4 +743,52 @@ describe('OrderBook model', () => {
742743
assert.deepEqual(entryA, expA)
743744
assert.deepEqual(entryB, expB)
744745
})
746+
747+
it('unserializes live trading data correctly', async () => {
748+
const rest = new RESTv2()
749+
const book = await rest.orderBook('tBTCUSD', 'P0')
750+
const obj = new OrderBook(book)
751+
let firstAsk = -1
752+
753+
book.forEach((entry, i) => {
754+
if (entry[2] < 0) {
755+
if (firstAsk === -1) {
756+
firstAsk = i
757+
}
758+
759+
assert.equal(obj.asks[i - firstAsk][0], entry[0])
760+
assert.equal(obj.asks[i - firstAsk][1], entry[1])
761+
assert.equal(obj.asks[i - firstAsk][2], entry[2])
762+
} else {
763+
assert.equal(obj.bids[i][0], entry[0])
764+
assert.equal(obj.bids[i][1], entry[1])
765+
assert.equal(obj.bids[i][2], entry[2])
766+
}
767+
})
768+
})
769+
770+
it('unserializes live funding data correctly', async () => {
771+
const rest = new RESTv2()
772+
const book = await rest.orderBook('fUSD', 'P0')
773+
const obj = new OrderBook(book)
774+
let firstAsk = -1
775+
776+
book.forEach((entry, i) => {
777+
if (entry[3] > 0) {
778+
if (firstAsk === -1) {
779+
firstAsk = i
780+
}
781+
782+
assert.equal(obj.asks[i - firstAsk][0], entry[0])
783+
assert.equal(obj.asks[i - firstAsk][1], entry[1])
784+
assert.equal(obj.asks[i - firstAsk][2], entry[2])
785+
assert.equal(obj.asks[i - firstAsk][3], entry[3])
786+
} else {
787+
assert.equal(obj.bids[i][0], entry[0])
788+
assert.equal(obj.bids[i][1], entry[1])
789+
assert.equal(obj.bids[i][2], entry[2])
790+
assert.equal(obj.bids[i][3], entry[3])
791+
}
792+
})
793+
})
745794
})

test/lib/models/public_trade.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
/* eslint-env mocha */
22
'use strict'
33

4+
const assert = require('assert')
5+
const { RESTv2 } = require('bfx-api-node-rest')
46
const { PublicTrade } = require('../../../lib')
57
const testModel = require('../../helpers/test_model')
68

@@ -11,4 +13,30 @@ describe('Public Trade model', () => {
1113
'id', 'mts', 'amount', 'price'
1214
]
1315
})
16+
17+
it('unserializes live trading data correctly', async () => {
18+
const rest = new RESTv2()
19+
const arr = await rest.trades('tBTCUSD')
20+
21+
arr.forEach(trade => {
22+
const obj = PublicTrade.unserialize(trade)
23+
24+
Object.keys(PublicTrade.TRADING_FIELDS).forEach(field => {
25+
assert.equal(obj[field], trade[PublicTrade.TRADING_FIELDS[field]])
26+
})
27+
})
28+
})
29+
30+
it('unserializes live funding data correctly', async () => {
31+
const rest = new RESTv2()
32+
const arr = await rest.trades('fUSD')
33+
34+
arr.forEach(trade => {
35+
const obj = PublicTrade.unserialize(trade)
36+
37+
Object.keys(PublicTrade.FUNDING_FIELDS).forEach(field => {
38+
assert.equal(obj[field], trade[PublicTrade.FUNDING_FIELDS[field]])
39+
})
40+
})
41+
})
1442
})

test/lib/models/trading_ticker.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
'use strict'
33

44
const assert = require('assert')
5+
const { RESTv2 } = require('bfx-api-node-rest')
56
const { TradingTicker } = require('../../../lib')
67

78
const DATA = [
@@ -54,4 +55,21 @@ describe('TradingTicker model', () => {
5455
assert.equal(obj.high, 284.62)
5556
assert.equal(obj.low, 211.19)
5657
})
58+
59+
it('unserializes live data correctly', async () => {
60+
const rest = new RESTv2()
61+
const arr = await rest.ticker('tBTCUSD')
62+
const obj = TradingTicker.unserialize(arr)
63+
64+
assert.equal(obj.bid, arr[0])
65+
assert.equal(obj.bidSize, arr[1])
66+
assert.equal(obj.ask, arr[2])
67+
assert.equal(obj.askSize, arr[3])
68+
assert.equal(obj.dailyChange, arr[4])
69+
assert.equal(obj.dailyChangePerc, arr[5])
70+
assert.equal(obj.lastPrice, arr[6])
71+
assert.equal(obj.volume, arr[7])
72+
assert.equal(obj.high, arr[8])
73+
assert.equal(obj.low, arr[9])
74+
})
5775
})

0 commit comments

Comments
 (0)