def test_check_handle_timedout_sell(default_conf, ticker, limit_sell_order_old, mocker) -> None: """ Test check_handle_timedout() method """ rpc_mock = patch_RPCManager(mocker) patch_coinmarketcap(mocker) cancel_order_mock = MagicMock() mocker.patch.multiple( 'freqtrade.freqtradebot.exchange', validate_pairs=MagicMock(), get_ticker=ticker, get_order=MagicMock(return_value=limit_sell_order_old), cancel_order=cancel_order_mock) freqtrade = FreqtradeBot(default_conf, create_engine('sqlite://')) trade_sell = Trade(pair='BTC_ETH', open_rate=0.00001099, exchange='BITTREX', open_order_id='123456789', amount=90.99181073, fee=0.0, stake_amount=1, open_date=arrow.utcnow().shift(hours=-5).datetime, close_date=arrow.utcnow().shift(minutes=-601).datetime, is_open=False) Trade.session.add(trade_sell) # check it does cancel sell orders over the time limit freqtrade.check_handle_timedout(600) assert cancel_order_mock.call_count == 1 assert rpc_mock.call_count == 1 assert trade_sell.is_open is True
def test_check_handle_timedout_exception(default_conf, ticker, mocker, caplog) -> None: """ Test check_handle_timedout() method when get_order throw an exception """ patch_RPCManager(mocker) cancel_order_mock = MagicMock() patch_coinmarketcap(mocker) mocker.patch.multiple( 'freqtrade.freqtradebot.FreqtradeBot', handle_timedout_limit_buy=MagicMock(), handle_timedout_limit_sell=MagicMock(), ) mocker.patch.multiple( 'freqtrade.freqtradebot.exchange', validate_pairs=MagicMock(), get_ticker=ticker, get_order=MagicMock( side_effect=requests.exceptions.RequestException('Oh snap')), cancel_order=cancel_order_mock) freqtrade = FreqtradeBot(default_conf, create_engine('sqlite://')) trade_buy = Trade(pair='BTC_ETH', open_rate=0.00001099, exchange='BITTREX', open_order_id='123456789', amount=90.99181073, fee=0.0, stake_amount=1, open_date=arrow.utcnow().shift(minutes=-601).datetime, is_open=True) Trade.session.add(trade_buy) regexp = re.compile( 'Cannot query order for Trade(id=1, pair=BTC_ETH, amount=90.99181073, ' 'open_rate=0.00001099, open_since=10 hours ago) due to Traceback (most ' 'recent call last):\n.*') freqtrade.check_handle_timedout(600) assert filter(regexp.match, caplog.record_tuples)
def test_check_handle_timedout_partial(default_conf, ticker, limit_buy_order_old_partial, mocker) -> None: """ Test check_handle_timedout() method """ rpc_mock = patch_RPCManager(mocker) patch_coinmarketcap(mocker) cancel_order_mock = MagicMock() mocker.patch.multiple( 'freqtrade.freqtradebot.exchange', validate_pairs=MagicMock(), get_ticker=ticker, get_order=MagicMock(return_value=limit_buy_order_old_partial), cancel_order=cancel_order_mock) freqtrade = FreqtradeBot(default_conf, create_engine('sqlite://')) trade_buy = Trade(pair='BTC_ETH', open_rate=0.00001099, exchange='BITTREX', open_order_id='123456789', amount=90.99181073, fee=0.0, stake_amount=1, open_date=arrow.utcnow().shift(minutes=-601).datetime, is_open=True) Trade.session.add(trade_buy) # check it does cancel buy orders over the time limit # note this is for a partially-complete buy order freqtrade.check_handle_timedout(600) assert cancel_order_mock.call_count == 1 assert rpc_mock.call_count == 1 trades = Trade.query.filter( Trade.open_order_id.is_(trade_buy.open_order_id)).all() assert len(trades) == 1 assert trades[0].amount == 23.0 assert trades[0].stake_amount == trade_buy.open_rate * trades[0].amount