Files
hunjing/backend/tests/repositories/test_mcp_servers_repo.py
T
2026-08-21 16:00:13 +08:00

63 lines
1.9 KiB
Python

"""MCP server 数据访问测试。"""
import pytest
from sqlalchemy.exc import IntegrityError
from app.db.session import AsyncSessionLocal
from app.models.mcp_servers import McpServer
from app.repositories import mcp_servers as mcp_repo
def _server(name: str = "weather", **overrides) -> McpServer:
base = {
"name": name,
"endpoint_url": "http://mcp.local",
"auth_token": None,
"status": "enabled",
"tools_json": "[]",
}
base.update(overrides)
return McpServer(**base)
@pytest.mark.asyncio
async def test_add_and_get() -> None:
async with AsyncSessionLocal() as session:
s = _server()
await mcp_repo.add_server(session, s)
await session.commit()
sid = s.id
async with AsyncSessionLocal() as session:
fetched = await mcp_repo.get_server(session, sid)
assert fetched is not None
assert fetched.name == "weather"
assert fetched.endpoint_url == "http://mcp.local"
@pytest.mark.asyncio
async def test_list_with_status_filter() -> None:
async with AsyncSessionLocal() as session:
await mcp_repo.add_server(session, _server("a", status="enabled"))
await mcp_repo.add_server(session, _server("b", status="disabled"))
await session.commit()
async with AsyncSessionLocal() as session:
enabled = await mcp_repo.list_servers(session, status="enabled")
all_servers = await mcp_repo.list_servers(session)
assert len(enabled) == 1
assert enabled[0].name == "a"
assert len(all_servers) == 2
@pytest.mark.asyncio
async def test_name_unique_conflict() -> None:
async with AsyncSessionLocal() as session:
await mcp_repo.add_server(session, _server("dup"))
await session.commit()
async with AsyncSessionLocal() as session:
with pytest.raises(IntegrityError):
await mcp_repo.add_server(session, _server("dup"))
await session.commit()