"""Tests for UserContext class."""
from datetime import UTC, datetime, timedelta
from geoguessr_mcp.auth.session import UserSession
from geoguessr_mcp.auth.user_context import UserContext
class TestUserContext:
"""Tests for UserContext class."""
def test_user_context_without_session(self):
"""Test user context without a GeoGuessr session."""
context = UserContext(api_key="test_key_123")
assert context.api_key == "test_key_123"
assert context.session is None
assert not context.is_authenticated
assert context.ncfa_cookie is None
assert "anonymous_" in context.user_id
assert "User-" in context.username
def test_user_context_with_session(self):
"""Test user context with a GeoGuessr session."""
session = UserSession(
ncfa_cookie="test_cookie",
user_id="user123",
username="testuser",
email="test@example.com",
expires_at=datetime.now(UTC) + timedelta(days=1),
)
context = UserContext(api_key="test_key_123", session=session)
assert context.api_key == "test_key_123"
assert context.session == session
assert context.is_authenticated
assert context.ncfa_cookie == "test_cookie"
assert context.user_id == "user123"
assert context.username == "testuser"
def test_user_context_with_expired_session(self):
"""Test user context with an expired session."""
session = UserSession(
ncfa_cookie="test_cookie",
user_id="user123",
username="testuser",
email="test@example.com",
expires_at=datetime.now(UTC) - timedelta(days=1), # Expired
)
context = UserContext(api_key="test_key_123", session=session)
# Session is present but not valid
assert context.session == session
assert not context.is_authenticated # Expired session = not authenticated
def test_user_context_repr(self):
"""Test string representation of user context."""
context = UserContext(api_key="test_key_123")
repr_str = repr(context)
assert "UserContext" in repr_str
assert "not authenticated" in repr_str
session = UserSession(
ncfa_cookie="test_cookie",
user_id="user123",
username="testuser",
email="test@example.com",
)
context_with_session = UserContext(api_key="test_key_123", session=session)
repr_with_session = repr(context_with_session)
assert "authenticated" in repr_with_session
assert "user123" in repr_with_session
def test_user_context_consistent_ids(self):
"""Test that user IDs are consistent for the same API key."""
context1 = UserContext(api_key="same_key")
context2 = UserContext(api_key="same_key")
# Same API key should produce same anonymous user ID
assert context1.user_id == context2.user_id
assert context1.username == context2.username
def test_user_context_different_ids_for_different_keys(self):
"""Test that different API keys produce different anonymous user IDs."""
context1 = UserContext(api_key="key1")
context2 = UserContext(api_key="key2")
# Different API keys should produce different anonymous user IDs
assert context1.user_id != context2.user_id
assert context1.username != context2.username