mirror of
https://github.com/freqtrade/freqtrade.git
synced 2025-12-01 09:33:05 +00:00
explicitly test check_exit_amount
This commit is contained in:
@@ -3,9 +3,11 @@ from copy import deepcopy
|
||||
from unittest.mock import MagicMock
|
||||
|
||||
import pytest
|
||||
from sqlalchemy import select
|
||||
|
||||
from freqtrade.constants import UNLIMITED_STAKE_AMOUNT
|
||||
from freqtrade.exceptions import DependencyException
|
||||
from freqtrade.persistence import Trade
|
||||
from tests.conftest import EXMS, create_mock_trades, get_patched_freqtradebot, patch_wallet
|
||||
|
||||
|
||||
@@ -364,3 +366,48 @@ def test_sync_wallet_futures_dry(mocker, default_conf, fee):
|
||||
free = freqtrade.wallets.get_free('BTC')
|
||||
used = freqtrade.wallets.get_used('BTC')
|
||||
assert free + used == total
|
||||
|
||||
|
||||
def test_check_exit_amount(mocker, default_conf, fee):
|
||||
freqtrade = get_patched_freqtradebot(mocker, default_conf)
|
||||
update_mock = mocker.patch("freqtrade.wallets.Wallets.update")
|
||||
total_mock = mocker.patch("freqtrade.wallets.Wallets.get_total", return_value=123)
|
||||
|
||||
create_mock_trades(fee, is_short=None)
|
||||
trade = Trade.session.scalars(select(Trade)).first()
|
||||
assert trade.amount == 123
|
||||
|
||||
assert freqtrade.wallets.check_exit_amount(trade) is True
|
||||
assert update_mock.call_count == 0
|
||||
assert total_mock.call_count == 1
|
||||
|
||||
update_mock.reset_mock()
|
||||
# Reduce returned amount to below the trade amount - which should
|
||||
# trigger a wallet update and return False, triggering "order refinding"
|
||||
total_mock = mocker.patch("freqtrade.wallets.Wallets.get_total", return_value=100)
|
||||
assert freqtrade.wallets.check_exit_amount(trade) is False
|
||||
assert update_mock.call_count == 1
|
||||
assert total_mock.call_count == 2
|
||||
|
||||
|
||||
def test_check_exit_amount_futures(mocker, default_conf, fee):
|
||||
default_conf['trading_mode'] = 'futures'
|
||||
default_conf['margin_mode'] = 'isolated'
|
||||
freqtrade = get_patched_freqtradebot(mocker, default_conf)
|
||||
total_mock = mocker.patch("freqtrade.wallets.Wallets.get_total", return_value=123)
|
||||
|
||||
create_mock_trades(fee, is_short=None)
|
||||
trade = Trade.session.scalars(select(Trade)).first()
|
||||
trade.trading_mode = 'futures'
|
||||
assert trade.amount == 123
|
||||
|
||||
assert freqtrade.wallets.check_exit_amount(trade) is True
|
||||
assert total_mock.call_count == 0
|
||||
|
||||
update_mock = mocker.patch("freqtrade.wallets.Wallets.update")
|
||||
trade.amount = 150
|
||||
# Reduce returned amount to below the trade amount - which should
|
||||
# trigger a wallet update and return False, triggering "order refinding"
|
||||
assert freqtrade.wallets.check_exit_amount(trade) is False
|
||||
assert total_mock.call_count == 0
|
||||
assert update_mock.call_count == 1
|
||||
|
||||
Reference in New Issue
Block a user