import pytest from unittest.mock import AsyncMock, MagicMock from fastapi import HTTPException from src.middleware import RequestValidationMiddleware @pytest.mark.asyncio async def test_request_validation_middleware_query_length(): middleware = RequestValidationMiddleware(app=MagicMock()) request = MagicMock() request.url.query = "a" * 2001 with pytest.raises(HTTPException) as excinfo: await middleware.dispatch(request, AsyncMock()) assert excinfo.value.status_code == 414 @pytest.mark.asyncio async def test_request_validation_middleware_too_many_params(): middleware = RequestValidationMiddleware(app=MagicMock()) request = MagicMock() request.url.query = "a=1" request.query_params.multi_items.return_value = [("param", "val")] * 51 with pytest.raises(HTTPException) as excinfo: await middleware.dispatch(request, AsyncMock()) assert excinfo.value.status_code == 400 assert "Too many query parameters" in excinfo.value.detail @pytest.mark.asyncio async def test_request_validation_middleware_xss_detection(): middleware = RequestValidationMiddleware(app=MagicMock()) request = MagicMock() request.url.query = "q=