[TOC]
This is a simple test_client_class for flask that I wrote to make the rest APIs created with openapi-python-client work with the flask.test_client()s when one is writing unittests
It is a bit hacky, but it is also only meant to be used for unittests.
In the example I am using OpenAPI (flask_openapi3), because it creates an endpoint with a json-file there can be used by openapi_python_client to create the rest-api which is used to call the flask application through the test client.
import json import flask from pydantic import BaseModel, Field from flask_openapi3 import OpenAPI app = OpenAPI(__name__) class SumResponse(BaseModel): the_sum: int = Field(..., description="sum of 2 numbers") class NumbersRequest(BaseModel): no_1: int = Field(..., description="1st number") no_2: int = Field(..., description="2nd number") @app.post(rule="/multiply-2-numbers", responses={"200": SumResponse}) def multiply_2_numbers(body: NumbersRequest): resp = flask.Response(json.dumps({"the_sum": body.no_1 * body.no_2})) resp.headers.set('Content-Type', 'application/json') resp.status_code = 200 return resp import unittest class Testing(unittest.TestCase): def test_10_generate_rest_lib(self): from pathlib import Path from openapi_python_client import GeneratorData, Config, Project, MetaType config = Config() with app.test_client() as client: resp = client.get("/openapi/openapi.json") openapi = GeneratorData.from_dict(data=resp.json, config=config) path = Path(__file__).parent.joinpath("test_rest_api") path.mkdir(exist_ok=True) project = Project(openapi=openapi, meta=MetaType.NONE, config=config) project.package_dir = path project.project_dir = path project.update() def test_20_generate_rest_lib(self): from test_rest_api.api.default.multiply_2_numbers_multiply_2_numbers_post import ( sync_detailed as rest_api_multiply_2_numbers) from test_rest_api.models.numbers_request import ( NumbersRequest as RestApiNumbersRequest) from flask_httpx_request_converted_to_flask_test_client_request import ConvertHttpx2FlaskTestClient app.test_client_class = ConvertHttpx2FlaskTestClient with app.test_client() as client: resp = rest_api_multiply_2_numbers(client=client, json_body=RestApiNumbersRequest(no_1=42, no_2=1337)) assert 200 == resp.status_code result = resp.parsed assert 56154 == result.the_sum if __name__ == '__main__': ts = unittest.TestSuite() ts.addTests([ Testing.test_10_generate_rest_lib, Testing.test_20_generate_rest_lib], ) ttr = unittest.TextTestRunner(verbosity=2) ttr.run(ts)