import json import pytest from clink import get_registry from clink.agents import AgentOutput from clink.parsers.base import ParsedCLIResponse from tools.clink import CLinkTool @pytest.mark.asyncio async def test_clink_tool_execute(monkeypatch): tool = CLinkTool() async def fake_run(**kwargs): return AgentOutput( parsed=ParsedCLIResponse(content="Hello from Gemini", metadata={"model_used": "gemini-2.5-pro"}), sanitized_command=["gemini", "-o", "json"], returncode=0, stdout='{"response": "Hello from Gemini"}', stderr="", duration_seconds=0.42, parser_name="gemini_json", output_file_content=None, ) class DummyAgent: async def run(self, **kwargs): return await fake_run(**kwargs) def fake_create_agent(client): return DummyAgent() monkeypatch.setattr("tools.clink.create_agent", fake_create_agent) arguments = { "prompt": "Summarize the project", "cli_name": "gemini", "role": "default", "files": [], "images": [], } results = await tool.execute(arguments) assert len(results) == 1 payload = json.loads(results[0].text) assert payload["status"] in {"success", "continuation_available"} assert "Hello from Gemini" in payload["content"] metadata = payload.get("metadata", {}) assert metadata.get("cli_name") == "gemini" assert metadata.get("command") == ["gemini", "-o", "json"] def test_registry_lists_roles(): registry = get_registry() clients = registry.list_clients() assert "gemini" in clients roles = registry.list_roles("gemini") assert "default" in roles @pytest.mark.asyncio async def test_clink_tool_defaults_to_first_cli(monkeypatch): tool = CLinkTool() async def fake_run(**kwargs): return AgentOutput( parsed=ParsedCLIResponse(content="Default CLI response", metadata={}), sanitized_command=["gemini"], returncode=0, stdout='{"response": "Default CLI response"}', stderr="", duration_seconds=0.1, parser_name="gemini_json", output_file_content=None, ) class DummyAgent: async def run(self, **kwargs): return await fake_run(**kwargs) monkeypatch.setattr("tools.clink.create_agent", lambda client: DummyAgent()) arguments = { "prompt": "Hello", "files": [], "images": [], } result = await tool.execute(arguments) payload = json.loads(result[0].text) metadata = payload.get("metadata", {}) assert metadata.get("cli_name") == tool._default_cli_name