Skip to content

Commit c4022ad

Browse files
committed
test mapped tests MCP
1 parent 4226314 commit c4022ad

File tree

3 files changed

+100
-52
lines changed

3 files changed

+100
-52
lines changed

litellm/model_prices_and_context_window_backup.json

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12975,6 +12975,39 @@
1297512975
"supports_vision": true,
1297612976
"supports_web_search": true
1297712977
},
12978+
"gpt-5-pro-2025-10-06": {
12979+
"input_cost_per_token": 1.5e-05,
12980+
"input_cost_per_token_batches": 7.5e-06,
12981+
"litellm_provider": "openai",
12982+
"max_input_tokens": 400000,
12983+
"max_output_tokens": 272000,
12984+
"max_tokens": 272000,
12985+
"mode": "responses",
12986+
"output_cost_per_token": 1.2e-04,
12987+
"output_cost_per_token_batches": 6e-05,
12988+
"supported_endpoints": [
12989+
"/v1/batch",
12990+
"/v1/responses"
12991+
],
12992+
"supported_modalities": [
12993+
"text",
12994+
"image"
12995+
],
12996+
"supported_output_modalities": [
12997+
"text"
12998+
],
12999+
"supports_function_calling": true,
13000+
"supports_native_streaming": false,
13001+
"supports_parallel_function_calling": true,
13002+
"supports_pdf_input": true,
13003+
"supports_prompt_caching": true,
13004+
"supports_reasoning": true,
13005+
"supports_response_schema": true,
13006+
"supports_system_messages": true,
13007+
"supports_tool_choice": true,
13008+
"supports_vision": true,
13009+
"supports_web_search": true
13010+
},
1297813011
"gpt-5-codex": {
1297913012
"cache_read_input_token_cost": 1.25e-07,
1298013013
"input_cost_per_token": 1.25e-06,

tests/test_litellm/proxy/_experimental/mcp_server/auth/test_user_api_key_auth_mcp.py

Lines changed: 62 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1053,7 +1053,7 @@ async def test_get_team_object_permission_with_already_loaded_permission():
10531053
from the team object without making an additional DB call.
10541054
"""
10551055
from litellm.proxy._types import LiteLLM_ObjectPermissionTable, LiteLLM_TeamTable
1056-
1056+
10571057
# Create mock object permission
10581058
mock_object_permission = LiteLLM_ObjectPermissionTable(
10591059
object_permission_id="perm-123",
@@ -1077,28 +1077,34 @@ async def test_get_team_object_permission_with_already_loaded_permission():
10771077
)
10781078

10791079
# Mock get_team_object to return our team with loaded permission
1080+
# Also need to mock prisma_client from proxy_server
1081+
mock_prisma = MagicMock()
10801082
with patch(
1081-
"litellm.proxy._experimental.mcp_server.auth.user_api_key_auth_mcp.get_team_object"
1082-
) as mock_get_team:
1083+
"litellm.proxy.proxy_server.prisma_client",
1084+
mock_prisma,
1085+
):
10831086
with patch(
1084-
"litellm.proxy._experimental.mcp_server.auth.user_api_key_auth_mcp.get_object_permission"
1085-
) as mock_get_perm:
1086-
mock_get_team.return_value = mock_team_obj
1087-
1088-
# Call the method
1089-
result = await MCPRequestHandler._get_team_object_permission(
1090-
mock_user_auth
1091-
)
1092-
1093-
# Assert we got the object permission
1094-
assert result == mock_object_permission
1095-
assert result.mcp_servers == ["server1", "server2"]
1096-
1097-
# Verify get_team_object was called
1098-
mock_get_team.assert_called_once()
1099-
1100-
# Verify get_object_permission was NOT called (since it was already loaded)
1101-
mock_get_perm.assert_not_called()
1087+
"litellm.proxy.auth.auth_checks.get_team_object"
1088+
) as mock_get_team:
1089+
with patch(
1090+
"litellm.proxy.auth.auth_checks.get_object_permission"
1091+
) as mock_get_perm:
1092+
mock_get_team.return_value = mock_team_obj
1093+
1094+
# Call the method
1095+
result = await MCPRequestHandler._get_team_object_permission(
1096+
mock_user_auth
1097+
)
1098+
1099+
# Assert we got the object permission
1100+
assert result == mock_object_permission
1101+
assert result.mcp_servers == ["server1", "server2"]
1102+
1103+
# Verify get_team_object was called
1104+
mock_get_team.assert_called_once()
1105+
1106+
# Verify get_object_permission was NOT called (since it was already loaded)
1107+
mock_get_perm.assert_not_called()
11021108

11031109

11041110
@pytest.mark.asyncio
@@ -1108,7 +1114,7 @@ async def test_get_team_object_permission_fetches_from_db_when_not_loaded():
11081114
is not loaded but object_permission_id exists.
11091115
"""
11101116
from litellm.proxy._types import LiteLLM_ObjectPermissionTable, LiteLLM_TeamTable
1111-
1117+
11121118
# Create mock object permission (to be returned from DB)
11131119
mock_object_permission = LiteLLM_ObjectPermissionTable(
11141120
object_permission_id="perm-456",
@@ -1132,35 +1138,41 @@ async def test_get_team_object_permission_fetches_from_db_when_not_loaded():
11321138
)
11331139

11341140
# Mock the methods
1141+
# Also need to mock prisma_client from proxy_server
1142+
mock_prisma = MagicMock()
11351143
with patch(
1136-
"litellm.proxy._experimental.mcp_server.auth.user_api_key_auth_mcp.get_team_object"
1137-
) as mock_get_team:
1144+
"litellm.proxy.proxy_server.prisma_client",
1145+
mock_prisma,
1146+
):
11381147
with patch(
1139-
"litellm.proxy._experimental.mcp_server.auth.user_api_key_auth_mcp.get_object_permission"
1140-
) as mock_get_perm:
1141-
mock_get_team.return_value = mock_team_obj
1142-
mock_get_perm.return_value = mock_object_permission
1143-
1144-
# Call the method
1145-
result = await MCPRequestHandler._get_team_object_permission(
1146-
mock_user_auth
1147-
)
1148-
1149-
# Assert we got the object permission
1150-
assert result == mock_object_permission
1151-
assert result.mcp_servers == ["server3", "server4"]
1152-
1153-
# Verify get_team_object was called
1154-
mock_get_team.assert_called_once()
1155-
1156-
# Verify get_object_permission WAS called (since it wasn't loaded)
1157-
mock_get_perm.assert_called_once_with(
1158-
object_permission_id="perm-456",
1159-
prisma_client=mock.ANY,
1160-
user_api_key_cache=mock.ANY,
1161-
parent_otel_span=mock_user_auth.parent_otel_span,
1162-
proxy_logging_obj=mock.ANY,
1163-
)
1148+
"litellm.proxy.auth.auth_checks.get_team_object"
1149+
) as mock_get_team:
1150+
with patch(
1151+
"litellm.proxy.auth.auth_checks.get_object_permission"
1152+
) as mock_get_perm:
1153+
mock_get_team.return_value = mock_team_obj
1154+
mock_get_perm.return_value = mock_object_permission
1155+
1156+
# Call the method
1157+
result = await MCPRequestHandler._get_team_object_permission(
1158+
mock_user_auth
1159+
)
1160+
1161+
# Assert we got the object permission
1162+
assert result == mock_object_permission
1163+
assert result.mcp_servers == ["server3", "server4"]
1164+
1165+
# Verify get_team_object was called
1166+
mock_get_team.assert_called_once()
1167+
1168+
# Verify get_object_permission WAS called (since it wasn't loaded)
1169+
mock_get_perm.assert_called_once_with(
1170+
object_permission_id="perm-456",
1171+
prisma_client=mock.ANY,
1172+
user_api_key_cache=mock.ANY,
1173+
parent_otel_span=mock_user_auth.parent_otel_span,
1174+
proxy_logging_obj=mock.ANY,
1175+
)
11641176

