3 changed files with 131 additions and 42 deletions
@ -0,0 +1,80 @@ |
|||||
|
from typing import Annotated |
||||
|
|
||||
|
import pytest |
||||
|
from fastapi import Body, FastAPI |
||||
|
from fastapi.exceptions import ResponseValidationError |
||||
|
from fastapi.testclient import TestClient |
||||
|
from pydantic import v1 |
||||
|
|
||||
|
|
||||
|
class Item(v1.BaseModel): |
||||
|
name: str |
||||
|
description: str | None = None |
||||
|
price: float |
||||
|
tax: float | None = None |
||||
|
tags: list = [] |
||||
|
|
||||
|
|
||||
|
class Model(v1.BaseModel): |
||||
|
name: str |
||||
|
|
||||
|
|
||||
|
app = FastAPI() |
||||
|
|
||||
|
|
||||
|
@app.post("/request_body") |
||||
|
async def request_body(body: Annotated[Item, Body()]): |
||||
|
return body |
||||
|
|
||||
|
|
||||
|
@app.get("/response_model", response_model=Model) |
||||
|
async def response_model(): |
||||
|
return Model(name="valid_model") |
||||
|
|
||||
|
|
||||
|
@app.get("/response_model__invalid", response_model=Model) |
||||
|
async def response_model__invalid(): |
||||
|
return 1 |
||||
|
|
||||
|
|
||||
|
@app.get("/response_model_list", response_model=list[Model]) |
||||
|
async def response_model_list(): |
||||
|
return [Model(name="valid_model")] |
||||
|
|
||||
|
|
||||
|
@app.get("/response_model_list__invalid", response_model=list[Model]) |
||||
|
async def response_model_list__invalid(): |
||||
|
return [1] |
||||
|
|
||||
|
|
||||
|
client = TestClient(app) |
||||
|
|
||||
|
|
||||
|
class TestResponseModel: |
||||
|
def test_simple__valid(self): |
||||
|
response = client.get("/response_model") |
||||
|
assert response.status_code == 200 |
||||
|
assert response.json() == {"name": "valid_model"} |
||||
|
|
||||
|
def test_simple__invalid(self): |
||||
|
with pytest.raises(ResponseValidationError): |
||||
|
client.get("/response_model__invalid") |
||||
|
|
||||
|
def test_list__valid(self): |
||||
|
response = client.get("/response_model_list") |
||||
|
assert response.status_code == 200 |
||||
|
assert response.json() == [{"name": "valid_model"}] |
||||
|
|
||||
|
def test_list__invalid(self): |
||||
|
with pytest.raises(ResponseValidationError): |
||||
|
client.get("/response_model_list__invalid") |
||||
|
|
||||
|
|
||||
|
class TestRequestBody: |
||||
|
def test_model__valid(self): |
||||
|
response = client.post("/request_body", json={"name": "myname", "price": 1.0}) |
||||
|
assert response.status_code == 200, response.text |
||||
|
|
||||
|
def test_model__invalid(self): |
||||
|
response = client.post("/request_body", json={"name": "myname"}) |
||||
|
assert response.status_code == 422, response.text |
@ -1,25 +0,0 @@ |
|||||
from typing import List |
|
||||
|
|
||||
from fastapi import FastAPI |
|
||||
from fastapi.testclient import TestClient |
|
||||
from pydantic import BaseModel, v1 |
|
||||
|
|
||||
|
|
||||
class Model(v1.BaseModel): |
|
||||
name: str |
|
||||
|
|
||||
|
|
||||
app = FastAPI() |
|
||||
|
|
||||
|
|
||||
@app.get("/valid", response_model=Model) |
|
||||
def valid1(): |
|
||||
pass |
|
||||
|
|
||||
|
|
||||
client = TestClient(app) |
|
||||
|
|
||||
|
|
||||
def test_path_operations(): |
|
||||
response = client.get("/valid") |
|
||||
assert response.status_code == 200, response.text |
|
Loading…
Reference in new issue