Add test for coupling of AVAILABLE_CLI_OPTIONS and ARGS_*

This commit is contained in:
Oliver Bristow
2025-04-04 01:13:25 +01:00
parent 91df1257e7
commit 38fa7068ca
2 changed files with 29 additions and 3 deletions

View File

@@ -21,6 +21,8 @@ ARGS_COMMON = [
"user_data_dir",
]
ARGS_MAIN = ["version_main"]
ARGS_STRATEGY = [
"strategy",
"strategy_path",
@@ -347,7 +349,7 @@ class Arguments:
self.parser = ArgumentParser(
prog="freqtrade", description="Free, open source crypto trading bot"
)
self._build_args(optionlist=["version_main"], parser=self.parser)
self._build_args(optionlist=ARGS_MAIN, parser=self.parser)
from freqtrade.commands import (
start_analysis_entries_exits,

View File

@@ -5,11 +5,35 @@ from unittest.mock import MagicMock
import pytest
from freqtrade.commands import Arguments
from freqtrade.commands.cli_options import check_int_nonzero, check_int_positive
from freqtrade.commands import Arguments, arguments
from freqtrade.commands.cli_options import (
check_int_nonzero,
check_int_positive,
AVAILABLE_CLI_OPTIONS,
)
from tests.conftest import CURRENT_TEST_STRATEGY
def test_available_cli_options():
"""AVAILABLE_CLI_OPTIONS has keys that are the union of the values in all ARGS_* - required by CLI"""
# each of the ARGS_* lists has a list of members which is assumed to also be in AVAILABLE_CLI_OPTIONS
args_union = {
arg
for variable, value in vars(arguments).items()
if variable.startswith("ARGS_")
for arg in value
}
expected_options = set(AVAILABLE_CLI_OPTIONS)
only_in_command_args = expected_options.difference(args_union)
only_in_all_args = args_union.difference(expected_options)
if only_in_all_args or only_in_command_args:
pytest.fail(
"variables around command line arguments not kept in sync:\n"
f" * args only in some ARGS_* list but not AVAILABLE_CLI_OPTIONS: {only_in_all_args}\n"
f" * args only in AVAILABLE_CLI_OPTIONS but not some ARGS_* list: {only_in_command_args}"
)
# Parse common command-line-arguments. Used for all tools
def test_parse_args_none() -> None:
arguments = Arguments(["trade"])