예제 #1
0
def test_submit(mock_order_class, mock_exchange_class):

    exchange = mock_exchange_class.return_value
    broker = Broker()
    broker.exchanges = [exchange]

    order = mock_order_class.return_value

    assert broker.unexecuted == []
    broker.submit(order)
    assert order in broker.unexecuted
예제 #2
0
def test_cancel_executed_order(mock_order_class, mock_exchange_class):

    exchange = mock_exchange_class.return_value
    exchange.options.max_trade_size = 1e6
    broker = Broker()
    broker.exchanges = [exchange]

    order = mock_order_class.return_value
    order.cancel = mock.Mock(return_value=None)

    broker.submit(order)
    assert order in broker.unexecuted

    order.status = OrderStatus.CANCELLED
    with pytest.raises(Warning):
        broker.cancel(order)
예제 #3
0
def test_cancel_unexecuted_order(mock_order_class, mock_exchange_class):

    exchange = mock_exchange_class.return_value
    broker = Broker()
    broker.exchanges = [exchange]

    order = mock_order_class.return_value
    order.cancel = mock.Mock(return_value=None)
    order.status = OrderStatus.PENDING

    broker.submit(order)
    assert order in broker.unexecuted

    broker.cancel(order)
    assert order not in broker.unexecuted
    order.cancel.assert_called_once_with()
예제 #4
0
def test_update_on_single_exchange_with_single_order(mock_order_class,
                                                     mock_exchange_class):

    exchange = mock_exchange_class.return_value
    broker = Broker()
    broker.exchanges = [exchange]

    order = mock_order_class.return_value
    order.id = "fake_id"
    order.start = 0
    order.end = None
    order.is_executable_on = mock.Mock(side_effect=[False, True])
    order.attach = mock.Mock(return_value=None)

    broker.submit(order)

    # Test order does execute
    broker.update()
    assert order not in broker.unexecuted
    assert order.id in broker.executed
    order.attach.assert_called_once_with(broker)