Skip to content

Commit

Permalink
Merge pull request #176 from lunswor/simulate-update-and-replace
Browse files Browse the repository at this point in the history
Simulate update and replace
  • Loading branch information
liampauling committed May 29, 2020
2 parents 7cbf440 + 622cf1a commit efe7f64
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 42 deletions.
2 changes: 1 addition & 1 deletion flumine/execution/simulatedexecution.py
Expand Up @@ -107,7 +107,7 @@ def execute_replace(
order_package.package_type,
)
# add to blotter
market = self.markets.markets[order.market_id]
market = order_package.market
market.place_order(replacement_order, execute=False)
replacement_order.executable()
elif place_instruction_report.status == "FAILURE":
Expand Down
82 changes: 52 additions & 30 deletions tests/test_execution.py
@@ -1,11 +1,12 @@
import unittest
from unittest import mock
from unittest.mock import call

from flumine.clients.clients import ExchangeType
from flumine.exceptions import OrderExecutionError
from flumine.execution.baseexecution import BaseExecution, OrderPackageType
from flumine.execution.betfairexecution import BetfairExecution
from flumine.execution.simulatedexecution import SimulatedExecution
from flumine.clients.clients import ExchangeType
from flumine.exceptions import OrderExecutionError


class BaseExecutionTest(unittest.TestCase):
Expand Down Expand Up @@ -705,55 +706,76 @@ def test_execute_update_failure(self, mock__order_logger):

@mock.patch("flumine.execution.simulatedexecution.SimulatedExecution._order_logger")
def test_execute_replace(self, mock__order_logger):
mock_market = mock.Mock()
self.mock_flumine.markets.markets = {"1.234": mock_market}

mock_order = mock.Mock()
mock_order.market_id = "1.234"
mock_order_package = mock.Mock()
mock_order_package.__iter__ = mock.Mock(return_value=iter([mock_order]))
mock_order_package.replace_instructions = [2.03]
mock_order_package.info = {}

mock_order_package.replace_instructions = [{"newPrice": 2.03}]
mock_replacement_order = mock.Mock()
mock_replacement_order_package = mock.Mock()
mock_replacement_order_package.__iter__ = mock.Mock(
return_value=iter([mock_replacement_order])
return_value=iter([mock_order])
)
mock_replacement_order_package.info = {}

mock_sim_resp = mock.Mock()
mock_sim_resp.status = "SUCCESS"
mock_sim_resp.cancel_instruction_report = mock.Mock()
mock_sim_resp.cancel_instruction_report.status = "SUCCESS"
mock_sim_resp.place_instruction_report = mock.Mock()
mock_sim_resp.place_instruction_report.status = "SUCCESS"
mock_order.simulated.replace.return_value = mock_sim_resp
mock_order.simulated.cancel.return_value = mock_sim_resp
mock_replacement_order.simulated.place.return_value = mock_sim_resp
mock_order.trade.create_order_replacement.return_value = mock_replacement_order

self.execution.execute_replace(mock_order_package, None)
mock_order.simulated.replace.assert_called_with(2.03)
# mock__order_logger.assert_called_with(
# mock_order, mock_sim_resp.cancel_instruction_report, mock_order_package.package_type
# )
# mock__order_logger.assert_called_with(
# mock_replacement_order, mock_sim_resp.place_instruction_report, mock_order_package.package_type
# )
mock_order.simulated.cancel.assert_called_with()
mock_replacement_order.simulated.place.assert_called_with(
mock_order_package.market.market_book,
{"newPrice": 2.03},
self.execution._bet_id,
)
mock__order_logger.assert_has_calls(
[
call(mock_order, mock_sim_resp, OrderPackageType.CANCEL),
call(
mock_replacement_order,
mock_sim_resp,
mock_order_package.package_type,
),
]
)
mock_order.execution_complete.assert_called_with()
mock_replacement_order.executable.assert_called_with()

@mock.patch("flumine.execution.simulatedexecution.SimulatedExecution._order_logger")
def test_execute_replace_failure(self, mock__order_logger):
mock_order = mock.Mock()
mock_order_package = mock.Mock()
mock_order_package.__iter__ = mock.Mock(return_value=iter([mock_order]))
mock_order_package.replace_instructions = [2.04]
mock_order_package.info = {}
mock_order_package.replace_instructions = [{"newPrice": 2.54}]

mock_replacement_order = mock.Mock()
mock_replacement_order_package = mock.Mock()
mock_replacement_order_package.__iter__ = mock.Mock(
return_value=iter([mock_order])
)

mock_sim_resp = mock.Mock()
mock_sim_resp.status = "FAILURE"
mock_sim_resp.cancel_instruction_report = mock.Mock()
mock_sim_resp.cancel_instruction_report.status = "FAILURE"
mock_sim_resp.place_instruction_report = mock.Mock()
mock_sim_resp.place_instruction_report.status = "FAILURE"
mock_order.simulated.cancel.return_value = mock_sim_resp
mock_replacement_order.simulated.place.return_value = mock_sim_resp
mock_order.trade.create_order_replacement.return_value = mock_replacement_order

mock_order.simulated.replace.return_value = mock_sim_resp
self.execution.execute_replace(mock_order_package, None)
mock_order.simulated.replace.assert_called_with(2.04)
# mock__order_logger.assert_called_with(
# mock_order, mock_sim_resp.cancel_instruction_report, mock_order_package.package_type
# )
mock_order.simulated.cancel.assert_called_with()
mock_replacement_order.simulated.place.assert_called_with(
mock_order_package.market.market_book,
{"newPrice": 2.54},
self.execution._bet_id,
)

mock__order_logger.assert_called_with(
mock_order, mock_sim_resp, OrderPackageType.CANCEL
)

mock_order.executable.assert_called_with()
mock_replacement_order.executable.assert_not_called()
11 changes: 0 additions & 11 deletions tests/test_simulated.py
Expand Up @@ -168,17 +168,6 @@ def test_update_else(self):
self.assertEqual(resp.status, "FAILURE")
self.assertEqual(resp.error_code, "BET_ACTION_ERROR")

def test_replace(self):
resp = self.simulated.replace({"newPrice": 1.50})
self.assertEqual(resp.status, "SUCCESS")
self.assertEqual(self.mock_order_type.price, 1.50)

def test_replace_else(self):
self.simulated.order.order_type.ORDER_TYPE = OrderTypes.MARKET_ON_CLOSE
resp = self.simulated.replace({"newPrice": 2.03})
self.assertEqual(resp.status, "FAILURE")
self.assertEqual(resp.error_code, "BET_ACTION_ERROR")

def test__get_runner(self):
mock_market_book = mock.Mock()
mock_runner = mock.Mock(selection_id=1234, handicap=1)
Expand Down

0 comments on commit efe7f64

Please sign in to comment.