test mapped tests MCP

This commit is contained in:
Ishaan Jaffer 2025-10-08 18:34:30 -07:00
parent 4226314096
commit c4022ade49
3 changed files with 100 additions and 52 deletions

View file

@ -12975,6 +12975,39 @@
"supports_vision": true,
"supports_web_search": true
},
"gpt-5-pro-2025-10-06": {
"input_cost_per_token": 1.5e-05,
"input_cost_per_token_batches": 7.5e-06,
"litellm_provider": "openai",
"max_input_tokens": 400000,
"max_output_tokens": 272000,
"max_tokens": 272000,
"mode": "responses",
"output_cost_per_token": 1.2e-04,
"output_cost_per_token_batches": 6e-05,
"supported_endpoints": [
"/v1/batch",
"/v1/responses"
],
"supported_modalities": [
"text",
"image"
],
"supported_output_modalities": [
"text"
],
"supports_function_calling": true,
"supports_native_streaming": false,
"supports_parallel_function_calling": true,
"supports_pdf_input": true,
"supports_prompt_caching": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_system_messages": true,
"supports_tool_choice": true,
"supports_vision": true,
"supports_web_search": true
},
"gpt-5-codex": {
"cache_read_input_token_cost": 1.25e-07,
"input_cost_per_token": 1.25e-06,

View file

@ -1053,7 +1053,7 @@ async def test_get_team_object_permission_with_already_loaded_permission():
from the team object without making an additional DB call.
"""
from litellm.proxy._types import LiteLLM_ObjectPermissionTable, LiteLLM_TeamTable
# Create mock object permission
mock_object_permission = LiteLLM_ObjectPermissionTable(
object_permission_id="perm-123",
@ -1077,28 +1077,34 @@ async def test_get_team_object_permission_with_already_loaded_permission():
)
# Mock get_team_object to return our team with loaded permission
# Also need to mock prisma_client from proxy_server
mock_prisma = MagicMock()
with patch(
"litellm.proxy._experimental.mcp_server.auth.user_api_key_auth_mcp.get_team_object"
) as mock_get_team:
"litellm.proxy.proxy_server.prisma_client",
mock_prisma,
):
with patch(
"litellm.proxy._experimental.mcp_server.auth.user_api_key_auth_mcp.get_object_permission"
) as mock_get_perm:
mock_get_team.return_value = mock_team_obj
# Call the method
result = await MCPRequestHandler._get_team_object_permission(
mock_user_auth
)
# Assert we got the object permission
assert result == mock_object_permission
assert result.mcp_servers == ["server1", "server2"]
# Verify get_team_object was called
mock_get_team.assert_called_once()
# Verify get_object_permission was NOT called (since it was already loaded)
mock_get_perm.assert_not_called()
"litellm.proxy.auth.auth_checks.get_team_object"
) as mock_get_team:
with patch(
"litellm.proxy.auth.auth_checks.get_object_permission"
) as mock_get_perm:
mock_get_team.return_value = mock_team_obj
# Call the method
result = await MCPRequestHandler._get_team_object_permission(
mock_user_auth
)
# Assert we got the object permission
assert result == mock_object_permission
assert result.mcp_servers == ["server1", "server2"]
# Verify get_team_object was called
mock_get_team.assert_called_once()
# Verify get_object_permission was NOT called (since it was already loaded)
mock_get_perm.assert_not_called()
@pytest.mark.asyncio
@ -1108,7 +1114,7 @@ async def test_get_team_object_permission_fetches_from_db_when_not_loaded():
is not loaded but object_permission_id exists.
"""
from litellm.proxy._types import LiteLLM_ObjectPermissionTable, LiteLLM_TeamTable
# Create mock object permission (to be returned from DB)
mock_object_permission = LiteLLM_ObjectPermissionTable(
object_permission_id="perm-456",
@ -1132,35 +1138,41 @@ async def test_get_team_object_permission_fetches_from_db_when_not_loaded():
)
# Mock the methods
# Also need to mock prisma_client from proxy_server
mock_prisma = MagicMock()
with patch(
"litellm.proxy._experimental.mcp_server.auth.user_api_key_auth_mcp.get_team_object"
) as mock_get_team:
"litellm.proxy.proxy_server.prisma_client",
mock_prisma,
):
with patch(
"litellm.proxy._experimental.mcp_server.auth.user_api_key_auth_mcp.get_object_permission"
) as mock_get_perm:
mock_get_team.return_value = mock_team_obj
mock_get_perm.return_value = mock_object_permission
# Call the method
result = await MCPRequestHandler._get_team_object_permission(
mock_user_auth
)
# Assert we got the object permission
assert result == mock_object_permission
assert result.mcp_servers == ["server3", "server4"]
# Verify get_team_object was called
mock_get_team.assert_called_once()
# Verify get_object_permission WAS called (since it wasn't loaded)
mock_get_perm.assert_called_once_with(
object_permission_id="perm-456",
prisma_client=mock.ANY,
user_api_key_cache=mock.ANY,
parent_otel_span=mock_user_auth.parent_otel_span,
proxy_logging_obj=mock.ANY,
)
"litellm.proxy.auth.auth_checks.get_team_object"
) as mock_get_team:
with patch(
"litellm.proxy.auth.auth_checks.get_object_permission"
) as mock_get_perm:
mock_get_team.return_value = mock_team_obj
mock_get_perm.return_value = mock_object_permission
# Call the method
result = await MCPRequestHandler._get_team_object_permission(
mock_user_auth
)
# Assert we got the object permission
assert result == mock_object_permission
assert result.mcp_servers == ["server3", "server4"]
# Verify get_team_object was called
mock_get_team.assert_called_once()
# Verify get_object_permission WAS called (since it wasn't loaded)
mock_get_perm.assert_called_once_with(
object_permission_id="perm-456",
prisma_client=mock.ANY,
user_api_key_cache=mock.ANY,
parent_otel_span=mock_user_auth.parent_otel_span,
proxy_logging_obj=mock.ANY,
)
@pytest.mark.asyncio
@ -1170,7 +1182,7 @@ async def test_get_allowed_mcp_servers_for_team_uses_helper():
helper which handles both loaded and unloaded object_permission cases.
"""
from litellm.proxy._types import LiteLLM_ObjectPermissionTable
# Create mock object permission with servers and access groups
mock_object_permission = LiteLLM_ObjectPermissionTable(
object_permission_id="perm-789",

View file

@ -2,7 +2,6 @@ import asyncio
import json
import os
import sys
from litellm._uuid import uuid
from typing import Optional, cast
from unittest.mock import AsyncMock, MagicMock, patch
@ -10,6 +9,8 @@ import pytest
from fastapi import HTTPException
from fastapi.testclient import TestClient
from litellm._uuid import uuid
sys.path.insert(
0, os.path.abspath("../../../")
) # Adds the parent directory to the system path
@ -412,8 +413,10 @@ async def test_new_team_with_mcp_tool_permissions(mock_db_client, mock_admin_aut
)
# Verify mcp_tool_permissions was stored
import json
assert "mcp_tool_permissions" in created_permission_data
assert created_permission_data["mcp_tool_permissions"] == {
# mcp_tool_permissions is stored as a JSON string
assert json.loads(created_permission_data["mcp_tool_permissions"]) == {
"server_a": ["read_wiki_structure", "read_wiki_contents"],
"server_b": ["ask_question"],
}