mirror of
https://github.com/BerriAI/litellm.git
synced 2026-09-10 22:41:41 +00:00
Adding tests
This commit is contained in:
parent
bf76e66d2c
commit
313a613a13
1 changed files with 105 additions and 0 deletions
|
|
@ -3043,3 +3043,108 @@ class TestAddMissingTeamMember:
|
|||
assert set(added_teams) == set(
|
||||
expected_teams_added
|
||||
), f"Expected teams {expected_teams_added}, but got {added_teams}"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_role_mappings_override_default_internal_user_params():
|
||||
"""
|
||||
Test that when role_mappings is configured in SSO settings,
|
||||
the SSO-extracted role overrides default_internal_user_params role.
|
||||
"""
|
||||
from litellm.proxy._types import NewUserResponse, SSOUserDefinedValues
|
||||
from litellm.proxy.management_endpoints.ui_sso import insert_sso_user
|
||||
|
||||
# Save original default_internal_user_params
|
||||
original_default_params = getattr(litellm, "default_internal_user_params", None)
|
||||
|
||||
try:
|
||||
# Set default_internal_user_params with a role that should be overridden
|
||||
litellm.default_internal_user_params = {
|
||||
"user_role": "internal_user",
|
||||
"max_budget": 100,
|
||||
"budget_duration": "30d",
|
||||
"models": ["gpt-3.5-turbo"],
|
||||
}
|
||||
|
||||
# Mock SSO result
|
||||
mock_result_openid = CustomOpenID(
|
||||
id="test-user-123",
|
||||
email="test@example.com",
|
||||
display_name="Test User",
|
||||
provider="microsoft",
|
||||
team_ids=[],
|
||||
)
|
||||
|
||||
# User defined values with SSO-extracted role (from role_mappings)
|
||||
user_defined_values: SSOUserDefinedValues = {
|
||||
"user_id": "test-user-123",
|
||||
"user_email": "test@example.com",
|
||||
"user_role": "proxy_admin", # Role from SSO role_mappings
|
||||
"max_budget": None,
|
||||
"budget_duration": None,
|
||||
"models": [],
|
||||
}
|
||||
|
||||
# Mock Prisma client with SSO config that has role_mappings configured
|
||||
mock_prisma = MagicMock()
|
||||
mock_sso_config = MagicMock()
|
||||
mock_sso_config.sso_settings = {
|
||||
"role_mappings": {
|
||||
"Admin": "proxy_admin",
|
||||
"User": "internal_user",
|
||||
}
|
||||
}
|
||||
mock_prisma.db.litellm_ssoconfig.find_unique = AsyncMock(
|
||||
return_value=mock_sso_config
|
||||
)
|
||||
|
||||
# Mock new_user function
|
||||
mock_new_user_response = NewUserResponse(
|
||||
user_id="test-user-123",
|
||||
key="sk-xxxxx",
|
||||
teams=None,
|
||||
)
|
||||
|
||||
with patch(
|
||||
"litellm.proxy.utils.get_prisma_client_or_throw",
|
||||
return_value=mock_prisma,
|
||||
), patch(
|
||||
"litellm.proxy.management_endpoints.ui_sso.new_user",
|
||||
return_value=mock_new_user_response,
|
||||
) as mock_new_user:
|
||||
# Act
|
||||
result = await insert_sso_user(
|
||||
result_openid=mock_result_openid,
|
||||
user_defined_values=user_defined_values,
|
||||
)
|
||||
|
||||
# Assert - verify new_user was called with preserved SSO role
|
||||
mock_new_user.assert_called_once()
|
||||
call_args = mock_new_user.call_args
|
||||
new_user_request = call_args.kwargs["data"]
|
||||
|
||||
# The role from SSO should be preserved, not overridden by default_internal_user_params
|
||||
assert (
|
||||
new_user_request.user_role == "proxy_admin"
|
||||
), "SSO-extracted role should override default_internal_user_params role"
|
||||
|
||||
# Other default params should still be applied
|
||||
assert (
|
||||
new_user_request.max_budget == 100
|
||||
), "max_budget from default_internal_user_params should be applied"
|
||||
assert (
|
||||
new_user_request.budget_duration == "30d"
|
||||
), "budget_duration from default_internal_user_params should be applied"
|
||||
|
||||
# Note: models are applied via _update_internal_new_user_params inside new_user,
|
||||
# not in insert_sso_user, so we verify user_defined_values was updated correctly
|
||||
# by checking that the function completed successfully and other defaults were applied
|
||||
# The models will be applied when new_user processes the request
|
||||
|
||||
finally:
|
||||
# Restore original default_internal_user_params
|
||||
if original_default_params is not None:
|
||||
litellm.default_internal_user_params = original_default_params
|
||||
else:
|
||||
if hasattr(litellm, "default_internal_user_params"):
|
||||
delattr(litellm, "default_internal_user_params")
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue