from unittest import mock import pytest from click.testing import CliRunner from crewai.cli.cli import train, version @pytest.fixture def runner(): return CliRunner() @mock.patch("crewai.cli.cli.train_crew") def test_train_default_iterations(train_crew, runner): result = runner.invoke(train) train_crew.assert_called_once_with(5) assert result.exit_code == 0 assert "Training the crew for 5 iterations" in result.output @mock.patch("crewai.cli.cli.train_crew") def test_train_custom_iterations(train_crew, runner): result = runner.invoke(train, ["--n_iterations", "10"]) train_crew.assert_called_once_with(10) assert result.exit_code == 0 assert "Training the crew for 10 iterations" in result.output @mock.patch("crewai.cli.cli.train_crew") def test_train_invalid_string_iterations(train_crew, runner): result = runner.invoke(train, ["--n_iterations", "invalid"]) train_crew.assert_not_called() assert result.exit_code == 2 assert ( "Usage: train [OPTIONS]\nTry 'train --help' for help.\n\nError: Invalid value for '-n' / '--n_iterations': 'invalid' is not a valid integer.\n" in result.output ) def test_version_command(runner): result = runner.invoke(version) assert result.exit_code == 0 assert "crewai version:" in result.output def test_version_command_with_tools(runner): result = runner.invoke(version, ["--tools"]) assert result.exit_code == 0 assert "crewai version:" in result.output assert ( "crewai tools version:" in result.output or "crewai tools not installed" in result.output )