import asyncio
import inspect
+import json
from typing import Any, Callable, Dict, List, Optional, Sequence, Set, Type, Union
from fastapi import params
body_bytes = await request.body()
if body_bytes:
body = await request.json()
+ except json.JSONDecodeError as e:
+ raise RequestValidationError([ErrorWrapper(e, ("body", e.pos))], body=e.doc)
except Exception as e:
raise HTTPException(
status_code=400, detail="There was an error parsing the body"
+from unittest.mock import patch
+
import pytest
from fastapi.testclient import TestClient
def test_post_broken_body():
response = client.post("/items/", data={"name": "Foo", "price": 50.5})
- assert response.status_code == 400, response.text
+ assert response.status_code == 422, response.text
+ assert response.json() == {
+ "detail": [
+ {
+ "ctx": {
+ "colno": 1,
+ "doc": "name=Foo&price=50.5",
+ "lineno": 1,
+ "msg": "Expecting value",
+ "pos": 0,
+ },
+ "loc": ["body", 0],
+ "msg": "Expecting value: line 1 column 1 (char 0)",
+ "type": "value_error.jsondecode",
+ }
+ ]
+ }
+ with patch("json.loads", side_effect=Exception):
+ response = client.post("/items/", json={"test": "test2"})
+ assert response.status_code == 400, response.text
assert response.json() == {"detail": "There was an error parsing the body"}