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() # Mocking request.url.query request.url.query = "a" * 2001 with pytest.raises(HTTPException) as excinfo: await middleware.dispatch(request, AsyncMock()) assert excinfo.value.status_code == 422 assert "Invalid request parameters" in excinfo.value.detail @pytest.mark.asyncio async def test_request_validation_middleware_too_many_params(): middleware = RequestValidationMiddleware(app=MagicMock()) request = MagicMock() request.url.query = "a=1" # Mocking request.query_params.multi_items() 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 == 422 assert "Invalid request parameters" in excinfo.value.detail @pytest.mark.asyncio async def test_request_validation_middleware_pagination_logic(): middleware = RequestValidationMiddleware(app=MagicMock()) request = MagicMock() request.url.query = "size=105" request.query_params.multi_items.return_value = [("size", "105")] request.headers = {} with pytest.raises(HTTPException) as excinfo: await middleware.dispatch(request, AsyncMock()) assert excinfo.value.status_code == 422 assert "Invalid request parameters" in excinfo.value.detail request.query_params.multi_items.return_value = [("size", "7")] with pytest.raises(HTTPException) as excinfo: await middleware.dispatch(request, AsyncMock()) assert excinfo.value.status_code == 422 assert "Invalid request parameters" in excinfo.value.detail