11651177

11661178
@pytest.mark.asyncio
@@ -1170,7 +1182,7 @@ async def test_get_allowed_mcp_servers_for_team_uses_helper():
11701182
helper which handles both loaded and unloaded object_permission cases.
11711183
"""
11721184
from litellm.proxy._types import LiteLLM_ObjectPermissionTable
1173-
1185+
11741186
# Create mock object permission with servers and access groups
11751187
mock_object_permission = LiteLLM_ObjectPermissionTable(
11761188
object_permission_id="perm-789",

tests/test_litellm/proxy/management_endpoints/test_team_endpoints.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@
22
import json
33
import os
44
import sys
5-
from litellm._uuid import uuid
65
from typing import Optional, cast
76
from unittest.mock import AsyncMock, MagicMock, patch
87

98
import pytest
109
from fastapi import HTTPException
1110
from fastapi.testclient import TestClient
1211

12+
from litellm._uuid import uuid
13+
1314
sys.path.insert(
1415
0, os.path.abspath("../../../")
1516
) # Adds the parent directory to the system path
@@ -412,8 +413,10 @@ async def mock_obj_perm_create(**kwargs):
412413
)
413414

414415
# Verify mcp_tool_permissions was stored
416+
import json
415417
assert "mcp_tool_permissions" in created_permission_data
416-
assert created_permission_data["mcp_tool_permissions"] == {
418+
# mcp_tool_permissions is stored as a JSON string
419+
assert json.loads(created_permission_data["mcp_tool_permissions"]) == {
417420
"server_a": ["read_wiki_structure", "read_wiki_contents"],
418421
"server_b": ["ask_question"],
419422
}

0 commit comments

Comments
 (0)