"""Tests for strategy CLI commands.""" from unittest.mock import patch, MagicMock from click.testing import CliRunner from trading_cli.main import cli def _make_mock_strategy(name, warmup_period=14): s = MagicMock() s.name = name s.warmup_period = warmup_period type(s).__name__ = "MockStrategy" return s def test_strategy_list(): mock_strategies = [_make_mock_strategy("rsi"), _make_mock_strategy("macd", 26)] with patch("trading_cli.commands.strategy._load_all_strategies", return_value=mock_strategies): runner = CliRunner() result = runner.invoke(cli, ["strategy", "list"]) assert result.exit_code == 0 assert "rsi" in result.output.lower() or "Strategy" in result.output def test_strategy_list_empty(): with patch("trading_cli.commands.strategy._load_all_strategies", return_value=[]): runner = CliRunner() result = runner.invoke(cli, ["strategy", "list"]) assert result.exit_code == 0 assert "No strategies found" in result.output def test_strategy_info_rsi(): mock_strategies = [_make_mock_strategy("rsi")] with patch("trading_cli.commands.strategy._load_all_strategies", return_value=mock_strategies): runner = CliRunner() result = runner.invoke(cli, ["strategy", "info", "--name", "rsi"]) assert result.exit_code == 0 assert "rsi" in result.output.lower() def test_strategy_info_unknown(): mock_strategies = [_make_mock_strategy("rsi")] with patch("trading_cli.commands.strategy._load_all_strategies", return_value=mock_strategies): runner = CliRunner() result = runner.invoke(cli, ["strategy", "info", "--name", "nonexistent"]) # Should handle gracefully (exit 0 or 1 with message) assert ( "not found" in result.output.lower() or result.exit_code != 0 or "nonexistent" in result.output )