def test_start_timer_should_start_Timer(self, mock_timer): trader = UpbitTrader() trader.worker = MagicMock() trader._start_timer() mock_timer.assert_called_once_with(trader.RESULT_CHECKING_INTERVAL, ANY) callback = mock_timer.call_args[0][1] callback() trader.worker.post_task.assert_called_once_with( {"runnable": trader._update_order_result})
def test__execute_order_handle_task_correctly(self): dummy_task = { "request": { "id": "apple", "price": 500, "amount": 0.0001, "type": "buy" }, "callback": MagicMock(), } trader = UpbitTrader() trader._send_order = MagicMock(return_value={"uuid": "mango"}) trader._create_success_result = MagicMock(return_value="banana") trader._start_timer = MagicMock() trader._execute_order(dummy_task) trader._send_order.assert_called_once_with(trader.market, True, 500, 0.0001) trader._create_success_result.assert_called_once_with( dummy_task["request"]) trader._start_timer.assert_called_once() self.assertEqual(trader.order_map["apple"]["uuid"], "mango") self.assertEqual(trader.order_map["apple"]["callback"], dummy_task["callback"]) self.assertEqual(trader.order_map["apple"]["result"], "banana") dummy_task["callback"].assert_called_once()
def test__execute_order_call_cancel_request_when_request_type_is_cancel( self): dummy_task = { "request": { "id": "apple", "price": 500, "amount": 0.0001, "type": "cancel" }, "callback": "kiwi", } trader = UpbitTrader() trader.cancel_request = MagicMock() trader._send_order = MagicMock() trader._create_success_result = MagicMock() trader._start_timer = MagicMock() trader._execute_order(dummy_task) trader._send_order.assert_not_called() trader._create_success_result.assert_not_called() trader._start_timer.assert_not_called() trader.cancel_request.assert_called_once_with("apple")
def test__execute_order_should_call_callback_with_error_at_balance_lack( self): dummy_task = { "request": { "id": "apple", "price": 50000, "amount": 0.01, "type": "buy" }, "callback": MagicMock(), } trader = UpbitTrader() trader._send_order = MagicMock() trader._create_success_result = MagicMock() trader._start_timer = MagicMock() trader.balance = 450 trader._execute_order(dummy_task) dummy_task["callback"].assert_called_once_with("error!") trader._send_order.assert_not_called() trader._create_success_result.assert_not_called() trader._start_timer.assert_not_called() self.assertEqual(len(trader.order_map), 0)
def test__execute_order_should_call_callback_with_error_when__send_order_return_None( self): dummy_task = { "request": { "id": "apple", "price": 500, "amount": 0.0001, "type": "buy" }, "callback": MagicMock(), } trader = UpbitTrader() trader._send_order = MagicMock(return_value=None) trader._create_success_result = MagicMock(return_value="banana") trader._start_timer = MagicMock() trader._execute_order(dummy_task) dummy_task["callback"].assert_called_once_with("error!") trader._send_order.assert_called_once_with(trader.market, True, 500, 0.0001) trader._create_success_result.assert_not_called() trader._start_timer.assert_not_called() self.assertEqual(len(trader.order_map), 0)
def test__update_order_result_should_NOT_start_timer_when_no_request_remains( self): dummy_result = [ { "uuid": "mango", "state": "done", "type": "buy", "created_at": "today", "price": 5000, "executed_volume": 0.00001, }, { "uuid": "orange", "type": "sell", "state": "cancel", "created_at": "yesterday", "price": 2000, "executed_volume": 0.1234, }, ] dummy_request_mango = { "uuid": "mango", "request": { "id": "mango_id" }, "callback": MagicMock(), "result": { "id": "mango_result", "state": "done", "type": "buy" }, } dummy_request_orange = { "uuid": "orange", "request": { "id": "orange_id" }, "callback": MagicMock(), "result": { "id": "orange_result", "state": "done", "type": "sell" }, } trader = UpbitTrader() trader._call_callback = MagicMock() trader._query_order_list = MagicMock(return_value=dummy_result) trader._stop_timer = MagicMock() trader._start_timer = MagicMock() trader.order_map["mango"] = dummy_request_mango trader.order_map["orange"] = dummy_request_orange trader._update_order_result(None) mango_result = trader._call_callback.call_args_list[0][0][1] self.assertEqual(mango_result["date_time"], "today") self.assertEqual(mango_result["id"], "mango_result") self.assertEqual(mango_result["price"], 5000) self.assertEqual(mango_result["type"], "buy") self.assertEqual(mango_result["state"], "done") self.assertEqual(mango_result["amount"], 0.00001) self.assertEqual(trader._call_callback.call_args_list[0][0][0], dummy_request_mango["callback"]) orange_result = trader._call_callback.call_args_list[1][0][1] self.assertEqual(orange_result["date_time"], "yesterday") self.assertEqual(orange_result["id"], "orange_result") self.assertEqual(orange_result["price"], 2000) self.assertEqual(orange_result["type"], "sell") self.assertEqual(orange_result["state"], "done") self.assertEqual(orange_result["amount"], 0.1234) self.assertEqual(trader._call_callback.call_args_list[1][0][0], dummy_request_orange["callback"]) self.assertEqual(len(trader.order_map), 0) trader._stop_timer.assert_called_once() trader._start_timer.assert_not_called() trader._query_order_list.assert_called_once_with(["mango", "orange"])
def test__update_order_result_should_call__call_callback_and_keep_waiting_request( self): dummy_result = [ { "uuid": "mango", "state": "done", "created_at": "today", "price": 500, "executed_volume": 0.007, }, { "uuid": "apple", "state": "cancel", "created_at": "yesterday", "price": 1500, "executed_volume": 0.54321, }, ] dummy_request_mango = { "uuid": "mango", "request": { "id": "mango_id" }, "callback": MagicMock(), "result": { "id": "mango_result", "state": "done", "type": "buy" }, } dummy_request_banana = { "uuid": "banana", "request": { "id": "banana_id" }, "callback": MagicMock(), "result": { "id": "banana_result", "state": "done", "type": "sell" }, } dummy_request_apple = { "uuid": "apple", "request": { "id": "apple_id" }, "callback": MagicMock(), "result": { "id": "apple_result", "state": "done", "type": "buy" }, } trader = UpbitTrader() trader._call_callback = MagicMock() trader._query_order_list = MagicMock(return_value=dummy_result) trader._stop_timer = MagicMock() trader._start_timer = MagicMock() trader.order_map["mango"] = dummy_request_mango trader.order_map["banana"] = dummy_request_banana trader.order_map["apple"] = dummy_request_apple trader._update_order_result(None) mango_result = trader._call_callback.call_args_list[0][0][1] self.assertEqual(mango_result["date_time"], "today") self.assertEqual(mango_result["id"], "mango_result") self.assertEqual(mango_result["price"], 500) self.assertEqual(mango_result["type"], "buy") self.assertEqual(mango_result["state"], "done") self.assertEqual(mango_result["amount"], 0.007) self.assertEqual(trader._call_callback.call_args_list[0][0][0], dummy_request_mango["callback"]) apple_result = trader._call_callback.call_args_list[1][0][1] self.assertEqual(apple_result["date_time"], "yesterday") self.assertEqual(apple_result["id"], "apple_result") self.assertEqual(apple_result["price"], 1500) self.assertEqual(mango_result["type"], "buy") self.assertEqual(mango_result["state"], "done") self.assertEqual(apple_result["amount"], 0.54321) self.assertEqual(trader._call_callback.call_args_list[1][0][0], dummy_request_apple["callback"]) self.assertEqual(len(trader.order_map), 1) self.assertEqual(trader.order_map["banana"]["request"]["id"], "banana_id") trader._stop_timer.assert_called_once() trader._start_timer.assert_called_once() trader._query_order_list.assert_called_once_with( ["mango", "banana", "apple"])