aria / tests /unit /interfaces /test_developer_interfaces.py
varshithreddy1807's picture
fix: resolve Pydantic compatibility for MCP SDK (#13)
a5d33a6
Raw History Blame Contribute Delete
5.05 kB
"""Unit tests for C9 Developer Interfaces (REST, CLI, MCP, Python SDK, VS Code)."""
from unittest.mock import MagicMock
from ria.interfaces.cli import CLIRunner
from ria.interfaces.mcp import MCPServer
from ria.interfaces.rest import RESTAPIServer
from ria.interfaces.sdk.python import RIAClient
from ria.interfaces.vscode.extension import VSCodeCommandDispatcher
def test_rest_api_server_endpoints() -> None:
mock_sync = MagicMock()
mock_search = MagicMock()
mock_query = MagicMock()
mock_context = MagicMock()
mock_knowledge = MagicMock()
mock_sync.register_repository.return_value = MagicMock(
is_success=True, repo_id="r1", status="SYNCED"
)
mock_sync.synchronize_repository.return_value = MagicMock(
is_success=True, repo_id="r1", current_commit_sha="abc"
)
mock_search.search_symbol.return_value = MagicMock(
is_success=True, results=MagicMock(payload=(1, 2, 3, 4, 5))
)
mock_query.find_definition.return_value = MagicMock(is_success=True, query_id="q1")
mock_context.build_context.return_value = MagicMock(
is_success=True, package_id="p1", total_tokens=150, content="{}"
)
mock_knowledge.answer_question.return_value = MagicMock(
is_success=True, answer_text="Ans", is_grounded=True, grounding_score=0.98
)
server = RESTAPIServer(
mock_sync, mock_search, mock_query, mock_context, mock_knowledge
)
# Health
resp = server.handle_request("GET", "/health")
assert resp.is_success
assert resp.data["status"] == "healthy"
# Version
resp = server.handle_request("GET", "/version")
assert resp.is_success
assert resp.data["version"] == "2.0.0"
# Register repo
resp = server.handle_request(
"POST", "/repositories", {"remote_url": "https://repo.git", "name": "repo"}
)
assert resp.is_success
assert resp.data["repo_id"] == "r1"
# Search
resp = server.handle_request(
"POST", "/search", {"repo_id": "r1", "query_text": "main"}
)
assert resp.is_success
assert resp.data["total_matches"] == 5
def test_mcp_server_tools() -> None:
mock_sync = MagicMock()
mock_search = MagicMock()
mock_query = MagicMock()
mock_context = MagicMock()
mock_knowledge = MagicMock()
mock_search.search_symbol.return_value = MagicMock(
is_success=True, results=MagicMock(payload=(1, 2))
)
mock_knowledge.answer_question.return_value = MagicMock(
is_success=True, answer_text="Ans", is_grounded=True
)
mcp = MCPServer(mock_sync, mock_search, mock_query, mock_context, mock_knowledge)
tools = mcp.list_tools()
assert len(tools) == 14
res = mcp.invoke_tool("search_symbol", {"repo_id": "r1", "query": "login"})
assert res["is_success"]
res = mcp.invoke_tool(
"ask_repository", {"repo_id": "r1", "question": "how to login?"}
)
assert res["is_success"]
assert res["answer"] == "Ans"
def test_python_sdk_client() -> None:
mock_sync = MagicMock()
mock_search = MagicMock()
mock_query = MagicMock()
mock_context = MagicMock()
mock_knowledge = MagicMock()
mock_search.search_symbol.return_value = MagicMock(
is_success=True, results=MagicMock(payload=tuple(range(10)))
)
mock_knowledge.answer_question.return_value = MagicMock(
is_success=True, answer_text="SDK Ans", is_grounded=True
)
client = RIAClient(mock_sync, mock_search, mock_query, mock_context, mock_knowledge)
srch_resp = client.search("r1", "AuthService")
assert srch_resp.is_success
assert srch_resp.data["total_matches"] == 10
ask_resp = client.ask("r1", "AuthService?")
assert ask_resp.is_success
assert ask_resp.data["answer"] == "SDK Ans"
def test_cli_runner() -> None:
mock_sync = MagicMock()
mock_search = MagicMock()
mock_query = MagicMock()
mock_context = MagicMock()
mock_knowledge = MagicMock()
mock_sync.register_repository.return_value = MagicMock(
is_success=True, repo_id="r1", status="SYNCED"
)
mock_search.search_symbol.return_value = MagicMock(
is_success=True, results=MagicMock(payload=(1,))
)
cli = CLIRunner(mock_sync, mock_search, mock_query, mock_context, mock_knowledge)
ret = cli.run(["init", "--remote-url", "https://repo.git", "--name", "repo"])
assert ret == 0
ret = cli.run(["search", "--repo-id", "r1", "--query", "login"])
assert ret == 0
def test_vscode_command_dispatcher() -> None:
mock_search = MagicMock()
mock_query = MagicMock()
mock_context = MagicMock()
mock_knowledge = MagicMock()
mock_knowledge.answer_question.return_value = MagicMock(
is_success=True, answer_text="VS Code Ans"
)
disp = VSCodeCommandDispatcher(
mock_search, mock_query, mock_context, mock_knowledge
)
res = disp.execute_command(
"ria.askRepository", {"repo_id": "r1", "question": "auth?"}
)
assert res["is_success"]
assert res["answer"] == "VS Code Ans"