diff --git a/freqtrade/tests/conftest.py b/freqtrade/tests/conftest.py index 6a4d7cbd4..5efeb1743 100644 --- a/freqtrade/tests/conftest.py +++ b/freqtrade/tests/conftest.py @@ -99,6 +99,11 @@ def update(): return _update +@pytest.fixture +def fee(): + return MagicMock(return_value=0.0025) + + @pytest.fixture def ticker(): return MagicMock(return_value={ diff --git a/freqtrade/tests/optimize/test_backtesting.py b/freqtrade/tests/optimize/test_backtesting.py index 8fd90bca5..ba57ed274 100644 --- a/freqtrade/tests/optimize/test_backtesting.py +++ b/freqtrade/tests/optimize/test_backtesting.py @@ -505,11 +505,8 @@ def test_processed(init_backtesting) -> None: assert col in cols -def test_backtest_pricecontours(init_backtesting, default_conf, mocker) -> None: - mocker.patch( - 'freqtrade.optimize.backtesting.exchange.get_fee', - MagicMock(return_value=0.0025) - ) +def test_backtest_pricecontours(init_backtesting, default_conf, fee, mocker) -> None: + mocker.patch('freqtrade.optimize.backtesting.exchange.get_fee', fee) tests = [['raise', 17], ['lower', 0], ['sine', 17]] for [contour, numres] in tests: simple_backtest(default_conf, contour, numres) @@ -549,23 +546,17 @@ def test_backtest_only_sell(init_backtesting, default_conf): assert results.empty -def test_backtest_alternate_buy_sell(init_backtesting, default_conf, mocker): - mocker.patch( - 'freqtrade.optimize.backtesting.exchange.get_fee', - MagicMock(return_value=0.0025) - ) +def test_backtest_alternate_buy_sell(init_backtesting, default_conf, fee, mocker): + mocker.patch('freqtrade.optimize.backtesting.exchange.get_fee', fee) backtest_conf = _make_backtest_conf(conf=default_conf, pair='UNITTEST/BTC') results = _run_backtest_1(_trend_alternate, backtest_conf) assert len(results) == 3 -def test_backtest_record(init_backtesting, default_conf, mocker): +def test_backtest_record(init_backtesting, default_conf, fee, mocker): names = [] records = [] - mocker.patch( - 'freqtrade.optimize.backtesting.exchange.get_fee', - MagicMock(return_value=0.0025) - ) + mocker.patch('freqtrade.optimize.backtesting.exchange.get_fee', fee) mocker.patch( 'freqtrade.optimize.backtesting.file_dump_json', new=lambda n, r: (names.append(n), records.append(r)) diff --git a/freqtrade/tests/rpc/test_rpc.py b/freqtrade/tests/rpc/test_rpc.py index 842593992..b6722569e 100644 --- a/freqtrade/tests/rpc/test_rpc.py +++ b/freqtrade/tests/rpc/test_rpc.py @@ -25,7 +25,7 @@ def prec_satoshi(a, b) -> float: # Unit tests -def test_rpc_trade_status(default_conf, ticker, mocker) -> None: +def test_rpc_trade_status(default_conf, ticker, fee, mocker) -> None: """ Test rpc_trade_status() method """ @@ -36,7 +36,7 @@ def test_rpc_trade_status(default_conf, ticker, mocker) -> None: 'freqtrade.freqtradebot.exchange', validate_pairs=MagicMock(), get_ticker=ticker, - get_fee=MagicMock(return_value=0.0025) + get_fee=fee ) freqtradebot = FreqtradeBot(default_conf, create_engine('sqlite://')) @@ -74,7 +74,7 @@ def test_rpc_trade_status(default_conf, ticker, mocker) -> None: assert trade.find('[ETH/BTC]') >= 0 -def test_rpc_status_table(default_conf, ticker, mocker) -> None: +def test_rpc_status_table(default_conf, ticker, fee, mocker) -> None: """ Test rpc_status_table() method """ @@ -85,7 +85,7 @@ def test_rpc_status_table(default_conf, ticker, mocker) -> None: 'freqtrade.freqtradebot.exchange', validate_pairs=MagicMock(), get_ticker=ticker, - get_fee=MagicMock(return_value=0.0025) + get_fee=fee ) freqtradebot = FreqtradeBot(default_conf, create_engine('sqlite://')) @@ -108,8 +108,8 @@ def test_rpc_status_table(default_conf, ticker, mocker) -> None: assert '-0.59%' in result['Profit'].all() -def test_rpc_daily_profit(default_conf, update, ticker, limit_buy_order, limit_sell_order, mocker)\ - -> None: +def test_rpc_daily_profit(default_conf, update, ticker, fee, + limit_buy_order, limit_sell_order, mocker) -> None: """ Test rpc_daily_profit() method """ @@ -120,7 +120,7 @@ def test_rpc_daily_profit(default_conf, update, ticker, limit_buy_order, limit_s 'freqtrade.freqtradebot.exchange', validate_pairs=MagicMock(), get_ticker=ticker, - get_fee=MagicMock(return_value=0.0025) + get_fee=fee ) freqtradebot = FreqtradeBot(default_conf, create_engine('sqlite://')) @@ -161,8 +161,8 @@ def test_rpc_daily_profit(default_conf, update, ticker, limit_buy_order, limit_s assert days.find('must be an integer greater than 0') >= 0 -def test_rpc_trade_statistics( - default_conf, ticker, ticker_sell_up, limit_buy_order, limit_sell_order, mocker) -> None: +def test_rpc_trade_statistics(default_conf, ticker, ticker_sell_up, fee, + limit_buy_order, limit_sell_order, mocker) -> None: """ Test rpc_trade_statistics() method """ @@ -177,7 +177,7 @@ def test_rpc_trade_statistics( 'freqtrade.freqtradebot.exchange', validate_pairs=MagicMock(), get_ticker=ticker, - get_fee=MagicMock(return_value=0.0025) + get_fee=fee ) freqtradebot = FreqtradeBot(default_conf, create_engine('sqlite://')) @@ -224,8 +224,8 @@ def test_rpc_trade_statistics( # Test that rpc_trade_statistics can handle trades that lacks # trade.open_rate (it is set to None) -def test_rpc_trade_statistics_closed(mocker, default_conf, ticker, ticker_sell_up, limit_buy_order, - limit_sell_order): +def test_rpc_trade_statistics_closed(mocker, default_conf, ticker, fee, + ticker_sell_up, limit_buy_order, limit_sell_order): """ Test rpc_trade_statistics() method """ @@ -240,7 +240,7 @@ def test_rpc_trade_statistics_closed(mocker, default_conf, ticker, ticker_sell_u 'freqtrade.freqtradebot.exchange', validate_pairs=MagicMock(), get_ticker=ticker, - get_fee=MagicMock(return_value=0.0025) + get_fee=fee ) freqtradebot = FreqtradeBot(default_conf, create_engine('sqlite://')) @@ -259,7 +259,7 @@ def test_rpc_trade_statistics_closed(mocker, default_conf, ticker, ticker_sell_u 'freqtrade.freqtradebot.exchange', validate_pairs=MagicMock(), get_ticker=ticker_sell_up, - get_fee=MagicMock(return_value=0.0025) + get_fee=fee ) trade.update(limit_sell_order) trade.close_date = datetime.utcnow() @@ -484,7 +484,7 @@ def test_rpc_forcesell(default_conf, ticker, mocker) -> None: assert cancel_order_mock.call_count == 1 -def test_performance_handle(default_conf, ticker, limit_buy_order, +def test_performance_handle(default_conf, ticker, limit_buy_order, fee, limit_sell_order, mocker) -> None: """ Test rpc_performance() method @@ -497,7 +497,7 @@ def test_performance_handle(default_conf, ticker, limit_buy_order, validate_pairs=MagicMock(), get_balances=MagicMock(return_value=ticker), get_ticker=ticker, - get_fee=MagicMock(return_value=0.0025) + get_fee=fee ) freqtradebot = FreqtradeBot(default_conf, create_engine('sqlite://')) diff --git a/freqtrade/tests/rpc/test_rpc_telegram.py b/freqtrade/tests/rpc/test_rpc_telegram.py index 1d9904e8f..1c90db53d 100644 --- a/freqtrade/tests/rpc/test_rpc_telegram.py +++ b/freqtrade/tests/rpc/test_rpc_telegram.py @@ -374,7 +374,7 @@ def test_status_table_handle(default_conf, update, ticker, mocker) -> None: assert msg_mock.call_count == 1 -def test_daily_handle(default_conf, update, ticker, limit_buy_order, +def test_daily_handle(default_conf, update, ticker, limit_buy_order, fee, limit_sell_order, mocker) -> None: """ Test _daily() method @@ -389,7 +389,7 @@ def test_daily_handle(default_conf, update, ticker, limit_buy_order, 'freqtrade.freqtradebot.exchange', validate_pairs=MagicMock(), get_ticker=ticker, - get_fee=MagicMock(return_value=0.0025) + get_fee=fee ) msg_mock = MagicMock() mocker.patch.multiple( @@ -486,7 +486,7 @@ def test_daily_wrong_input(default_conf, update, ticker, mocker) -> None: assert str('Daily Profit over the last 7 days') in msg_mock.call_args_list[0][0][0] -def test_profit_handle(default_conf, update, ticker, ticker_sell_up, +def test_profit_handle(default_conf, update, ticker, ticker_sell_up, fee, limit_buy_order, limit_sell_order, mocker) -> None: """ Test _profit() method @@ -498,7 +498,7 @@ def test_profit_handle(default_conf, update, ticker, ticker_sell_up, 'freqtrade.freqtradebot.exchange', validate_pairs=MagicMock(), get_ticker=ticker, - get_fee=MagicMock(return_value=0.0025) + get_fee=fee ) msg_mock = MagicMock() mocker.patch.multiple( @@ -750,7 +750,7 @@ def test_stop_handle_already_stopped(default_conf, update, mocker) -> None: assert 'already stopped' in msg_mock.call_args_list[0][0][0] -def test_forcesell_handle(default_conf, update, ticker, ticker_sell_up, mocker) -> None: +def test_forcesell_handle(default_conf, update, ticker, fee, ticker_sell_up, mocker) -> None: """ Test _forcesell() method """ @@ -763,7 +763,7 @@ def test_forcesell_handle(default_conf, update, ticker, ticker_sell_up, mocker) 'freqtrade.freqtradebot.exchange', validate_pairs=MagicMock(), get_ticker=ticker, - get_fee=MagicMock(return_value=0.0025) + get_fee=fee ) freqtradebot = FreqtradeBot(default_conf, create_engine('sqlite://')) @@ -790,7 +790,7 @@ def test_forcesell_handle(default_conf, update, ticker, ticker_sell_up, mocker) assert '0.919 USD' in rpc_mock.call_args_list[-1][0][0] -def test_forcesell_down_handle(default_conf, update, ticker, ticker_sell_down, mocker) -> None: +def test_forcesell_down_handle(default_conf, update, ticker, fee, ticker_sell_down, mocker) -> None: """ Test _forcesell() method """ @@ -803,7 +803,7 @@ def test_forcesell_down_handle(default_conf, update, ticker, ticker_sell_down, m 'freqtrade.freqtradebot.exchange', validate_pairs=MagicMock(), get_ticker=ticker, - get_fee=MagicMock(return_value=0.0025) + get_fee=fee ) freqtradebot = FreqtradeBot(default_conf, create_engine('sqlite://')) @@ -834,7 +834,7 @@ def test_forcesell_down_handle(default_conf, update, ticker, ticker_sell_down, m assert '-0.824 USD' in rpc_mock.call_args_list[-1][0][0] -def test_forcesell_all_handle(default_conf, update, ticker, mocker) -> None: +def test_forcesell_all_handle(default_conf, update, ticker, fee, mocker) -> None: """ Test _forcesell() method """ @@ -848,7 +848,7 @@ def test_forcesell_all_handle(default_conf, update, ticker, mocker) -> None: 'freqtrade.freqtradebot.exchange', validate_pairs=MagicMock(), get_ticker=ticker, - get_fee=MagicMock(return_value=0.0025) + get_fee=fee ) freqtradebot = FreqtradeBot(default_conf, create_engine('sqlite://')) @@ -911,8 +911,8 @@ def test_forcesell_handle_invalid(default_conf, update, mocker) -> None: assert 'Invalid argument.' in msg_mock.call_args_list[0][0][0] -def test_performance_handle(default_conf, update, ticker, limit_buy_order, - limit_sell_order, mocker) -> None: +def test_performance_handle(default_conf, update, ticker, fee, + limit_buy_order, limit_sell_order, mocker) -> None: """ Test _performance() method """ @@ -928,7 +928,7 @@ def test_performance_handle(default_conf, update, ticker, limit_buy_order, 'freqtrade.freqtradebot.exchange', validate_pairs=MagicMock(), get_ticker=ticker, - get_fee=MagicMock(return_value=0.0025) + get_fee=fee ) mocker.patch('freqtrade.freqtradebot.RPCManager', MagicMock()) freqtradebot = FreqtradeBot(default_conf, create_engine('sqlite://')) diff --git a/freqtrade/tests/test_freqtradebot.py b/freqtrade/tests/test_freqtradebot.py index 331af5d87..edacfb33f 100644 --- a/freqtrade/tests/test_freqtradebot.py +++ b/freqtrade/tests/test_freqtradebot.py @@ -575,7 +575,7 @@ def test_process_maybe_execute_sell(mocker, default_conf) -> None: assert freqtrade.process_maybe_execute_sell(trade) -def test_handle_trade(default_conf, limit_buy_order, limit_sell_order, mocker) -> None: +def test_handle_trade(default_conf, limit_buy_order, limit_sell_order, fee, mocker) -> None: """ Test check_handle() method """ @@ -591,7 +591,7 @@ def test_handle_trade(default_conf, limit_buy_order, limit_sell_order, mocker) - }), buy=MagicMock(return_value={'id': 'mocked_limit_buy'}), sell=MagicMock(return_value={'id': 'mocked_limit_sell'}), - get_fee=MagicMock(return_value=0.0025) + get_fee=fee ) patch_coinmarketcap(mocker, value={'price_usd': 15000.0}) @@ -772,7 +772,7 @@ def test_close_trade(default_conf, ticker, limit_buy_order, limit_sell_order, mo freqtrade.handle_trade(trade) -def test_check_handle_timedout_buy(default_conf, ticker, limit_buy_order_old, mocker) -> None: +def test_check_handle_timedout_buy(default_conf, ticker, limit_buy_order_old, fee, mocker) -> None: """ Test check_handle_timedout() method """ @@ -785,7 +785,7 @@ def test_check_handle_timedout_buy(default_conf, ticker, limit_buy_order_old, mo get_ticker=ticker, get_order=MagicMock(return_value=limit_buy_order_old), cancel_order=cancel_order_mock, - get_fee=MagicMock(return_value=0.0025) + get_fee=fee ) freqtrade = FreqtradeBot(default_conf, create_engine('sqlite://')) @@ -989,7 +989,7 @@ def test_handle_timedout_limit_sell(mocker, default_conf) -> None: assert cancel_order_mock.call_count == 1 -def test_execute_sell_up(default_conf, ticker, ticker_sell_up, mocker) -> None: +def test_execute_sell_up(default_conf, ticker, fee, ticker_sell_up, mocker) -> None: """ Test execute_sell() method with a ticker going UP """ @@ -1000,7 +1000,7 @@ def test_execute_sell_up(default_conf, ticker, ticker_sell_up, mocker) -> None: 'freqtrade.freqtradebot.exchange', validate_pairs=MagicMock(), get_ticker=ticker, - get_fee=MagicMock(return_value=0.0025) + get_fee=fee ) mocker.patch('freqtrade.fiat_convert.CryptoToFiatConverter._find_price', return_value=15000.0) freqtrade = FreqtradeBot(default_conf, create_engine('sqlite://')) @@ -1030,7 +1030,7 @@ def test_execute_sell_up(default_conf, ticker, ticker_sell_up, mocker) -> None: assert '0.919 USD' in rpc_mock.call_args_list[-1][0][0] -def test_execute_sell_down(default_conf, ticker, ticker_sell_down, mocker) -> None: +def test_execute_sell_down(default_conf, ticker, fee, ticker_sell_down, mocker) -> None: """ Test execute_sell() method with a ticker going DOWN """ @@ -1042,7 +1042,7 @@ def test_execute_sell_down(default_conf, ticker, ticker_sell_down, mocker) -> No 'freqtrade.freqtradebot.exchange', validate_pairs=MagicMock(), get_ticker=ticker, - get_fee=MagicMock(return_value=0.0025) + get_fee=fee ) freqtrade = FreqtradeBot(default_conf, create_engine('sqlite://')) @@ -1070,7 +1070,8 @@ def test_execute_sell_down(default_conf, ticker, ticker_sell_down, mocker) -> No assert '-0.824 USD' in rpc_mock.call_args_list[-1][0][0] -def test_execute_sell_without_conf_sell_up(default_conf, ticker, ticker_sell_up, mocker) -> None: +def test_execute_sell_without_conf_sell_up(default_conf, ticker, fee, + ticker_sell_up, mocker) -> None: """ Test execute_sell() method with a ticker going DOWN and with a bot config empty """ @@ -1081,7 +1082,7 @@ def test_execute_sell_without_conf_sell_up(default_conf, ticker, ticker_sell_up, 'freqtrade.freqtradebot.exchange', validate_pairs=MagicMock(), get_ticker=ticker, - get_fee=MagicMock(return_value=0.0025) + get_fee=fee ) freqtrade = FreqtradeBot(default_conf, create_engine('sqlite://')) @@ -1110,7 +1111,7 @@ def test_execute_sell_without_conf_sell_up(default_conf, ticker, ticker_sell_up, assert 'USD' not in rpc_mock.call_args_list[-1][0][0] -def test_execute_sell_without_conf_sell_down(default_conf, ticker, +def test_execute_sell_without_conf_sell_down(default_conf, ticker, fee, ticker_sell_down, mocker) -> None: """ Test execute_sell() method with a ticker going DOWN and with a bot config empty @@ -1122,7 +1123,7 @@ def test_execute_sell_without_conf_sell_down(default_conf, ticker, 'freqtrade.freqtradebot.exchange', validate_pairs=MagicMock(), get_ticker=ticker, - get_fee=MagicMock(return_value=0.0025) + get_fee=fee ) freqtrade = FreqtradeBot(default_conf, create_engine('sqlite://')) diff --git a/freqtrade/tests/test_persistence.py b/freqtrade/tests/test_persistence.py index 6ee145328..97f2cdcfe 100644 --- a/freqtrade/tests/test_persistence.py +++ b/freqtrade/tests/test_persistence.py @@ -89,7 +89,7 @@ def test_init_prod_db(default_conf, mocker): os.rename(prod_db_swp, prod_db) -def test_update_with_bittrex(limit_buy_order, limit_sell_order): +def test_update_with_bittrex(limit_buy_order, limit_sell_order, fee): """ On this test we will buy and sell a crypto currency. @@ -120,7 +120,7 @@ def test_update_with_bittrex(limit_buy_order, limit_sell_order): trade = Trade( pair='ETH/BTC', stake_amount=0.001, - fee=0.0025, + fee=fee.return_value, exchange='bittrex', ) assert trade.open_order_id is None @@ -143,11 +143,11 @@ def test_update_with_bittrex(limit_buy_order, limit_sell_order): assert trade.close_date is not None -def test_calc_open_close_trade_price(limit_buy_order, limit_sell_order): +def test_calc_open_close_trade_price(limit_buy_order, limit_sell_order, fee): trade = Trade( pair='ETH/BTC', stake_amount=0.001, - fee=0.0025, + fee=fee.return_value, exchange='bittrex', ) @@ -165,11 +165,11 @@ def test_calc_open_close_trade_price(limit_buy_order, limit_sell_order): assert trade.calc_profit_percent() == 0.06201057 -def test_calc_close_trade_price_exception(limit_buy_order): +def test_calc_close_trade_price_exception(limit_buy_order, fee): trade = Trade( pair='ETH/BTC', stake_amount=0.001, - fee=0.0025, + fee=fee.return_value, exchange='bittrex', ) @@ -212,11 +212,11 @@ def test_update_invalid_order(limit_buy_order): trade.update(limit_buy_order) -def test_calc_open_trade_price(limit_buy_order): +def test_calc_open_trade_price(limit_buy_order, fee): trade = Trade( pair='ETH/BTC', stake_amount=0.001, - fee=0.0025, + fee=fee.return_value, exchange='bittrex', ) trade.open_order_id = 'open_trade' @@ -229,11 +229,11 @@ def test_calc_open_trade_price(limit_buy_order): assert trade.calc_open_trade_price(fee=0.003) == 0.001003000 -def test_calc_close_trade_price(limit_buy_order, limit_sell_order): +def test_calc_close_trade_price(limit_buy_order, limit_sell_order, fee): trade = Trade( pair='ETH/BTC', stake_amount=0.001, - fee=0.0025, + fee=fee.return_value, exchange='bittrex', ) trade.open_order_id = 'close_trade' @@ -250,11 +250,11 @@ def test_calc_close_trade_price(limit_buy_order, limit_sell_order): assert trade.calc_close_trade_price(fee=0.005) == 0.0010619972 -def test_calc_profit(limit_buy_order, limit_sell_order): +def test_calc_profit(limit_buy_order, limit_sell_order, fee): trade = Trade( pair='ETH/BTC', stake_amount=0.001, - fee=0.0025, + fee=fee.return_value, exchange='bittrex', ) trade.open_order_id = 'profit_percent' @@ -280,11 +280,11 @@ def test_calc_profit(limit_buy_order, limit_sell_order): assert trade.calc_profit(fee=0.003) == 0.00006163 -def test_calc_profit_percent(limit_buy_order, limit_sell_order): +def test_calc_profit_percent(limit_buy_order, limit_sell_order, fee): trade = Trade( pair='ETH/BTC', stake_amount=0.001, - fee=0.0025, + fee=fee.return_value, exchange='bittrex', ) trade.open_order_id = 'profit_percent' @@ -304,7 +304,7 @@ def test_calc_profit_percent(limit_buy_order, limit_sell_order): assert trade.calc_profit_percent(fee=0.003) == 0.0614782 -def test_clean_dry_run_db(default_conf): +def test_clean_dry_run_db(default_conf, fee): init(default_conf, create_engine('sqlite://')) # Simulate dry_run entries @@ -312,7 +312,7 @@ def test_clean_dry_run_db(default_conf): pair='ETH/BTC', stake_amount=0.001, amount=123.0, - fee=0.0025, + fee=fee.return_value, open_rate=0.123, exchange='bittrex', open_order_id='dry_run_buy_12345' @@ -323,7 +323,7 @@ def test_clean_dry_run_db(default_conf): pair='ETC/BTC', stake_amount=0.001, amount=123.0, - fee=0.0025, + fee=fee.return_value, open_rate=0.123, exchange='bittrex', open_order_id='dry_run_sell_12345' @@ -335,7 +335,7 @@ def test_clean_dry_run_db(default_conf): pair='ETC/BTC', stake_amount=0.001, amount=123.0, - fee=0.0025, + fee=fee.return_value, open_rate=0.123, exchange='bittrex', open_order_id='prod_buy_12345'