-
Notifications
You must be signed in to change notification settings - Fork 2.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
a958b31
commit 2520f38
Showing
4 changed files
with
178 additions
and
20 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
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 | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
import subprocess | ||
from unittest import mock | ||
|
||
from crewai.cli.train_crew import train_crew | ||
|
||
|
||
@mock.patch("crewai.cli.train_crew.subprocess.run") | ||
def test_train_crew_positive_iterations(mock_subprocess_run): | ||
# Arrange | ||
n_iterations = 5 | ||
mock_subprocess_run.return_value = subprocess.CompletedProcess( | ||
args=["poetry", "run", "train", str(n_iterations)], | ||
returncode=0, | ||
stdout="Success", | ||
stderr="", | ||
) | ||
|
||
# Act | ||
train_crew(n_iterations) | ||
|
||
# Assert | ||
mock_subprocess_run.assert_called_once_with( | ||
["poetry", "run", "train", str(n_iterations)], | ||
capture_output=False, | ||
text=True, | ||
check=True, | ||
) | ||
|
||
|
||
@mock.patch("crewai.cli.train_crew.click") | ||
def test_train_crew_zero_iterations(click): | ||
train_crew(0) | ||
click.echo.assert_called_once_with( | ||
"An unexpected error occurred: The number of iterations must be a positive integer.", | ||
err=True, | ||
) | ||
|
||
|
||
@mock.patch("crewai.cli.train_crew.click") | ||
def test_train_crew_negative_iterations(click): | ||
train_crew(-2) | ||
click.echo.assert_called_once_with( | ||
"An unexpected error occurred: The number of iterations must be a positive integer.", | ||
err=True, | ||
) | ||
|
||
|
||
@mock.patch("crewai.cli.train_crew.click") | ||
@mock.patch("crewai.cli.train_crew.subprocess.run") | ||
def test_train_crew_called_process_error(mock_subprocess_run, click): | ||
n_iterations = 5 | ||
mock_subprocess_run.side_effect = subprocess.CalledProcessError( | ||
returncode=1, | ||
cmd=["poetry", "run", "train", str(n_iterations)], | ||
output="Error", | ||
stderr="Some error occurred", | ||
) | ||
train_crew(n_iterations) | ||
|
||
mock_subprocess_run.assert_called_once_with( | ||
["poetry", "run", "train", "5"], capture_output=False, text=True, check=True | ||
) | ||
click.echo.assert_has_calls( | ||
[ | ||
mock.call.echo( | ||
"An error occurred while training the crew: Command '['poetry', 'run', 'train', '5']' returned non-zero exit status 1.", | ||
err=True, | ||
), | ||
mock.call.echo("Error", err=True), | ||
] | ||
) | ||
|
||
|
||
@mock.patch("crewai.cli.train_crew.click") | ||
@mock.patch("crewai.cli.train_crew.subprocess.run") | ||
def test_train_crew_unexpected_exception(mock_subprocess_run, click): | ||
# Arrange | ||
n_iterations = 5 | ||
mock_subprocess_run.side_effect = Exception("Unexpected error") | ||
train_crew(n_iterations) | ||
|
||
mock_subprocess_run.assert_called_once_with( | ||
["poetry", "run", "train", "5"], capture_output=False, text=True, check=True | ||
) | ||
click.echo.assert_called_once_with( | ||
"An unexpected error occurred: Unexpected error", err=True | ||
) |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters