From 285867f8c61da1c12f90dedc0a6f8544455b89d1 Mon Sep 17 00:00:00 2001 From: Axel-CH Date: Tue, 25 Mar 2025 11:35:48 -0400 Subject: [PATCH] test: add test_worker_lifecycle --- tests/freqtradebot/test_worker.py | 34 +++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/tests/freqtradebot/test_worker.py b/tests/freqtradebot/test_worker.py index 1e1326b50..f97a9ff86 100644 --- a/tests/freqtradebot/test_worker.py +++ b/tests/freqtradebot/test_worker.py @@ -3,6 +3,7 @@ import time from datetime import timedelta from unittest.mock import MagicMock, PropertyMock +import pytest import time_machine from freqtrade.data.dataprovider import DataProvider @@ -69,6 +70,39 @@ def test_worker_stopped(mocker, default_conf, caplog) -> None: assert mock_throttle.call_count == 1 +@pytest.mark.parametrize( + "old_state, target_state, expected_state, log_fragment", + [ + (State.STOPPED, State.PAUSED, State.PAUSED, "Changing state from STOPPED to: PAUSED"), + (State.RUNNING, State.PAUSED, State.PAUSED, "Changing state from RUNNING to: PAUSED"), + (State.PAUSED, State.RUNNING, State.RUNNING, "Changing state from PAUSED to: RUNNING"), + (State.PAUSED, State.STOPPED, State.STOPPED, "Changing state from PAUSED to: STOPPED"), + ], +) +def test_worker_lifecycle( + mocker, default_conf, caplog, old_state, target_state, expected_state, log_fragment +): + mock_throttle = mocker.MagicMock() + mocker.patch("freqtrade.worker.Worker._throttle", mock_throttle) + mocker.patch("freqtrade.persistence.Trade.stoploss_reinitialization", mocker.MagicMock()) + + worker = get_patched_worker(mocker, default_conf) + worker.freqtrade.state = target_state + + new_state = worker._worker(old_state=old_state) + + assert new_state is expected_state + assert log_has(log_fragment, caplog) + assert mock_throttle.call_count == 1 + + # For any state where the strategy should be initialized + if expected_state in (State.RUNNING, State.PAUSED): + assert worker.freqtrade.strategy + assert isinstance(worker.freqtrade.strategy.dp, DataProvider) + else: + assert new_state is State.STOPPED + + def test_throttle(mocker, default_conf, caplog) -> None: def throttled_func(): return 42