4
4
from decimal import Decimal
5
5
6
6
import asyncio
7
+ import aiohttp
7
8
import pytest
8
9
from asynctest import MagicMock , patch , CoroutineMock , call
9
10
@@ -457,7 +458,7 @@ async def test_orderbook_advanced(self, mock_book, mock_connect):
457
458
# TODO
458
459
459
460
@patch ('gdax.trader.Trader.get_product_order_book' )
460
- async def test_error (self , mock_book , mock_connect ):
461
+ async def test_error_message (self , mock_book , mock_connect ):
461
462
mock_connect .return_value .aenter .receive_str = CoroutineMock ()
462
463
mock_connect .return_value .aenter .send_json = CoroutineMock ()
463
464
mock_book .return_value = {'bids' : [], 'asks' : [], 'sequence' : 1 }
@@ -482,3 +483,101 @@ async def test_error(self, mock_book, mock_connect):
482
483
483
484
with pytest .raises (gdax .orderbook .OrderBookError ):
484
485
message = await orderbook .handle_message ()
486
+
487
+ @patch ('gdax.trader.Trader.get_product_order_book' )
488
+ async def test_disconnect (self , mock_book , mock_connect ):
489
+ mock_connect .return_value .aenter .receive_str = CoroutineMock ()
490
+ mock_connect .return_value .aenter .send_json = CoroutineMock ()
491
+ mock_book .return_value = {'bids' : [], 'asks' : [], 'sequence' : 1 }
492
+
493
+ messages_expected = [
494
+ json .dumps ({
495
+ "type" : "done" ,
496
+ "side" : "sell" ,
497
+ "order_id" : "4eef1226-4b38-422c-a5b1-56def7107f9a" ,
498
+ "reason" : "canceled" ,
499
+ "product_id" : "ETH-USD" ,
500
+ "price" : "2601.76000000" ,
501
+ "remaining_size" : "3.09000000" ,
502
+ "sequence" : 2 ,
503
+ "time" : "2017-06-25T11:23:14.775000Z"
504
+ }),
505
+ aiohttp .ServerDisconnectedError ('error' ),
506
+ json .dumps ({
507
+ "type" : "done" ,
508
+ "side" : "sell" ,
509
+ "order_id" : "4eef1226-4b38-422c-a5b1-56def7107f9a" ,
510
+ "reason" : "canceled" ,
511
+ "product_id" : "ETH-USD" ,
512
+ "price" : "2601.76000000" ,
513
+ "remaining_size" : "3.09000000" ,
514
+ "sequence" : 2 ,
515
+ "time" : "2017-06-25T11:23:14.775000Z"
516
+ })
517
+ ]
518
+ mock_connect .return_value .aenter .receive_str .side_effect = \
519
+ messages_expected
520
+ async with gdax .orderbook .OrderBook () as orderbook :
521
+ message = await orderbook .handle_message ()
522
+ assert message == json .loads (messages_expected [0 ])
523
+
524
+ message = await orderbook .handle_message ()
525
+ assert message is None
526
+
527
+ message = await orderbook .handle_message ()
528
+ assert message == json .loads (messages_expected [2 ])
529
+
530
+ @patch ('gdax.trader.Trader.get_product_order_book' )
531
+ async def test_out_of_order (self , mock_book , mock_connect ):
532
+ mock_connect .return_value .aenter .receive_str = CoroutineMock ()
533
+ mock_connect .return_value .aenter .send_json = CoroutineMock ()
534
+ mock_book .return_value = {'bids' : [], 'asks' : [], 'sequence' : 1 }
535
+
536
+ messages_expected = [
537
+ {
538
+ "type" : "done" ,
539
+ "side" : "sell" ,
540
+ "order_id" : "4eef1226-4b38-422c-a5b1-56def7107f9a" ,
541
+ "reason" : "canceled" ,
542
+ "product_id" : "ETH-USD" ,
543
+ "price" : "2601.76000000" ,
544
+ "remaining_size" : "3.09000000" ,
545
+ "sequence" : 2 ,
546
+ "time" : "2017-06-25T11:23:14.775000Z"
547
+ },
548
+ {
549
+ "type" : "done" ,
550
+ "side" : "sell" ,
551
+ "order_id" : "4eef1226-4b38-422c-a5b1-56def7107f9a" ,
552
+ "reason" : "canceled" ,
553
+ "product_id" : "ETH-USD" ,
554
+ "price" : "2601.76000000" ,
555
+ "remaining_size" : "3.09000000" ,
556
+ "sequence" : 4 ,
557
+ "time" : "2017-06-25T11:23:14.775000Z"
558
+ },
559
+ {
560
+ "type" : "done" ,
561
+ "side" : "sell" ,
562
+ "order_id" : "4eef1226-4b38-422c-a5b1-56def7107f9a" ,
563
+ "reason" : "canceled" ,
564
+ "product_id" : "ETH-USD" ,
565
+ "price" : "2601.76000000" ,
566
+ "remaining_size" : "3.09000000" ,
567
+ "sequence" : 2 ,
568
+ "time" : "2017-06-25T11:23:14.775000Z"
569
+ },
570
+ ]
571
+ mock_connect .return_value .aenter .receive_str .side_effect = [
572
+ json .dumps (message_expected )
573
+ for message_expected in messages_expected
574
+ ]
575
+ async with gdax .orderbook .OrderBook () as orderbook :
576
+ message = await orderbook .handle_message ()
577
+ assert message == messages_expected [0 ]
578
+
579
+ message = await orderbook .handle_message ()
580
+ assert message is None
581
+
582
+ message = await orderbook .handle_message ()
583
+ assert message == messages_expected [2 ]
0 commit comments