Skip to content

Commit 6b4e6bf

Browse files
committed
add more orderbook tests
1 parent 75dce11 commit 6b4e6bf

File tree

1 file changed

+93
-7
lines changed

1 file changed

+93
-7
lines changed

tests/test_orderbook.py

Lines changed: 93 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def generate_id():
3939
]
4040
sequence = 3419033239
4141
test_book = {
42-
"sequence": 3419033239,
42+
"sequence": sequence,
4343
"bids": bids1,
4444
"asks": asks1,
4545
}
@@ -108,9 +108,6 @@ def generate_id():
108108
'id': asks1[2][2]}],
109109
}
110110
"""
111-
{"type":"done","side":"sell","order_id":"4eef1226-4b38-422c-a5b1-56def7107f9a","reason":"canceled","product_id":"BTC-USD","price":"2601.76000000","remaining_size":"3.09000000","sequence":3419023013,"time":"2017-06-25T11:23:14.775000Z"}
112-
{"type":"received","order_id":"26c22ff5-01b1-4ca3-859c-6349d6eb06b4","order_type":"limit","size":"0.10000000","price":"2602.22000000","side":"sell","product_id":"BTC-USD","sequence":3419023014,"time":"2017-06-25T11:23:14.792000Z"}
113-
{"type":"open","side":"sell","price":"2602.22000000","order_id":"26c22ff5-01b1-4ca3-859c-6349d6eb06b4","remaining_size":"0.10000000","product_id":"BTC-USD","sequence":3419023015,"time":"2017-06-25T11:23:14.792000Z"}
114111
{"type":"heartbeat","last_trade_id":17393422,"product_id":"BTC-USD","sequence":3419023015,"time":"2017-06-25T11:23:14.838000Z"}
115112
{"type":"received","order_id":"c1ac921c-021f-446d-ad6f-06057a6c17f5","order_type":"limit","size":"0.01495400","price":"309.41000000","side":"buy","product_id":"ETH-USD","sequence":617133250,"time":"2017-06-25T11:23:14.864000Z"}
116113
{"type":"open","side":"buy","price":"309.41000000","order_id":"c1ac921c-021f-446d-ad6f-06057a6c17f5","remaining_size":"0.01495400","product_id":"ETH-USD","sequence":617133251,"time":"2017-06-25T11:23:14.864000Z"}
@@ -155,7 +152,6 @@ async def test_basic_init(self, mock_book, mock_connect):
155152
assert dict(orderbook._bids[product_id].items()) == bids1_internal
156153
assert orderbook._sequences[product_id] == sequence
157154

158-
print(orderbook.get_current_book(product_id)['bids'])
159155
assert orderbook.get_current_book(product_id) == {
160156
"sequence": 3419033239,
161157
"bids": [[Decimal(r[0]), Decimal(r[1]), r[2]] for r in bids1],
@@ -282,15 +278,13 @@ async def test_logfile(self, mock_book, mock_connect):
282278
mock_connect.return_value.aenter.receive_str.side_effect = [
283279
json.dumps(message_expected)
284280
]
285-
286281
product_id = 'ETH-USD'
287282
book = {'bids': [], 'asks': [], 'sequence': 1}
288283
mock_book.return_value = book
289284
calls = [call(f'B {product_id} {json.dumps(book)}\n')]
290285
with patch('aiofiles.open',
291286
new_callable=AsyncContextManagerMock) as mock_open:
292287
mock_open.return_value.aenter.write = CoroutineMock()
293-
# mock_open.return_value.aexit = AsyncContextManagerMock()
294288
mock_write = mock_open.return_value.aenter.write
295289
async with gdax.orderbook.OrderBook(
296290
[product_id],
@@ -301,3 +295,95 @@ async def test_logfile(self, mock_book, mock_connect):
301295
message = await orderbook.handle_message()
302296
calls.append(call(f'W {json.dumps(message_expected)}\n'))
303297
mock_write.assert_has_calls(calls)
298+
299+
@patch('gdax.trader.Trader.get_product_order_book')
300+
async def test_orderbook_advanced(self, mock_book, mock_connect):
301+
mock_connect.return_value.aenter.receive_str = CoroutineMock()
302+
mock_connect.return_value.aenter.send_json = CoroutineMock()
303+
messages_expected = [
304+
{ # ignored
305+
"product_id": "BTC-USD",
306+
"sequence": sequence - 1,
307+
},
308+
{ # ignored
309+
"type": "received",
310+
"order_id": "26c22ff5-01b1-4ca3-859c-6349d6eb06b4",
311+
"order_type": "limit",
312+
"size": "0.10000000",
313+
"price": "2602.22000000",
314+
"side": "sell",
315+
"product_id": "BTC-USD",
316+
"sequence": sequence + 1,
317+
"time": "2017-06-25T11:23:14.792000Z"
318+
},
319+
{
320+
"type": "done",
321+
"side": "sell",
322+
"order_id": asks1[0][2],
323+
"reason": "canceled",
324+
"product_id": "BTC-USD",
325+
"price": "2596.74",
326+
"remaining_size": "0.00000000",
327+
"sequence": sequence + 2,
328+
"time": "2017-06-25T11:23:14.775000Z"
329+
},
330+
{
331+
"type": "open",
332+
"side": "sell",
333+
"price": "2602.22000000",
334+
"order_id": "26c22ff5-01b1-4ca3-859c-6349d6eb06b4",
335+
"remaining_size": "0.10000000",
336+
"product_id": "BTC-USD",
337+
"sequence": sequence + 3,
338+
"time": "2017-06-25T11:23:14.792000Z"
339+
},
340+
{
341+
"type": "done",
342+
"side": "sell",
343+
"order_id": "94b38e12-cc81-46b4-ad86-cbf435ce03a2",
344+
"reason": "canceled",
345+
"product_id": "BTC-USD",
346+
# no price specified
347+
"remaining_size": "0.20000000",
348+
"sequence": sequence + 4,
349+
"time": "2017-06-25T11:23:14.937000Z"
350+
}
351+
]
352+
mock_connect.return_value.aenter.receive_str.side_effect = [
353+
json.dumps(message_expected)
354+
for message_expected in messages_expected
355+
]
356+
product_id = 'BTC-USD'
357+
book = {'bids': [], 'asks': [], 'sequence': 1}
358+
mock_book.return_value = test_book
359+
async with gdax.orderbook.OrderBook(product_id) as orderbook:
360+
current_book = orderbook.get_current_book(product_id)
361+
message = await orderbook.handle_message()
362+
assert message == messages_expected[0]
363+
assert orderbook.get_current_book(product_id) == current_book
364+
365+
message = await orderbook.handle_message()
366+
assert message == messages_expected[1]
367+
current_book['sequence'] += 1
368+
assert orderbook.get_current_book(product_id) == current_book
369+
370+
price = Decimal('2596.74')
371+
price2 = Decimal('2596.77')
372+
assert orderbook.get_asks(product_id, price) == \
373+
asks1_internal[price]
374+
assert orderbook.get_ask(product_id) == price
375+
376+
message = await orderbook.handle_message()
377+
assert message == messages_expected[2]
378+
assert orderbook.get_asks(product_id, price) is None
379+
assert orderbook.get_ask(product_id) == price2
380+
current_book['sequence'] += 1
381+
assert orderbook.get_current_book(product_id) != current_book
382+
383+
message = await orderbook.handle_message()
384+
assert message == messages_expected[3]
385+
# TODO
386+
387+
message = await orderbook.handle_message()
388+
assert message == messages_expected[4]
389+
# TODO

0 commit comments

Comments
 (0)