3579db2f06
Adds mcp._context.current_user_id() backed by a ContextVar. The ASGI auth middleware sets it before dispatching to FastMCP and resets it on the way out, so tool handlers can read the acting user without re-parsing the request scope. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
26 lines
787 B
Python
26 lines
787 B
Python
"""Tests for MCP per-request user_id context."""
|
|
import pytest
|
|
|
|
from fabledassistant.mcp._context import current_user_id, _user_id_ctx
|
|
|
|
|
|
def test_current_user_id_raises_when_unset():
|
|
"""No active context — must raise so tools don't silently fall back to a default."""
|
|
_user_id_ctx.set(None)
|
|
with pytest.raises(RuntimeError, match="no MCP user context"):
|
|
current_user_id()
|
|
|
|
|
|
def test_current_user_id_returns_set_value():
|
|
_user_id_ctx.set(42)
|
|
assert current_user_id() == 42
|
|
|
|
|
|
def test_current_user_id_isolation_via_contextvar_token():
|
|
"""Reset via the token returned by set() restores prior state."""
|
|
_user_id_ctx.set(1)
|
|
token = _user_id_ctx.set(2)
|
|
assert current_user_id() == 2
|
|
_user_id_ctx.reset(token)
|
|
assert current_user_id() == 1
|