multiutility-server / tests /test_security.py
abhisheksan's picture
Add embeddings API, caching, and Docker revamp
781f7b0
"""Tests for security and authentication."""
from unittest import mock
import pytest
from fastapi.testclient import TestClient
from app.core.security import verify_api_key
from app.core.exceptions import AuthenticationError
class TestAPIKeySecurity:
"""Test API key security functions."""
def test_verify_api_key_valid(self, api_key):
"""Test verifying a valid API key."""
assert verify_api_key(api_key) is True
def test_verify_api_key_invalid(self, invalid_api_key):
"""Test verifying an invalid API key."""
with pytest.raises(AuthenticationError):
verify_api_key(invalid_api_key)
def test_verify_api_key_empty(self):
"""Test verifying empty API key."""
with pytest.raises(AuthenticationError):
verify_api_key("")
class TestAPIKeyMiddleware:
"""Test API key middleware functionality."""
def test_middleware_allows_health_endpoint(self, client):
"""Test that middleware allows access to health endpoint without API key."""
response = client.get("/health")
assert response.status_code == 200
def test_middleware_allows_docs_endpoint(self, client):
"""Test that middleware allows access to docs endpoint without API key."""
response = client.get("/docs")
assert response.status_code == 200
def test_middleware_allows_root_endpoint(self, client):
"""Test that middleware allows access to root endpoint without API key."""
response = client.get("/")
assert response.status_code == 200
def test_middleware_blocks_api_without_key(self, client):
"""Test that middleware blocks API access without API key."""
response = client.post(
"/api/v1/subtitles/extract",
json={"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "lang": "en"}
)
assert response.status_code == 401
data = response.json()
assert data["status"] == "error"
assert "Missing API key" in data["message"]
def test_middleware_blocks_api_with_invalid_key(self, client, invalid_api_key):
"""Test that middleware blocks API access with invalid API key."""
response = client.post(
"/api/v1/subtitles/extract",
json={"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "lang": "en"},
headers={"x-api-key": invalid_api_key}
)
assert response.status_code == 401
data = response.json()
assert data["status"] == "error"
assert "Invalid API key" in data["message"]
def test_middleware_allows_api_with_valid_key(self, client, api_key):
"""Test that middleware allows API access with valid API key."""
with mock.patch('app.apis.subtitles.service.subtitle_service.extract_subtitles') as mock_extract:
mock_extract.return_value = ("dQw4w9WgXcQ", ["Test subtitle"])
response = client.post(
"/api/v1/subtitles/extract",
json={"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "lang": "en"},
headers={"x-api-key": api_key}
)
assert response.status_code == 200