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

121 lines
4.0 KiB
Python

from unittest.mock import patch
import pytest
from mlflow.assistant.config import AssistantConfig, PermissionsConfig
from mlflow.assistant.providers import MlflowGatewayProvider, OllamaProvider
from mlflow.assistant.providers.base import clear_config_cache
@pytest.fixture(autouse=True)
def config_file(tmp_path):
config_path = tmp_path / "config.json"
clear_config_cache()
with patch("mlflow.assistant.config.CONFIG_PATH", config_path):
yield config_path
clear_config_cache()
def test_update_provider_preserves_selection():
ollama = OllamaProvider.OLLAMA_PROVIDER_NAME
config = AssistantConfig()
config.set_provider("claude_code", "claude-4", base_url=None)
assert config.providers["claude_code"].selected is True
config.update_provider(ollama, model="llama3.2", base_url="http://localhost:11434")
assert config.providers["claude_code"].selected is True
assert config.providers[ollama].selected is False
assert config.providers[ollama].model == "llama3.2"
assert config.providers[ollama].base_url == "http://localhost:11434"
def test_update_provider_creates_entry_when_missing():
ollama = OllamaProvider.OLLAMA_PROVIDER_NAME
config = AssistantConfig()
assert ollama not in config.providers
config.update_provider(ollama, model="llama3.2", base_url="http://localhost:11434")
assert ollama in config.providers
assert config.providers[ollama].model == "llama3.2"
assert config.providers[ollama].selected is False
def test_update_provider_does_not_deselect_existing():
ollama = OllamaProvider.OLLAMA_PROVIDER_NAME
config = AssistantConfig()
config.set_provider(ollama, "llama3.2")
assert config.providers[ollama].selected is True
config.update_provider(ollama, base_url="http://newhost:11434")
assert config.providers[ollama].selected is True
assert config.providers[ollama].base_url == "http://newhost:11434"
def test_set_provider_deselects_others():
ollama = OllamaProvider.OLLAMA_PROVIDER_NAME
config = AssistantConfig()
config.set_provider("claude_code", "claude-4")
config.update_provider(ollama, model="llama3.2")
config.set_provider(ollama, "llama3.2")
assert config.providers["claude_code"].selected is False
assert config.providers[ollama].selected is True
def test_get_selected_provider_returns_none_when_empty():
config = AssistantConfig()
assert config.get_selected_provider() is None
def test_config_round_trip(config_file):
ollama = OllamaProvider.OLLAMA_PROVIDER_NAME
config = AssistantConfig()
config.set_provider(ollama, "llama3.2", base_url="http://localhost:11434")
config.save()
loaded = AssistantConfig.load()
assert loaded.providers[ollama].model == "llama3.2"
assert loaded.providers[ollama].selected is True
assert loaded.providers[ollama].base_url == "http://localhost:11434"
def test_update_provider_preserves_permissions():
ollama = OllamaProvider.OLLAMA_PROVIDER_NAME
config = AssistantConfig()
config.set_provider(ollama, "llama3.2")
new_perms = PermissionsConfig(allow_edit_files=False, full_access=False)
config.update_provider(ollama, permissions=new_perms)
assert config.providers[ollama].permissions.allow_edit_files is False
def test_api_key_round_trip(config_file):
config = AssistantConfig()
config.set_provider(
MlflowGatewayProvider.GATEWAY_PROVIDER_NAME,
"gpt-4",
base_url="http://gateway.local:5000",
api_key="sk-test-123",
)
config.save()
loaded = AssistantConfig.load()
name = MlflowGatewayProvider.GATEWAY_PROVIDER_NAME
assert loaded.providers[name].api_key == "sk-test-123"
assert loaded.providers[name].base_url == "http://gateway.local:5000"
def test_update_provider_updates_api_key():
name = MlflowGatewayProvider.GATEWAY_PROVIDER_NAME
config = AssistantConfig()
config.set_provider(name, "gpt-4", api_key="sk-old")
config.update_provider(name, api_key="sk-new")
assert config.providers[name].api_key == "sk-new"