|
3 | 3 | import base64 |
4 | 4 | from decimal import Decimal |
5 | 5 |
|
6 | | -import asyncio |
7 | 6 | import aiohttp |
8 | 7 | import pytest |
9 | | -from asynctest import MagicMock, patch, CoroutineMock, call |
| 8 | +from asynctest import patch, CoroutineMock, call |
10 | 9 |
|
11 | 10 | import gdax |
12 | 11 | import gdax.orderbook |
@@ -293,7 +292,7 @@ async def test_logfile(self, mock_book, mock_connect): |
293 | 292 |
|
294 | 293 | mock_write.assert_has_calls(calls) |
295 | 294 |
|
296 | | - message = await orderbook.handle_message() |
| 295 | + await orderbook.handle_message() |
297 | 296 | calls.append(call(f'W {json.dumps(message_expected)}\n')) |
298 | 297 | mock_write.assert_has_calls(calls) |
299 | 298 |
|
@@ -381,7 +380,6 @@ async def test_orderbook_advanced(self, mock_book, mock_connect): |
381 | 380 | json.dumps(message_expected) |
382 | 381 | for message_expected in messages_expected |
383 | 382 | ] |
384 | | - book = {'bids': [], 'asks': [], 'sequence': 1} |
385 | 383 | mock_book.return_value = test_book |
386 | 384 | async with gdax.orderbook.OrderBook(product_id) as orderbook: |
387 | 385 | # ignore because of sequence number |
@@ -479,10 +477,10 @@ async def test_error_message(self, mock_book, mock_connect): |
479 | 477 | ] |
480 | 478 | async with gdax.orderbook.OrderBook() as orderbook: |
481 | 479 | with pytest.raises(gdax.orderbook.OrderBookError): |
482 | | - message = await orderbook.handle_message() |
| 480 | + await orderbook.handle_message() |
483 | 481 |
|
484 | 482 | with pytest.raises(gdax.orderbook.OrderBookError): |
485 | | - message = await orderbook.handle_message() |
| 483 | + await orderbook.handle_message() |
486 | 484 |
|
487 | 485 | @patch('gdax.trader.Trader.get_product_order_book') |
488 | 486 | async def test_disconnect(self, mock_book, mock_connect): |
@@ -581,3 +579,68 @@ async def test_out_of_order(self, mock_book, mock_connect): |
581 | 579 |
|
582 | 580 | message = await orderbook.handle_message() |
583 | 581 | 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