1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
# -*- coding: utf-8 -*-
# @Author : llc
# @Time : 2023/6/30 10:12
import pytest
from pydantic import BaseModel, Field
from flask_openapi3 import FileStorage, OpenAPI
app = OpenAPI(__name__)
app.config["TESTING"] = True
class UploadFilesForm(BaseModel):
file: FileStorage
str_list: list[str]
model_config = dict(
openapi_extra={
# "example": {"a": 123},
"examples": {
"Example 01": {
"summary": "An example",
"value": {"file": "Example-01.jpg", "str_list": ["a", "b", "c"]},
},
"Example 02": {"summary": "Another example", "value": {"str_list": ["1", "2", "3"]}},
}
}
)
class BookBody(BaseModel):
age: int
author: str
model_config = dict(
openapi_extra={
"description": "This is post RequestBody",
"example": {"age": 12, "author": "author1"},
"examples": {
"example1": {
"summary": "example summary1",
"description": "example description1",
"value": {"age": 24, "author": "author2"},
},
"example2": {
"summary": "example summary2",
"description": "example description2",
"value": {"age": 48, "author": "author3"},
},
},
}
)
class MessageResponse(BaseModel):
message: str = Field(..., description="The message")
metadata: dict[str, str] = Field(alias="metadata_")
model_config = dict(
by_alias=False,
openapi_extra={
# "example": {"message": "aaa"},
"examples": {
"example1": {"summary": "example1 summary", "value": {"message": "bbb"}},
"example2": {"summary": "example2 summary", "value": {"message": "ccc"}},
}
},
)
@app.post("/form")
def api_form(form: UploadFilesForm):
print(form) # pragma: no cover
@app.post("/body", responses={"200": MessageResponse})
def api_error_json(body: BookBody):
print(body) # pragma: no cover
@pytest.fixture
def client():
client = app.test_client()
return client
def test_openapi(client):
resp = client.get("/openapi/openapi.json")
_json = resp.json
assert resp.status_code == 200
assert _json["paths"]["/form"]["post"]["requestBody"]["content"]["multipart/form-data"]["examples"] == {
"Example 01": {"summary": "An example", "value": {"file": "Example-01.jpg", "str_list": ["a", "b", "c"]}},
"Example 02": {"summary": "Another example", "value": {"str_list": ["1", "2", "3"]}},
}
assert _json["paths"]["/body"]["post"]["requestBody"]["description"] == "This is post RequestBody"
assert _json["paths"]["/body"]["post"]["requestBody"]["content"]["application/json"]["example"] == {
"age": 12,
"author": "author1",
}
assert _json["paths"]["/body"]["post"]["responses"]["200"]["content"]["application/json"]["examples"] == {
"example1": {"summary": "example1 summary", "value": {"message": "bbb"}},
"example2": {"summary": "example2 summary", "value": {"message": "ccc"}},
}
assert _json["components"]["schemas"]["MessageResponse"]["properties"].get("metadata") is not None
|