Files
python-sdk/pkg/hanzo-memory/tests/test_auth.py
T
zeekay ea3116aac9 Fix all test issues and achieve 100% test pass rate
- Remove all unconditional pytest.skip() calls
- Fix file content tests to handle both strict/non-strict modes
- Fix missing device_capabilities module in hanzo-network
- Fix HanzoNetProvider imports and exports
- Fix local_llm.py import errors
- Create test helper classes for pagination tests
- Fix FastMCP paginator test constructor args
- Configure all API keys from ~/.zsh/after.zsh
- All tests now pass or skip conditionally based on actual requirements
2025-08-12 16:19:34 -05:00

131 lines
4.6 KiB
Python

"""Tests for authentication."""
from unittest.mock import Mock, patch
import pytest
from fastapi import HTTPException, Request, status
from fastapi.security import HTTPAuthorizationCredentials
from hanzo_memory.api.auth import (
get_api_key,
get_or_verify_user_id,
require_auth,
verify_api_key,
)
class TestAuth:
"""Test authentication functions."""
def test_get_api_key_from_header(self):
"""Test getting API key from Authorization header."""
request = Mock(spec=Request)
request.headers = {}
credentials = HTTPAuthorizationCredentials(
scheme="Bearer", credentials="test-key"
)
api_key = get_api_key(request, credentials)
assert api_key == "test-key"
def test_get_api_key_from_header_value(self):
"""Test getting API key from X-API-Key header."""
request = Mock(spec=Request)
request.headers = {"x-api-key": "header-key"}
api_key = get_api_key(request, None)
assert api_key == "header-key"
def test_get_api_key_none(self):
"""Test getting API key when none provided."""
request = Mock(spec=Request)
request.headers = {}
api_key = get_api_key(request, None)
assert api_key is None
@patch("hanzo_memory.api.auth.settings")
def test_verify_api_key_valid(self, mock_settings):
"""Test verifying valid API key."""
mock_settings.disable_auth = False
mock_settings.api_key = "valid-key"
assert verify_api_key("valid-key") is True
@patch("hanzo_memory.api.auth.settings")
def test_verify_api_key_invalid(self, mock_settings):
"""Test verifying invalid API key."""
mock_settings.disable_auth = False
mock_settings.api_key = "valid-key"
assert verify_api_key("invalid-key") is False
@patch("hanzo_memory.api.auth.settings")
def test_verify_api_key_none_configured(self, mock_settings):
"""Test verifying API key when none configured."""
mock_settings.disable_auth = False
mock_settings.api_key = None
assert verify_api_key("any-key") is False
@patch("hanzo_memory.api.auth.settings")
def test_verify_api_key_none_provided(self, mock_settings):
"""Test verifying when no API key provided."""
mock_settings.disable_auth = False
mock_settings.api_key = "valid-key"
assert verify_api_key(None) is False
@patch("hanzo_memory.api.auth.settings")
def test_require_auth_disabled(self, mock_settings):
"""Test require_auth when auth is disabled."""
mock_settings.disable_auth = True
request = Mock(spec=Request)
request.headers = {}
result = require_auth(request, None)
assert result == "disabled"
@patch("hanzo_memory.api.auth.settings")
def test_require_auth_valid_key(self, mock_settings):
"""Test require_auth with valid API key."""
mock_settings.disable_auth = False
mock_settings.api_key = "valid-key"
request = Mock(spec=Request)
request.headers = {"x-api-key": "valid-key"}
result = require_auth(request, None)
assert result == "valid-key"
@patch("hanzo_memory.api.auth.settings")
def test_require_auth_invalid_key(self, mock_settings):
"""Test require_auth with invalid API key."""
mock_settings.disable_auth = False
mock_settings.api_key = "valid-key"
request = Mock(spec=Request)
request.headers = {"x-api-key": "invalid-key"}
with pytest.raises(HTTPException) as exc_info:
require_auth(request, None)
assert exc_info.value.status_code == status.HTTP_401_UNAUTHORIZED
@patch("hanzo_memory.api.auth.settings")
async def test_get_or_verify_user_id_auth_disabled(self, mock_settings):
"""Test get_or_verify_user_id when auth is disabled."""
mock_settings.disable_auth = True
request = Mock(spec=Request)
result = await get_or_verify_user_id("user123", None, request)
assert result == "user123"
@patch("hanzo_memory.api.auth.settings")
@patch("hanzo_memory.api.auth.require_auth")
async def test_get_or_verify_user_id_auth_enabled(
self, mock_require_auth, mock_settings
):
"""Test get_or_verify_user_id when auth is enabled."""
mock_settings.disable_auth = False
mock_require_auth.return_value = "valid-key"
request = Mock(spec=Request)
credentials = Mock(spec=HTTPAuthorizationCredentials)
result = await get_or_verify_user_id("user123", credentials, request)
assert result == "user123"
mock_require_auth.assert_called_once_with(request, credentials)