test: cover request/response validation handlers for 100% coverage

This commit is contained in:
Abhimanyu Saharan
2026-02-12 15:37:40 +00:00
parent f329bc167a
commit 51716bc4e2

View File

@@ -4,6 +4,7 @@ from __future__ import annotations
import pytest import pytest
from fastapi import FastAPI, HTTPException from fastapi import FastAPI, HTTPException
from fastapi.exceptions import RequestValidationError, ResponseValidationError
from fastapi.testclient import TestClient from fastapi.testclient import TestClient
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
from starlette.requests import Request from starlette.requests import Request
@@ -16,6 +17,8 @@ from app.core.error_handling import (
_http_exception_exception_handler, _http_exception_exception_handler,
_request_validation_exception_handler, _request_validation_exception_handler,
_response_validation_exception_handler, _response_validation_exception_handler,
_request_validation_handler,
_response_validation_handler,
install_error_handling, install_error_handling,
) )
@@ -203,3 +206,47 @@ async def test_http_exception_wrapper_rejects_wrong_exception() -> None:
req = Request({"type": "http", "headers": [], "state": {}}) req = Request({"type": "http", "headers": [], "state": {}})
with pytest.raises(TypeError, match="Expected StarletteHTTPException"): with pytest.raises(TypeError, match="Expected StarletteHTTPException"):
await _http_exception_exception_handler(req, Exception("x")) await _http_exception_exception_handler(req, Exception("x"))
@pytest.mark.asyncio
async def test_request_validation_handler_includes_request_id() -> None:
req = Request({"type": "http", "headers": [], "state": {"request_id": "req-1"}})
exc = RequestValidationError(
[
{
"loc": ("query", "limit"),
"msg": "value is not a valid integer",
"type": "type_error.integer",
}
]
)
resp = await _request_validation_handler(req, exc)
assert resp.status_code == 422
assert resp.body
@pytest.mark.asyncio
async def test_response_validation_handler_includes_request_id() -> None:
req = Request(
{
"type": "http",
"method": "GET",
"path": "/x",
"headers": [],
"state": {"request_id": "req-2"},
}
)
exc = ResponseValidationError(
[
{
"loc": ("response", "name"),
"msg": "field required",
"type": "value_error.missing",
}
]
)
resp = await _response_validation_handler(req, exc)
assert resp.status_code == 500
assert resp.body