Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 16 additions & 5 deletions tests/test_cargo_install.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,24 +7,29 @@
validate_library_name,
)


def test_find_cargo_toml_exists(tmp_path, mock_os_path_exists):
(tmp_path / "Cargo.toml").touch()
mock_os_path_exists.return_value = True
result = find_cargo_toml(str(tmp_path))
assert result == str(tmp_path / "Cargo.toml")


def test_find_cargo_toml_not_found():
result = find_cargo_toml()
assert result is None


def test_validate_library_name_valid():
assert validate_library_name("serde") is True


def test_validate_library_name_invalid(capsys):
assert validate_library_name("serde;malicious") is False
captured = capsys.readouterr()
assert "Invalid library name: serde;malicious" in captured.out


def test_check_cargo_installed(mock_shutil_which, capsys):
mock_shutil_which.return_value = "/usr/bin/cargo"
assert check_cargo_installed() is True
Expand All @@ -34,24 +39,30 @@ def test_check_cargo_installed(mock_shutil_which, capsys):
captured = capsys.readouterr()
assert "cargo is not installed or not found in PATH" in captured.out

def test_cargo_install_success(tmp_path, mock_subprocess_run, mock_os_chdir, capsys):

def test_cargo_install_success(tmp_path, mock_subprocess_run, mock_os_chdir, capsys):
(tmp_path / "Cargo.toml").touch()
mock_subprocess_run.return_value = MagicMock(returncode=0, stdout="Added serde", stderr="")
mock_subprocess_run.return_value = MagicMock(
returncode=0, stdout="Added serde", stderr=""
)
cargo_install(["serde"])
captured = capsys.readouterr()
assert "Running cargo add serde ..." in captured.out
assert "Cargo output:\nAdded serde" in captured.out
mock_os_chdir.assert_called()

def test_cargo_install_failure(tmp_path, mock_subprocess_run, capsys):

def test_cargo_install_failure(tmp_path, mock_subprocess_run, capsys):
(tmp_path / "Cargo.toml").touch()
mock_subprocess_run.side_effect = subprocess.CalledProcessError(
returncode=1, cmd=["cargo", "add", "serde"], output="", stderr="Error: invalid crate"
returncode=1,
cmd=["cargo", "add", "serde"],
output="",
stderr="Error: invalid crate",
)
cargo_install(["serde"])
captured = capsys.readouterr()
if "Failed to install serde" not in captured.out:
raise AssertionError
if "stderr:\nError: invalid crate" not in captured.out:
raise AssertionError