import json from unittest import mock import pytest from fastapi.exceptions import RequestValidationError from pydantic.error_wrappers import ErrorWrapper from pydantic.errors import NotNoneError from starlette import status from starlette.requests import Request from service.api.exception_handlers import ( exception_handler, validation_exception_handler, ) pytestmark = pytest.mark.anyio async def test_validation_exception_handler(): request_mock = mock.Mock(spec=Request) response = await validation_exception_handler( request_mock, RequestValidationError(errors=[ErrorWrapper(exc=NotNoneError(), loc="name")]), ) assert response.status_code == status.HTTP_422_UNPROCESSABLE_ENTITY assert json.loads(response.body) == { "error": "name - value is not None", "type": "RequestValidationError", "info": None, } async def test_runtime_error_handler(): request_mock = mock.Mock(spec=Request) response = await exception_handler(request_mock, RuntimeError("some error")) assert response.status_code == status.HTTP_422_UNPROCESSABLE_ENTITY assert json.loads(response.body) == { "error": "some error", "type": "RuntimeError", "info": None, }