diff --git a/freqtrade/enums/signaltype.py b/freqtrade/enums/signaltype.py index a8e9ef55e..f706fd4dc 100644 --- a/freqtrade/enums/signaltype.py +++ b/freqtrade/enums/signaltype.py @@ -19,6 +19,6 @@ class SignalTagType(Enum): EXIT_TAG = "exit_tag" -class SignalDirection(Enum): +class SignalDirection(str, Enum): LONG = 'long' SHORT = 'short' diff --git a/freqtrade/rpc/api_server/api_v1.py b/freqtrade/rpc/api_server/api_v1.py index 71f251021..4797b38e0 100644 --- a/freqtrade/rpc/api_server/api_v1.py +++ b/freqtrade/rpc/api_server/api_v1.py @@ -136,7 +136,8 @@ def show_config(rpc: Optional[RPC] = Depends(get_rpc_optional), config=Depends(g # /forcebuy is deprecated with short addition. use ForceEntry instead -@router.post(['/forceenter', '/forcebuy'], response_model=ForceEnterResponse, tags=['trading']) +@router.post('/forceenter', response_model=ForceEnterResponse, tags=['trading']) +@router.post('/forcebuy', response_model=ForceEnterResponse, tags=['trading']) def forceentry(payload: ForceEnterPayload, rpc: RPC = Depends(get_rpc)): ordertype = payload.ordertype.value if payload.ordertype else None stake_amount = payload.stakeamount if payload.stakeamount else None diff --git a/tests/rpc/test_rpc.py b/tests/rpc/test_rpc.py index 47c7d4db7..26c98d6a1 100644 --- a/tests/rpc/test_rpc.py +++ b/tests/rpc/test_rpc.py @@ -1090,7 +1090,7 @@ def test_rpc_count(mocker, default_conf, ticker, fee) -> None: assert counts["current"] == 1 -def test_rpcforcebuy(mocker, default_conf, ticker, fee, limit_buy_order_open) -> None: +def test_rpc_forceentry(mocker, default_conf, ticker, fee, limit_buy_order_open) -> None: default_conf['forcebuy_enable'] = True mocker.patch('freqtrade.rpc.telegram.Telegram', MagicMock()) buy_mm = MagicMock(return_value=limit_buy_order_open) @@ -1141,7 +1141,7 @@ def test_rpcforcebuy(mocker, default_conf, ticker, fee, limit_buy_order_open) -> assert trade is None -def test_rpcforcebuy_stopped(mocker, default_conf) -> None: +def test_rpc_forceentry_stopped(mocker, default_conf) -> None: default_conf['forcebuy_enable'] = True default_conf['initial_state'] = 'stopped' mocker.patch('freqtrade.rpc.telegram.Telegram', MagicMock()) @@ -1154,14 +1154,14 @@ def test_rpcforcebuy_stopped(mocker, default_conf) -> None: rpc._rpc_force_entry(pair, None) -def test_rpcforcebuy_disabled(mocker, default_conf) -> None: +def test_rpc_forceentry_disabled(mocker, default_conf) -> None: mocker.patch('freqtrade.rpc.telegram.Telegram', MagicMock()) freqtradebot = get_patched_freqtradebot(mocker, default_conf) patch_get_signal(freqtradebot) rpc = RPC(freqtradebot) pair = 'ETH/BTC' - with pytest.raises(RPCException, match=r'Forcebuy not enabled.'): + with pytest.raises(RPCException, match=r'Forceentry not enabled.'): rpc._rpc_force_entry(pair, None) diff --git a/tests/rpc/test_rpc_apiserver.py b/tests/rpc/test_rpc_apiserver.py index d3b992d63..88585f15c 100644 --- a/tests/rpc/test_rpc_apiserver.py +++ b/tests/rpc/test_rpc_apiserver.py @@ -543,7 +543,7 @@ def test_api_show_config(botclient): assert 'unfilledtimeout' in response assert 'version' in response assert 'api_version' in response - assert 1.1 <= response['api_version'] <= 1.2 + assert 2.1 <= response['api_version'] <= 2.2 def test_api_daily(botclient, mocker, ticker, fee, markets): @@ -1062,23 +1062,27 @@ def test_api_whitelist(botclient): # TODO -lev: add test for forcebuy (short) when feature is supported -def test_api_forcebuy(botclient, mocker, fee): +@pytest.mark.parametrize('endpoint', [ + 'forcebuy', + 'forceenter', +]) +def test_api_forceentry(botclient, mocker, fee, endpoint): ftbot, client = botclient - rc = client_post(client, f"{BASE_URI}/forcebuy", + rc = client_post(client, f"{BASE_URI}/{endpoint}", data='{"pair": "ETH/BTC"}') assert_response(rc, 502) - assert rc.json() == {"error": "Error querying /api/v1/forcebuy: Forcebuy not enabled."} + assert rc.json() == {"error": f"Error querying /api/v1/{endpoint}: Forceentry not enabled."} # enable forcebuy ftbot.config['forcebuy_enable'] = True fbuy_mock = MagicMock(return_value=None) mocker.patch("freqtrade.rpc.RPC._rpc_force_entry", fbuy_mock) - rc = client_post(client, f"{BASE_URI}/forcebuy", + rc = client_post(client, f"{BASE_URI}/{endpoint}", data='{"pair": "ETH/BTC"}') assert_response(rc) - assert rc.json() == {"status": "Error buying pair ETH/BTC."} + assert rc.json() == {"status": "Error entering long trade for pair ETH/BTC."} # Test creating trade fbuy_mock = MagicMock(return_value=Trade( @@ -1101,7 +1105,7 @@ def test_api_forcebuy(botclient, mocker, fee): )) mocker.patch("freqtrade.rpc.RPC._rpc_force_entry", fbuy_mock) - rc = client_post(client, f"{BASE_URI}/forcebuy", + rc = client_post(client, f"{BASE_URI}/{endpoint}", data='{"pair": "ETH/BTC"}') assert_response(rc) assert rc.json() == { diff --git a/tests/rpc/test_rpc_telegram.py b/tests/rpc/test_rpc_telegram.py index 6b227ccaf..c44756ae7 100644 --- a/tests/rpc/test_rpc_telegram.py +++ b/tests/rpc/test_rpc_telegram.py @@ -1175,7 +1175,7 @@ def test_forcebuy_handle_exception(default_conf, update, mocker) -> None: telegram._forcebuy(update=update, context=MagicMock()) assert msg_mock.call_count == 1 - assert msg_mock.call_args_list[0][0][0] == 'Forcebuy not enabled.' + assert msg_mock.call_args_list[0][0][0] == 'Forceentry not enabled.' def test_forcebuy_no_pair(default_conf, update, mocker) -> None: