"""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()