Files
2026-07-13 13:22:34 +08:00

50 lines
1.7 KiB
Python

import json
import subprocess
from unittest import mock
import click
import pytest
from mlflow.claude_code.plugin import disable_tracing_plugin, ensure_plugin_installed
def test_disable_tracing_plugin_removes_env_only(tmp_path):
settings_path = tmp_path / ".claude" / "settings.json"
settings_path.parent.mkdir(parents=True)
settings_path.write_text(
json.dumps({
"env": {
"MLFLOW_CLAUDE_TRACING_ENABLED": "true",
"MLFLOW_TRACKING_URI": "http://localhost:5000",
"MLFLOW_EXPERIMENT_ID": "123",
},
"other": "keep-me",
})
)
assert disable_tracing_plugin(settings_path) is True
config = json.loads(settings_path.read_text())
assert config == {"other": "keep-me"}
def test_ensure_plugin_installed_runs_marketplace_add_and_install(tmp_path):
completed = subprocess.CompletedProcess(args=[], returncode=0, stdout="", stderr="")
with (
mock.patch("shutil.which", return_value="/usr/local/bin/claude"),
mock.patch("subprocess.run", return_value=completed) as mock_run,
):
ensure_plugin_installed(tmp_path)
assert mock_run.call_count == 2
first_command = mock_run.call_args_list[0].args[0]
second_command = mock_run.call_args_list[1].args[0]
assert first_command[:5] == ["claude", "plugin", "marketplace", "add", "mlflow/mlflow"]
assert second_command[:4] == ["claude", "plugin", "install", "mlflow-tracing@mlflow-plugins"]
def test_ensure_plugin_installed_requires_claude_binary(tmp_path):
with mock.patch("shutil.which", return_value=None):
with pytest.raises(click.ClickException, match="Claude Code CLI"):
ensure_plugin_installed(tmp_path)