def test__call_callback_NOT_update_when_type_is_not_done(self): trader = UpbitTrader() trader.balance = 550000 trader.asset = (67000000, 1.000001) dummy_result = { "request": { "id": "mango_request_5678", "type": "buy", "price": "888000", "amount": "0.0001234", }, "type": "sell", "price": "62000000", "amount": "0.0012345", "msg": "success", "state": "requested", } dummy_callback = MagicMock() trader._call_callback(dummy_callback, dummy_result) self.assertEqual(trader.balance, 550000) self.assertEqual(trader.asset, (67000000, 1.000001)) dummy_callback.assert_called_once_with(dummy_result)
def test__call_callback_update_balance_correctly_when_sell(self): trader = UpbitTrader() trader.balance = 550000 trader.asset = (67000000, 1.000001) dummy_result = { "request": { "id": "mango_request_5678", "type": "buy", "price": "888000", "amount": "0.0001234", }, "type": "sell", "price": "62000000", "amount": "0.0012345", "msg": "success", "state": "done", } dummy_callback = MagicMock() trader._call_callback(dummy_callback, dummy_result) self.assertEqual(trader.balance, 626501) self.assertEqual(trader.asset, (67000000, 0.998766)) dummy_callback.assert_called_once_with(dummy_result)
def test_cancel_request_should_call__call_callback_when_cancel_order_return_None( self): trader = UpbitTrader() trader._call_callback = MagicMock() dummy_request = { "uuid": "mango_uuid", "callback": MagicMock(), "result": { "request": { "id": "mango_request_1234", "type": "buy", "price": "888000", "amount": "0.0001234", }, "type": "buy", "price": 888000.0, "amount": 0.0001234, "msg": "success", }, } trader.order_map["mango_request_1234"] = dummy_request dummy_response = MagicMock() dummy_response.json.side_effect = ValueError() expected_query_string_delete = "uuid=mango_uuid".encode() expected_result = { "request": { "id": "mango_request_1234", "type": "buy", "price": "888000", "amount": "0.0001234", }, "type": "buy", "price": 887000.0, "amount": 0.0000034, "msg": "success", "date_time": "2018-04-10T15:42:23", "state": "done", } self.delete_mock.return_value = dummy_response expected_query_string_get = "states[]=done&states[]=cancel&uuids[]=mango_uuid".encode( ) dummy_response_get = MagicMock() dummy_response_get.json.return_value = [{ "created_at": "2018-04-10T15:42:23+09:00", "type": "buy", "price": "887000", "executed_volume": "0.0000034", "msg": "success", }] self.get_mock.return_value = dummy_response_get trader._create_jwt_token = MagicMock(return_value="mango_token") trader.cancel_request("mango_request_1234") dummy_response.raise_for_status.assert_called_once() dummy_response.json.assert_called_once() self.assertEqual(trader._create_jwt_token.call_args_list[0][0][0], trader.ACCESS_KEY) self.assertEqual(trader._create_jwt_token.call_args_list[0][0][1], trader.SECRET_KEY) self.assertEqual(trader._create_jwt_token.call_args_list[0][0][2], expected_query_string_delete) self.delete_mock.assert_called_once_with( trader.SERVER_URL + "/v1/order", params=expected_query_string_delete, headers={"Authorization": "Bearer mango_token"}, ) dummy_response_get.raise_for_status.assert_called_once() dummy_response_get.json.assert_called_once() self.assertEqual(trader._create_jwt_token.call_args_list[1][0][0], trader.ACCESS_KEY) self.assertEqual(trader._create_jwt_token.call_args_list[1][0][1], trader.SECRET_KEY) self.assertEqual(trader._create_jwt_token.call_args_list[1][0][2], expected_query_string_get) self.get_mock.assert_called_once_with( trader.SERVER_URL + "/v1/orders", params=expected_query_string_get, headers={"Authorization": "Bearer mango_token"}, ) trader._call_callback.assert_called_once_with( dummy_request["callback"], expected_result) self.assertFalse("mango_request_1234" in trader.order_map)
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"])