diff --git a/tests/test_compat.py b/tests/test_compat.py index 0eccabd7f..43c686489 100644 --- a/tests/test_compat.py +++ b/tests/test_compat.py @@ -88,25 +88,41 @@ def test_propagates_pydantic2_model_config(): def __bool__(self): return False + class EmbeddedModel(BaseModel): + model_config = ConfigDict(arbitrary_types_allowed=True) + value: Union[str, Missing] = Missing() + class Model(BaseModel): model_config = ConfigDict( arbitrary_types_allowed=True, ) value: Union[str, Missing] = Missing() + embedded_model: EmbeddedModel = EmbeddedModel() @app.post("/") - def foo(req: Model) -> Union[str, None]: - return req.value or None + def foo(req: Model) -> Dict[str, Union[str, None]]: + return { + "value": req.value or None, + "embedded_value": req.embedded_model.value or None, + } client = TestClient(app) response = client.post("/", json={}) assert response.status_code == 200, response.text - assert response.json() is None + assert response.json() == { + "value": None, + "embedded_value": None, + } - response2 = client.post("/", json={"value": "foo"}) + response2 = client.post( + "/", json={"value": "foo", "embedded_model": {"value": "bar"}} + ) assert response2.status_code == 200, response2.text - assert response2.json() == "foo" + assert response2.json() == { + "value": "foo", + "embedded_value": "bar", + } def test_is_bytes_sequence_annotation_union():