Skip to content

Commit 3d06787

Browse files
committed
tests for the change orderbook message
1 parent 2cda588 commit 3d06787

File tree

2 files changed

+71
-8
lines changed

2 files changed

+71
-8
lines changed

gdax/orderbook.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -278,15 +278,15 @@ def change(self, product_id, order):
278278

279279
node = tree.get(price)
280280

281+
# TODO: check old_size
281282
if node is None or not any(o['id'] == order['order_id'] for o in node):
282283
return
283284

284285
index = list(map(itemgetter('id'), node)).index(order['order_id'])
285286
if 'new_size' in order:
286287
node[index]['size'] = new_size
287-
if 'new_funds' in order:
288+
if 'new_funds' in order: # pragma: no cover
288289
assert False, 'This should not happen.'
289-
tree.insert(price, node)
290290

291291
def get_current_book(self, product_id):
292292
result = {

tests/test_orderbook.py

Lines changed: 69 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@
33
import base64
44
from decimal import Decimal
55

6-
import asyncio
76
import aiohttp
87
import pytest
9-
from asynctest import MagicMock, patch, CoroutineMock, call
8+
from asynctest import patch, CoroutineMock, call
109

1110
import gdax
1211
import gdax.orderbook
@@ -293,7 +292,7 @@ async def test_logfile(self, mock_book, mock_connect):
293292

294293
mock_write.assert_has_calls(calls)
295294

296-
message = await orderbook.handle_message()
295+
await orderbook.handle_message()
297296
calls.append(call(f'W {json.dumps(message_expected)}\n'))
298297
mock_write.assert_has_calls(calls)
299298

@@ -381,7 +380,6 @@ async def test_orderbook_advanced(self, mock_book, mock_connect):
381380
json.dumps(message_expected)
382381
for message_expected in messages_expected
383382
]
384-
book = {'bids': [], 'asks': [], 'sequence': 1}
385383
mock_book.return_value = test_book
386384
async with gdax.orderbook.OrderBook(product_id) as orderbook:
387385
# ignore because of sequence number
@@ -479,10 +477,10 @@ async def test_error_message(self, mock_book, mock_connect):
479477
]
480478
async with gdax.orderbook.OrderBook() as orderbook:
481479
with pytest.raises(gdax.orderbook.OrderBookError):
482-
message = await orderbook.handle_message()
480+
await orderbook.handle_message()
483481

484482
with pytest.raises(gdax.orderbook.OrderBookError):
485-
message = await orderbook.handle_message()
483+
await orderbook.handle_message()
486484

487485
@patch('gdax.trader.Trader.get_product_order_book')
488486
async def test_disconnect(self, mock_book, mock_connect):
@@ -581,3 +579,68 @@ async def test_out_of_order(self, mock_book, mock_connect):
581579

582580
message = await orderbook.handle_message()
583581
assert message == messages_expected[2]
582+
583+
@patch('gdax.trader.Trader.get_product_order_book')
584+
async def test_orderbook_change(self, mock_book, mock_connect):
585+
product_id = 'BTC-USD'
586+
mock_connect.return_value.aenter.receive_str = CoroutineMock()
587+
mock_connect.return_value.aenter.send_json = CoroutineMock()
588+
messages_expected = [
589+
{
590+
"type": "change",
591+
"time": "2014-11-07T08:19:27.028459Z",
592+
"sequence": sequence + 1,
593+
"order_id": id2,
594+
"product_id": product_id,
595+
"new_size": "101",
596+
"old_size": "100",
597+
"price": "2595.52",
598+
"side": "buy"
599+
},
600+
{
601+
"type": "change",
602+
"time": "2014-11-07T08:19:27.028459Z",
603+
"sequence": sequence + 2,
604+
"order_id": asks1[1][2],
605+
"product_id": product_id,
606+
"new_size": "0.1",
607+
"old_size": "0.07670504",
608+
"price": "2596.77",
609+
"side": "sell"
610+
},
611+
]
612+
mock_connect.return_value.aenter.receive_str.side_effect = [
613+
json.dumps(message_expected)
614+
for message_expected in messages_expected
615+
]
616+
mock_book.return_value = test_book
617+
async with gdax.orderbook.OrderBook(product_id) as orderbook:
618+
# change1
619+
current_book = orderbook.get_current_book(product_id)
620+
price = Decimal("2595.52")
621+
assert orderbook.get_bids(product_id, price) == \
622+
bids1_internal[price]
623+
624+
message = await orderbook.handle_message()
625+
assert message == messages_expected[0]
626+
bids = bids1_internal[price][:]
627+
bids[0]['size'] = Decimal('101')
628+
assert orderbook.get_bids(product_id, price) == \
629+
bids1_internal[price]
630+
current_book['sequence'] += 1
631+
assert orderbook.get_current_book(product_id) != current_book
632+
633+
# change2
634+
current_book = orderbook.get_current_book(product_id)
635+
price2 = Decimal("2596.77")
636+
assert orderbook.get_asks(product_id, price2) == \
637+
asks1_internal[price2]
638+
639+
message = await orderbook.handle_message()
640+
assert message == messages_expected[1]
641+
asks = asks1_internal[price2][:]
642+
asks[0]['size'] = Decimal('0.1')
643+
assert orderbook.get_asks(product_id, price2) == \
644+
asks1_internal[price2]
645+
current_book['sequence'] += 1
646+
assert orderbook.get_current_book(product_id) != current_book

0 commit comments

Comments
 (0)