mirror of https://github.com/tiangolo/fastapi.git
✅ Simplify tests for `validate_response_recursive` (#13507)
Co-authored-by: Valentyn Druzhynin <v.druzhynin@zakaz.global>
This commit is contained in:
parent
4e4715b131
commit
da4605b039
|
|
@ -1,6 +1,7 @@
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from fastapi import FastAPI
|
from fastapi import FastAPI
|
||||||
|
from fastapi._compat import PYDANTIC_V2
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
app = FastAPI()
|
app = FastAPI()
|
||||||
|
|
@ -11,9 +12,6 @@ class RecursiveItem(BaseModel):
|
||||||
name: str
|
name: str
|
||||||
|
|
||||||
|
|
||||||
RecursiveItem.update_forward_refs()
|
|
||||||
|
|
||||||
|
|
||||||
class RecursiveSubitemInSubmodel(BaseModel):
|
class RecursiveSubitemInSubmodel(BaseModel):
|
||||||
sub_items2: List["RecursiveItemViaSubmodel"] = []
|
sub_items2: List["RecursiveItemViaSubmodel"] = []
|
||||||
name: str
|
name: str
|
||||||
|
|
@ -24,7 +22,13 @@ class RecursiveItemViaSubmodel(BaseModel):
|
||||||
name: str
|
name: str
|
||||||
|
|
||||||
|
|
||||||
RecursiveSubitemInSubmodel.update_forward_refs()
|
if PYDANTIC_V2:
|
||||||
|
RecursiveItem.model_rebuild()
|
||||||
|
RecursiveSubitemInSubmodel.model_rebuild()
|
||||||
|
RecursiveItemViaSubmodel.model_rebuild()
|
||||||
|
else:
|
||||||
|
RecursiveItem.update_forward_refs()
|
||||||
|
RecursiveSubitemInSubmodel.update_forward_refs()
|
||||||
|
|
||||||
|
|
||||||
@app.get("/items/recursive", response_model=RecursiveItem)
|
@app.get("/items/recursive", response_model=RecursiveItem)
|
||||||
|
|
@ -1,51 +0,0 @@
|
||||||
from typing import List
|
|
||||||
|
|
||||||
from fastapi import FastAPI
|
|
||||||
from pydantic import BaseModel
|
|
||||||
|
|
||||||
app = FastAPI()
|
|
||||||
|
|
||||||
|
|
||||||
class RecursiveItem(BaseModel):
|
|
||||||
sub_items: List["RecursiveItem"] = []
|
|
||||||
name: str
|
|
||||||
|
|
||||||
|
|
||||||
RecursiveItem.model_rebuild()
|
|
||||||
|
|
||||||
|
|
||||||
class RecursiveSubitemInSubmodel(BaseModel):
|
|
||||||
sub_items2: List["RecursiveItemViaSubmodel"] = []
|
|
||||||
name: str
|
|
||||||
|
|
||||||
|
|
||||||
class RecursiveItemViaSubmodel(BaseModel):
|
|
||||||
sub_items1: List[RecursiveSubitemInSubmodel] = []
|
|
||||||
name: str
|
|
||||||
|
|
||||||
|
|
||||||
RecursiveSubitemInSubmodel.model_rebuild()
|
|
||||||
RecursiveItemViaSubmodel.model_rebuild()
|
|
||||||
|
|
||||||
|
|
||||||
@app.get("/items/recursive", response_model=RecursiveItem)
|
|
||||||
def get_recursive():
|
|
||||||
return {"name": "item", "sub_items": [{"name": "subitem", "sub_items": []}]}
|
|
||||||
|
|
||||||
|
|
||||||
@app.get("/items/recursive-submodel", response_model=RecursiveItemViaSubmodel)
|
|
||||||
def get_recursive_submodel():
|
|
||||||
return {
|
|
||||||
"name": "item",
|
|
||||||
"sub_items1": [
|
|
||||||
{
|
|
||||||
"name": "subitem",
|
|
||||||
"sub_items2": [
|
|
||||||
{
|
|
||||||
"name": "subsubitem",
|
|
||||||
"sub_items1": [{"name": "subsubsubitem", "sub_items2": []}],
|
|
||||||
}
|
|
||||||
],
|
|
||||||
}
|
|
||||||
],
|
|
||||||
}
|
|
||||||
|
|
@ -1,12 +1,9 @@
|
||||||
from fastapi.testclient import TestClient
|
from fastapi.testclient import TestClient
|
||||||
|
|
||||||
from ..utils import needs_pydanticv1
|
from .app import app
|
||||||
|
|
||||||
|
|
||||||
@needs_pydanticv1
|
|
||||||
def test_recursive():
|
def test_recursive():
|
||||||
from .app_pv1 import app
|
|
||||||
|
|
||||||
client = TestClient(app)
|
client = TestClient(app)
|
||||||
response = client.get("/items/recursive")
|
response = client.get("/items/recursive")
|
||||||
assert response.status_code == 200, response.text
|
assert response.status_code == 200, response.text
|
||||||
|
|
@ -1,33 +0,0 @@
|
||||||
from fastapi.testclient import TestClient
|
|
||||||
|
|
||||||
from ..utils import needs_pydanticv2
|
|
||||||
|
|
||||||
|
|
||||||
@needs_pydanticv2
|
|
||||||
def test_recursive():
|
|
||||||
from .app_pv2 import app
|
|
||||||
|
|
||||||
client = TestClient(app)
|
|
||||||
response = client.get("/items/recursive")
|
|
||||||
assert response.status_code == 200, response.text
|
|
||||||
assert response.json() == {
|
|
||||||
"sub_items": [{"name": "subitem", "sub_items": []}],
|
|
||||||
"name": "item",
|
|
||||||
}
|
|
||||||
|
|
||||||
response = client.get("/items/recursive-submodel")
|
|
||||||
assert response.status_code == 200, response.text
|
|
||||||
assert response.json() == {
|
|
||||||
"name": "item",
|
|
||||||
"sub_items1": [
|
|
||||||
{
|
|
||||||
"name": "subitem",
|
|
||||||
"sub_items2": [
|
|
||||||
{
|
|
||||||
"name": "subsubitem",
|
|
||||||
"sub_items1": [{"name": "subsubsubitem", "sub_items2": []}],
|
|
||||||
}
|
|
||||||
],
|
|
||||||
}
|
|
||||||
],
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue