]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
✅ Simplify tests for `query_params_str_validations` (#13218)
authoralv2017 <v.alishauskaite@gmail.com>
Sat, 15 Feb 2025 16:31:57 +0000 (18:31 +0200)
committerGitHub <noreply@github.com>
Sat, 15 Feb 2025 16:31:57 +0000 (17:31 +0100)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Alejandra <90076947+alejsdev@users.noreply.github.com>
23 files changed:
tests/test_tutorial/test_query_params_str_validations/test_tutorial010.py
tests/test_tutorial/test_query_params_str_validations/test_tutorial010_an.py [deleted file]
tests/test_tutorial/test_query_params_str_validations/test_tutorial010_an_py310.py [deleted file]
tests/test_tutorial/test_query_params_str_validations/test_tutorial010_an_py39.py [deleted file]
tests/test_tutorial/test_query_params_str_validations/test_tutorial010_py310.py [deleted file]
tests/test_tutorial/test_query_params_str_validations/test_tutorial011.py
tests/test_tutorial/test_query_params_str_validations/test_tutorial011_an.py [deleted file]
tests/test_tutorial/test_query_params_str_validations/test_tutorial011_an_py310.py [deleted file]
tests/test_tutorial/test_query_params_str_validations/test_tutorial011_an_py39.py [deleted file]
tests/test_tutorial/test_query_params_str_validations/test_tutorial011_py310.py [deleted file]
tests/test_tutorial/test_query_params_str_validations/test_tutorial011_py39.py [deleted file]
tests/test_tutorial/test_query_params_str_validations/test_tutorial012.py
tests/test_tutorial/test_query_params_str_validations/test_tutorial012_an.py [deleted file]
tests/test_tutorial/test_query_params_str_validations/test_tutorial012_an_py39.py [deleted file]
tests/test_tutorial/test_query_params_str_validations/test_tutorial012_py39.py [deleted file]
tests/test_tutorial/test_query_params_str_validations/test_tutorial013.py
tests/test_tutorial/test_query_params_str_validations/test_tutorial013_an.py [deleted file]
tests/test_tutorial/test_query_params_str_validations/test_tutorial013_an_py39.py [deleted file]
tests/test_tutorial/test_query_params_str_validations/test_tutorial014.py
tests/test_tutorial/test_query_params_str_validations/test_tutorial014_an.py [deleted file]
tests/test_tutorial/test_query_params_str_validations/test_tutorial014_an_py310.py [deleted file]
tests/test_tutorial/test_query_params_str_validations/test_tutorial014_an_py39.py [deleted file]
tests/test_tutorial/test_query_params_str_validations/test_tutorial014_py310.py [deleted file]

index 4f52d6ff7542a6c5332103fd7dc12d9bdbf42e45..e08e169633872823157aea84122761981559a23f 100644 (file)
@@ -1,14 +1,29 @@
+import importlib
+
 import pytest
 from dirty_equals import IsDict
 from fastapi._compat import PYDANTIC_VERSION_MINOR_TUPLE
 from fastapi.testclient import TestClient
 
+from ...utils import needs_py39, needs_py310
+
 
-@pytest.fixture(name="client")
-def get_client():
-    from docs_src.query_params_str_validations.tutorial010 import app
+@pytest.fixture(
+    name="client",
+    params=[
+        "tutorial010",
+        pytest.param("tutorial010_py310", marks=needs_py310),
+        "tutorial010_an",
+        pytest.param("tutorial010_an_py39", marks=needs_py39),
+        pytest.param("tutorial010_an_py310", marks=needs_py310),
+    ],
+)
+def get_client(request: pytest.FixtureRequest):
+    mod = importlib.import_module(
+        f"docs_src.query_params_str_validations.{request.param}"
+    )
 
-    client = TestClient(app)
+    client = TestClient(mod.app)
     return client
 
 
diff --git a/tests/test_tutorial/test_query_params_str_validations/test_tutorial010_an.py b/tests/test_tutorial/test_query_params_str_validations/test_tutorial010_an.py
deleted file mode 100644 (file)
index 5daca1e..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-import pytest
-from dirty_equals import IsDict
-from fastapi._compat import PYDANTIC_VERSION_MINOR_TUPLE
-from fastapi.testclient import TestClient
-
-
-@pytest.fixture(name="client")
-def get_client():
-    from docs_src.query_params_str_validations.tutorial010_an import app
-
-    client = TestClient(app)
-    return client
-
-
-def test_query_params_str_validations_no_query(client: TestClient):
-    response = client.get("/items/")
-    assert response.status_code == 200
-    assert response.json() == {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
-
-
-def test_query_params_str_validations_item_query_fixedquery(client: TestClient):
-    response = client.get("/items/", params={"item-query": "fixedquery"})
-    assert response.status_code == 200
-    assert response.json() == {
-        "items": [{"item_id": "Foo"}, {"item_id": "Bar"}],
-        "q": "fixedquery",
-    }
-
-
-def test_query_params_str_validations_q_fixedquery(client: TestClient):
-    response = client.get("/items/", params={"q": "fixedquery"})
-    assert response.status_code == 200
-    assert response.json() == {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
-
-
-def test_query_params_str_validations_item_query_nonregexquery(client: TestClient):
-    response = client.get("/items/", params={"item-query": "nonregexquery"})
-    assert response.status_code == 422
-    assert response.json() == IsDict(
-        {
-            "detail": [
-                {
-                    "type": "string_pattern_mismatch",
-                    "loc": ["query", "item-query"],
-                    "msg": "String should match pattern '^fixedquery$'",
-                    "input": "nonregexquery",
-                    "ctx": {"pattern": "^fixedquery$"},
-                }
-            ]
-        }
-    ) | IsDict(
-        # TODO: remove when deprecating Pydantic v1
-        {
-            "detail": [
-                {
-                    "ctx": {"pattern": "^fixedquery$"},
-                    "loc": ["query", "item-query"],
-                    "msg": 'string does not match regex "^fixedquery$"',
-                    "type": "value_error.str.regex",
-                }
-            ]
-        }
-    )
-
-
-def test_openapi_schema(client: TestClient):
-    response = client.get("/openapi.json")
-    assert response.status_code == 200, response.text
-    assert response.json() == {
-        "openapi": "3.1.0",
-        "info": {"title": "FastAPI", "version": "0.1.0"},
-        "paths": {
-            "/items/": {
-                "get": {
-                    "responses": {
-                        "200": {
-                            "description": "Successful Response",
-                            "content": {"application/json": {"schema": {}}},
-                        },
-                        "422": {
-                            "description": "Validation Error",
-                            "content": {
-                                "application/json": {
-                                    "schema": {
-                                        "$ref": "#/components/schemas/HTTPValidationError"
-                                    }
-                                }
-                            },
-                        },
-                    },
-                    "summary": "Read Items",
-                    "operationId": "read_items_items__get",
-                    "parameters": [
-                        {
-                            "description": "Query string for the items to search in the database that have a good match",
-                            "required": False,
-                            "deprecated": True,
-                            "schema": IsDict(
-                                {
-                                    "anyOf": [
-                                        {
-                                            "type": "string",
-                                            "minLength": 3,
-                                            "maxLength": 50,
-                                            "pattern": "^fixedquery$",
-                                        },
-                                        {"type": "null"},
-                                    ],
-                                    "title": "Query string",
-                                    "description": "Query string for the items to search in the database that have a good match",
-                                    # See https://github.com/pydantic/pydantic/blob/80353c29a824c55dea4667b328ba8f329879ac9f/tests/test_fastapi.sh#L25-L34.
-                                    **(
-                                        {"deprecated": True}
-                                        if PYDANTIC_VERSION_MINOR_TUPLE >= (2, 10)
-                                        else {}
-                                    ),
-                                }
-                            )
-                            | IsDict(
-                                # TODO: remove when deprecating Pydantic v1
-                                {
-                                    "title": "Query string",
-                                    "maxLength": 50,
-                                    "minLength": 3,
-                                    "pattern": "^fixedquery$",
-                                    "type": "string",
-                                    "description": "Query string for the items to search in the database that have a good match",
-                                }
-                            ),
-                            "name": "item-query",
-                            "in": "query",
-                        }
-                    ],
-                }
-            }
-        },
-        "components": {
-            "schemas": {
-                "ValidationError": {
-                    "title": "ValidationError",
-                    "required": ["loc", "msg", "type"],
-                    "type": "object",
-                    "properties": {
-                        "loc": {
-                            "title": "Location",
-                            "type": "array",
-                            "items": {
-                                "anyOf": [{"type": "string"}, {"type": "integer"}]
-                            },
-                        },
-                        "msg": {"title": "Message", "type": "string"},
-                        "type": {"title": "Error Type", "type": "string"},
-                    },
-                },
-                "HTTPValidationError": {
-                    "title": "HTTPValidationError",
-                    "type": "object",
-                    "properties": {
-                        "detail": {
-                            "title": "Detail",
-                            "type": "array",
-                            "items": {"$ref": "#/components/schemas/ValidationError"},
-                        }
-                    },
-                },
-            }
-        },
-    }
diff --git a/tests/test_tutorial/test_query_params_str_validations/test_tutorial010_an_py310.py b/tests/test_tutorial/test_query_params_str_validations/test_tutorial010_an_py310.py
deleted file mode 100644 (file)
index 89da4d8..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-import pytest
-from dirty_equals import IsDict
-from fastapi._compat import PYDANTIC_VERSION_MINOR_TUPLE
-from fastapi.testclient import TestClient
-
-from ...utils import needs_py310
-
-
-@pytest.fixture(name="client")
-def get_client():
-    from docs_src.query_params_str_validations.tutorial010_an_py310 import app
-
-    client = TestClient(app)
-    return client
-
-
-@needs_py310
-def test_query_params_str_validations_no_query(client: TestClient):
-    response = client.get("/items/")
-    assert response.status_code == 200
-    assert response.json() == {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
-
-
-@needs_py310
-def test_query_params_str_validations_item_query_fixedquery(client: TestClient):
-    response = client.get("/items/", params={"item-query": "fixedquery"})
-    assert response.status_code == 200
-    assert response.json() == {
-        "items": [{"item_id": "Foo"}, {"item_id": "Bar"}],
-        "q": "fixedquery",
-    }
-
-
-@needs_py310
-def test_query_params_str_validations_q_fixedquery(client: TestClient):
-    response = client.get("/items/", params={"q": "fixedquery"})
-    assert response.status_code == 200
-    assert response.json() == {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
-
-
-@needs_py310
-def test_query_params_str_validations_item_query_nonregexquery(client: TestClient):
-    response = client.get("/items/", params={"item-query": "nonregexquery"})
-    assert response.status_code == 422
-    assert response.json() == IsDict(
-        {
-            "detail": [
-                {
-                    "type": "string_pattern_mismatch",
-                    "loc": ["query", "item-query"],
-                    "msg": "String should match pattern '^fixedquery$'",
-                    "input": "nonregexquery",
-                    "ctx": {"pattern": "^fixedquery$"},
-                }
-            ]
-        }
-    ) | IsDict(
-        # TODO: remove when deprecating Pydantic v1
-        {
-            "detail": [
-                {
-                    "ctx": {"pattern": "^fixedquery$"},
-                    "loc": ["query", "item-query"],
-                    "msg": 'string does not match regex "^fixedquery$"',
-                    "type": "value_error.str.regex",
-                }
-            ]
-        }
-    )
-
-
-@needs_py310
-def test_openapi_schema(client: TestClient):
-    response = client.get("/openapi.json")
-    assert response.status_code == 200, response.text
-    assert response.json() == {
-        "openapi": "3.1.0",
-        "info": {"title": "FastAPI", "version": "0.1.0"},
-        "paths": {
-            "/items/": {
-                "get": {
-                    "responses": {
-                        "200": {
-                            "description": "Successful Response",
-                            "content": {"application/json": {"schema": {}}},
-                        },
-                        "422": {
-                            "description": "Validation Error",
-                            "content": {
-                                "application/json": {
-                                    "schema": {
-                                        "$ref": "#/components/schemas/HTTPValidationError"
-                                    }
-                                }
-                            },
-                        },
-                    },
-                    "summary": "Read Items",
-                    "operationId": "read_items_items__get",
-                    "parameters": [
-                        {
-                            "description": "Query string for the items to search in the database that have a good match",
-                            "required": False,
-                            "deprecated": True,
-                            "schema": IsDict(
-                                {
-                                    "anyOf": [
-                                        {
-                                            "type": "string",
-                                            "minLength": 3,
-                                            "maxLength": 50,
-                                            "pattern": "^fixedquery$",
-                                        },
-                                        {"type": "null"},
-                                    ],
-                                    "title": "Query string",
-                                    "description": "Query string for the items to search in the database that have a good match",
-                                    # See https://github.com/pydantic/pydantic/blob/80353c29a824c55dea4667b328ba8f329879ac9f/tests/test_fastapi.sh#L25-L34.
-                                    **(
-                                        {"deprecated": True}
-                                        if PYDANTIC_VERSION_MINOR_TUPLE >= (2, 10)
-                                        else {}
-                                    ),
-                                }
-                            )
-                            | IsDict(
-                                # TODO: remove when deprecating Pydantic v1
-                                {
-                                    "title": "Query string",
-                                    "maxLength": 50,
-                                    "minLength": 3,
-                                    "pattern": "^fixedquery$",
-                                    "type": "string",
-                                    "description": "Query string for the items to search in the database that have a good match",
-                                }
-                            ),
-                            "name": "item-query",
-                            "in": "query",
-                        }
-                    ],
-                }
-            }
-        },
-        "components": {
-            "schemas": {
-                "ValidationError": {
-                    "title": "ValidationError",
-                    "required": ["loc", "msg", "type"],
-                    "type": "object",
-                    "properties": {
-                        "loc": {
-                            "title": "Location",
-                            "type": "array",
-                            "items": {
-                                "anyOf": [{"type": "string"}, {"type": "integer"}]
-                            },
-                        },
-                        "msg": {"title": "Message", "type": "string"},
-                        "type": {"title": "Error Type", "type": "string"},
-                    },
-                },
-                "HTTPValidationError": {
-                    "title": "HTTPValidationError",
-                    "type": "object",
-                    "properties": {
-                        "detail": {
-                            "title": "Detail",
-                            "type": "array",
-                            "items": {"$ref": "#/components/schemas/ValidationError"},
-                        }
-                    },
-                },
-            }
-        },
-    }
diff --git a/tests/test_tutorial/test_query_params_str_validations/test_tutorial010_an_py39.py b/tests/test_tutorial/test_query_params_str_validations/test_tutorial010_an_py39.py
deleted file mode 100644 (file)
index f5f692b..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-import pytest
-from dirty_equals import IsDict
-from fastapi._compat import PYDANTIC_VERSION_MINOR_TUPLE
-from fastapi.testclient import TestClient
-
-from ...utils import needs_py39
-
-
-@pytest.fixture(name="client")
-def get_client():
-    from docs_src.query_params_str_validations.tutorial010_an_py39 import app
-
-    client = TestClient(app)
-    return client
-
-
-@needs_py39
-def test_query_params_str_validations_no_query(client: TestClient):
-    response = client.get("/items/")
-    assert response.status_code == 200
-    assert response.json() == {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
-
-
-@needs_py39
-def test_query_params_str_validations_item_query_fixedquery(client: TestClient):
-    response = client.get("/items/", params={"item-query": "fixedquery"})
-    assert response.status_code == 200
-    assert response.json() == {
-        "items": [{"item_id": "Foo"}, {"item_id": "Bar"}],
-        "q": "fixedquery",
-    }
-
-
-@needs_py39
-def test_query_params_str_validations_q_fixedquery(client: TestClient):
-    response = client.get("/items/", params={"q": "fixedquery"})
-    assert response.status_code == 200
-    assert response.json() == {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
-
-
-@needs_py39
-def test_query_params_str_validations_item_query_nonregexquery(client: TestClient):
-    response = client.get("/items/", params={"item-query": "nonregexquery"})
-    assert response.status_code == 422
-    assert response.json() == IsDict(
-        {
-            "detail": [
-                {
-                    "type": "string_pattern_mismatch",
-                    "loc": ["query", "item-query"],
-                    "msg": "String should match pattern '^fixedquery$'",
-                    "input": "nonregexquery",
-                    "ctx": {"pattern": "^fixedquery$"},
-                }
-            ]
-        }
-    ) | IsDict(
-        # TODO: remove when deprecating Pydantic v1
-        {
-            "detail": [
-                {
-                    "ctx": {"pattern": "^fixedquery$"},
-                    "loc": ["query", "item-query"],
-                    "msg": 'string does not match regex "^fixedquery$"',
-                    "type": "value_error.str.regex",
-                }
-            ]
-        }
-    )
-
-
-@needs_py39
-def test_openapi_schema(client: TestClient):
-    response = client.get("/openapi.json")
-    assert response.status_code == 200, response.text
-    assert response.json() == {
-        "openapi": "3.1.0",
-        "info": {"title": "FastAPI", "version": "0.1.0"},
-        "paths": {
-            "/items/": {
-                "get": {
-                    "responses": {
-                        "200": {
-                            "description": "Successful Response",
-                            "content": {"application/json": {"schema": {}}},
-                        },
-                        "422": {
-                            "description": "Validation Error",
-                            "content": {
-                                "application/json": {
-                                    "schema": {
-                                        "$ref": "#/components/schemas/HTTPValidationError"
-                                    }
-                                }
-                            },
-                        },
-                    },
-                    "summary": "Read Items",
-                    "operationId": "read_items_items__get",
-                    "parameters": [
-                        {
-                            "description": "Query string for the items to search in the database that have a good match",
-                            "required": False,
-                            "deprecated": True,
-                            "schema": IsDict(
-                                {
-                                    "anyOf": [
-                                        {
-                                            "type": "string",
-                                            "minLength": 3,
-                                            "maxLength": 50,
-                                            "pattern": "^fixedquery$",
-                                        },
-                                        {"type": "null"},
-                                    ],
-                                    "title": "Query string",
-                                    "description": "Query string for the items to search in the database that have a good match",
-                                    # See https://github.com/pydantic/pydantic/blob/80353c29a824c55dea4667b328ba8f329879ac9f/tests/test_fastapi.sh#L25-L34.
-                                    **(
-                                        {"deprecated": True}
-                                        if PYDANTIC_VERSION_MINOR_TUPLE >= (2, 10)
-                                        else {}
-                                    ),
-                                }
-                            )
-                            | IsDict(
-                                # TODO: remove when deprecating Pydantic v1
-                                {
-                                    "title": "Query string",
-                                    "maxLength": 50,
-                                    "minLength": 3,
-                                    "pattern": "^fixedquery$",
-                                    "type": "string",
-                                    "description": "Query string for the items to search in the database that have a good match",
-                                }
-                            ),
-                            "name": "item-query",
-                            "in": "query",
-                        }
-                    ],
-                }
-            }
-        },
-        "components": {
-            "schemas": {
-                "ValidationError": {
-                    "title": "ValidationError",
-                    "required": ["loc", "msg", "type"],
-                    "type": "object",
-                    "properties": {
-                        "loc": {
-                            "title": "Location",
-                            "type": "array",
-                            "items": {
-                                "anyOf": [{"type": "string"}, {"type": "integer"}]
-                            },
-                        },
-                        "msg": {"title": "Message", "type": "string"},
-                        "type": {"title": "Error Type", "type": "string"},
-                    },
-                },
-                "HTTPValidationError": {
-                    "title": "HTTPValidationError",
-                    "type": "object",
-                    "properties": {
-                        "detail": {
-                            "title": "Detail",
-                            "type": "array",
-                            "items": {"$ref": "#/components/schemas/ValidationError"},
-                        }
-                    },
-                },
-            }
-        },
-    }
diff --git a/tests/test_tutorial/test_query_params_str_validations/test_tutorial010_py310.py b/tests/test_tutorial/test_query_params_str_validations/test_tutorial010_py310.py
deleted file mode 100644 (file)
index 5b62c96..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-import pytest
-from dirty_equals import IsDict
-from fastapi._compat import PYDANTIC_VERSION_MINOR_TUPLE
-from fastapi.testclient import TestClient
-
-from ...utils import needs_py310
-
-
-@pytest.fixture(name="client")
-def get_client():
-    from docs_src.query_params_str_validations.tutorial010_py310 import app
-
-    client = TestClient(app)
-    return client
-
-
-@needs_py310
-def test_query_params_str_validations_no_query(client: TestClient):
-    response = client.get("/items/")
-    assert response.status_code == 200
-    assert response.json() == {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
-
-
-@needs_py310
-def test_query_params_str_validations_item_query_fixedquery(client: TestClient):
-    response = client.get("/items/", params={"item-query": "fixedquery"})
-    assert response.status_code == 200
-    assert response.json() == {
-        "items": [{"item_id": "Foo"}, {"item_id": "Bar"}],
-        "q": "fixedquery",
-    }
-
-
-@needs_py310
-def test_query_params_str_validations_q_fixedquery(client: TestClient):
-    response = client.get("/items/", params={"q": "fixedquery"})
-    assert response.status_code == 200
-    assert response.json() == {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
-
-
-@needs_py310
-def test_query_params_str_validations_item_query_nonregexquery(client: TestClient):
-    response = client.get("/items/", params={"item-query": "nonregexquery"})
-    assert response.status_code == 422
-    assert response.json() == IsDict(
-        {
-            "detail": [
-                {
-                    "type": "string_pattern_mismatch",
-                    "loc": ["query", "item-query"],
-                    "msg": "String should match pattern '^fixedquery$'",
-                    "input": "nonregexquery",
-                    "ctx": {"pattern": "^fixedquery$"},
-                }
-            ]
-        }
-    ) | IsDict(
-        # TODO: remove when deprecating Pydantic v1
-        {
-            "detail": [
-                {
-                    "ctx": {"pattern": "^fixedquery$"},
-                    "loc": ["query", "item-query"],
-                    "msg": 'string does not match regex "^fixedquery$"',
-                    "type": "value_error.str.regex",
-                }
-            ]
-        }
-    )
-
-
-@needs_py310
-def test_openapi_schema(client: TestClient):
-    response = client.get("/openapi.json")
-    assert response.status_code == 200, response.text
-    assert response.json() == {
-        "openapi": "3.1.0",
-        "info": {"title": "FastAPI", "version": "0.1.0"},
-        "paths": {
-            "/items/": {
-                "get": {
-                    "responses": {
-                        "200": {
-                            "description": "Successful Response",
-                            "content": {"application/json": {"schema": {}}},
-                        },
-                        "422": {
-                            "description": "Validation Error",
-                            "content": {
-                                "application/json": {
-                                    "schema": {
-                                        "$ref": "#/components/schemas/HTTPValidationError"
-                                    }
-                                }
-                            },
-                        },
-                    },
-                    "summary": "Read Items",
-                    "operationId": "read_items_items__get",
-                    "parameters": [
-                        {
-                            "description": "Query string for the items to search in the database that have a good match",
-                            "required": False,
-                            "deprecated": True,
-                            "schema": IsDict(
-                                {
-                                    "anyOf": [
-                                        {
-                                            "type": "string",
-                                            "minLength": 3,
-                                            "maxLength": 50,
-                                            "pattern": "^fixedquery$",
-                                        },
-                                        {"type": "null"},
-                                    ],
-                                    "title": "Query string",
-                                    "description": "Query string for the items to search in the database that have a good match",
-                                    # See https://github.com/pydantic/pydantic/blob/80353c29a824c55dea4667b328ba8f329879ac9f/tests/test_fastapi.sh#L25-L34.
-                                    **(
-                                        {"deprecated": True}
-                                        if PYDANTIC_VERSION_MINOR_TUPLE >= (2, 10)
-                                        else {}
-                                    ),
-                                }
-                            )
-                            | IsDict(
-                                # TODO: remove when deprecating Pydantic v1
-                                {
-                                    "title": "Query string",
-                                    "maxLength": 50,
-                                    "minLength": 3,
-                                    "pattern": "^fixedquery$",
-                                    "type": "string",
-                                    "description": "Query string for the items to search in the database that have a good match",
-                                }
-                            ),
-                            "name": "item-query",
-                            "in": "query",
-                        }
-                    ],
-                }
-            }
-        },
-        "components": {
-            "schemas": {
-                "ValidationError": {
-                    "title": "ValidationError",
-                    "required": ["loc", "msg", "type"],
-                    "type": "object",
-                    "properties": {
-                        "loc": {
-                            "title": "Location",
-                            "type": "array",
-                            "items": {
-                                "anyOf": [{"type": "string"}, {"type": "integer"}]
-                            },
-                        },
-                        "msg": {"title": "Message", "type": "string"},
-                        "type": {"title": "Error Type", "type": "string"},
-                    },
-                },
-                "HTTPValidationError": {
-                    "title": "HTTPValidationError",
-                    "type": "object",
-                    "properties": {
-                        "detail": {
-                            "title": "Detail",
-                            "type": "array",
-                            "items": {"$ref": "#/components/schemas/ValidationError"},
-                        }
-                    },
-                },
-            }
-        },
-    }
index 5ba39b05d612b47502a2fe98c58667bff392b111..f4da25752bbf484a36e662ca54f2dd4dcdda2177 100644 (file)
@@ -1,26 +1,47 @@
+import importlib
+
+import pytest
 from dirty_equals import IsDict
 from fastapi.testclient import TestClient
 
-from docs_src.query_params_str_validations.tutorial011 import app
+from ...utils import needs_py39, needs_py310
+
+
+@pytest.fixture(
+    name="client",
+    params=[
+        "tutorial011",
+        pytest.param("tutorial011_py39", marks=needs_py310),
+        pytest.param("tutorial011_py310", marks=needs_py310),
+        "tutorial011_an",
+        pytest.param("tutorial011_an_py39", marks=needs_py39),
+        pytest.param("tutorial011_an_py310", marks=needs_py310),
+    ],
+)
+def get_client(request: pytest.FixtureRequest):
+    mod = importlib.import_module(
+        f"docs_src.query_params_str_validations.{request.param}"
+    )
 
-client = TestClient(app)
+    client = TestClient(mod.app)
+    return client
 
 
-def test_multi_query_values():
+def test_multi_query_values(client: TestClient):
     url = "/items/?q=foo&q=bar"
     response = client.get(url)
     assert response.status_code == 200, response.text
     assert response.json() == {"q": ["foo", "bar"]}
 
 
-def test_query_no_values():
+def test_query_no_values(client: TestClient):
     url = "/items/"
     response = client.get(url)
     assert response.status_code == 200, response.text
     assert response.json() == {"q": None}
 
 
-def test_openapi_schema():
+def test_openapi_schema(client: TestClient):
     response = client.get("/openapi.json")
     assert response.status_code == 200, response.text
     assert response.json() == {
diff --git a/tests/test_tutorial/test_query_params_str_validations/test_tutorial011_an.py b/tests/test_tutorial/test_query_params_str_validations/test_tutorial011_an.py
deleted file mode 100644 (file)
index 3942ea7..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-from dirty_equals import IsDict
-from fastapi.testclient import TestClient
-
-from docs_src.query_params_str_validations.tutorial011_an import app
-
-client = TestClient(app)
-
-
-def test_multi_query_values():
-    url = "/items/?q=foo&q=bar"
-    response = client.get(url)
-    assert response.status_code == 200, response.text
-    assert response.json() == {"q": ["foo", "bar"]}
-
-
-def test_query_no_values():
-    url = "/items/"
-    response = client.get(url)
-    assert response.status_code == 200, response.text
-    assert response.json() == {"q": None}
-
-
-def test_openapi_schema():
-    response = client.get("/openapi.json")
-    assert response.status_code == 200, response.text
-    assert response.json() == {
-        "openapi": "3.1.0",
-        "info": {"title": "FastAPI", "version": "0.1.0"},
-        "paths": {
-            "/items/": {
-                "get": {
-                    "responses": {
-                        "200": {
-                            "description": "Successful Response",
-                            "content": {"application/json": {"schema": {}}},
-                        },
-                        "422": {
-                            "description": "Validation Error",
-                            "content": {
-                                "application/json": {
-                                    "schema": {
-                                        "$ref": "#/components/schemas/HTTPValidationError"
-                                    }
-                                }
-                            },
-                        },
-                    },
-                    "summary": "Read Items",
-                    "operationId": "read_items_items__get",
-                    "parameters": [
-                        {
-                            "required": False,
-                            "schema": IsDict(
-                                {
-                                    "anyOf": [
-                                        {"type": "array", "items": {"type": "string"}},
-                                        {"type": "null"},
-                                    ],
-                                    "title": "Q",
-                                }
-                            )
-                            | IsDict(
-                                # TODO: remove when deprecating Pydantic v1
-                                {
-                                    "title": "Q",
-                                    "type": "array",
-                                    "items": {"type": "string"},
-                                }
-                            ),
-                            "name": "q",
-                            "in": "query",
-                        }
-                    ],
-                }
-            }
-        },
-        "components": {
-            "schemas": {
-                "ValidationError": {
-                    "title": "ValidationError",
-                    "required": ["loc", "msg", "type"],
-                    "type": "object",
-                    "properties": {
-                        "loc": {
-                            "title": "Location",
-                            "type": "array",
-                            "items": {
-                                "anyOf": [{"type": "string"}, {"type": "integer"}]
-                            },
-                        },
-                        "msg": {"title": "Message", "type": "string"},
-                        "type": {"title": "Error Type", "type": "string"},
-                    },
-                },
-                "HTTPValidationError": {
-                    "title": "HTTPValidationError",
-                    "type": "object",
-                    "properties": {
-                        "detail": {
-                            "title": "Detail",
-                            "type": "array",
-                            "items": {"$ref": "#/components/schemas/ValidationError"},
-                        }
-                    },
-                },
-            }
-        },
-    }
diff --git a/tests/test_tutorial/test_query_params_str_validations/test_tutorial011_an_py310.py b/tests/test_tutorial/test_query_params_str_validations/test_tutorial011_an_py310.py
deleted file mode 100644 (file)
index f2ec38c..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-import pytest
-from dirty_equals import IsDict
-from fastapi.testclient import TestClient
-
-from ...utils import needs_py310
-
-
-@pytest.fixture(name="client")
-def get_client():
-    from docs_src.query_params_str_validations.tutorial011_an_py310 import app
-
-    client = TestClient(app)
-    return client
-
-
-@needs_py310
-def test_multi_query_values(client: TestClient):
-    url = "/items/?q=foo&q=bar"
-    response = client.get(url)
-    assert response.status_code == 200, response.text
-    assert response.json() == {"q": ["foo", "bar"]}
-
-
-@needs_py310
-def test_query_no_values(client: TestClient):
-    url = "/items/"
-    response = client.get(url)
-    assert response.status_code == 200, response.text
-    assert response.json() == {"q": None}
-
-
-@needs_py310
-def test_openapi_schema(client: TestClient):
-    response = client.get("/openapi.json")
-    assert response.status_code == 200, response.text
-    assert response.json() == {
-        "openapi": "3.1.0",
-        "info": {"title": "FastAPI", "version": "0.1.0"},
-        "paths": {
-            "/items/": {
-                "get": {
-                    "responses": {
-                        "200": {
-                            "description": "Successful Response",
-                            "content": {"application/json": {"schema": {}}},
-                        },
-                        "422": {
-                            "description": "Validation Error",
-                            "content": {
-                                "application/json": {
-                                    "schema": {
-                                        "$ref": "#/components/schemas/HTTPValidationError"
-                                    }
-                                }
-                            },
-                        },
-                    },
-                    "summary": "Read Items",
-                    "operationId": "read_items_items__get",
-                    "parameters": [
-                        {
-                            "required": False,
-                            "schema": IsDict(
-                                {
-                                    "anyOf": [
-                                        {"type": "array", "items": {"type": "string"}},
-                                        {"type": "null"},
-                                    ],
-                                    "title": "Q",
-                                }
-                            )
-                            | IsDict(
-                                # TODO: remove when deprecating Pydantic v1
-                                {
-                                    "title": "Q",
-                                    "type": "array",
-                                    "items": {"type": "string"},
-                                }
-                            ),
-                            "name": "q",
-                            "in": "query",
-                        }
-                    ],
-                }
-            }
-        },
-        "components": {
-            "schemas": {
-                "ValidationError": {
-                    "title": "ValidationError",
-                    "required": ["loc", "msg", "type"],
-                    "type": "object",
-                    "properties": {
-                        "loc": {
-                            "title": "Location",
-                            "type": "array",
-                            "items": {
-                                "anyOf": [{"type": "string"}, {"type": "integer"}]
-                            },
-                        },
-                        "msg": {"title": "Message", "type": "string"},
-                        "type": {"title": "Error Type", "type": "string"},
-                    },
-                },
-                "HTTPValidationError": {
-                    "title": "HTTPValidationError",
-                    "type": "object",
-                    "properties": {
-                        "detail": {
-                            "title": "Detail",
-                            "type": "array",
-                            "items": {"$ref": "#/components/schemas/ValidationError"},
-                        }
-                    },
-                },
-            }
-        },
-    }
diff --git a/tests/test_tutorial/test_query_params_str_validations/test_tutorial011_an_py39.py b/tests/test_tutorial/test_query_params_str_validations/test_tutorial011_an_py39.py
deleted file mode 100644 (file)
index cd7b156..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-import pytest
-from dirty_equals import IsDict
-from fastapi.testclient import TestClient
-
-from ...utils import needs_py39
-
-
-@pytest.fixture(name="client")
-def get_client():
-    from docs_src.query_params_str_validations.tutorial011_an_py39 import app
-
-    client = TestClient(app)
-    return client
-
-
-@needs_py39
-def test_multi_query_values(client: TestClient):
-    url = "/items/?q=foo&q=bar"
-    response = client.get(url)
-    assert response.status_code == 200, response.text
-    assert response.json() == {"q": ["foo", "bar"]}
-
-
-@needs_py39
-def test_query_no_values(client: TestClient):
-    url = "/items/"
-    response = client.get(url)
-    assert response.status_code == 200, response.text
-    assert response.json() == {"q": None}
-
-
-@needs_py39
-def test_openapi_schema(client: TestClient):
-    response = client.get("/openapi.json")
-    assert response.status_code == 200, response.text
-    assert response.json() == {
-        "openapi": "3.1.0",
-        "info": {"title": "FastAPI", "version": "0.1.0"},
-        "paths": {
-            "/items/": {
-                "get": {
-                    "responses": {
-                        "200": {
-                            "description": "Successful Response",
-                            "content": {"application/json": {"schema": {}}},
-                        },
-                        "422": {
-                            "description": "Validation Error",
-                            "content": {
-                                "application/json": {
-                                    "schema": {
-                                        "$ref": "#/components/schemas/HTTPValidationError"
-                                    }
-                                }
-                            },
-                        },
-                    },
-                    "summary": "Read Items",
-                    "operationId": "read_items_items__get",
-                    "parameters": [
-                        {
-                            "required": False,
-                            "schema": IsDict(
-                                {
-                                    "anyOf": [
-                                        {"type": "array", "items": {"type": "string"}},
-                                        {"type": "null"},
-                                    ],
-                                    "title": "Q",
-                                }
-                            )
-                            | IsDict(
-                                # TODO: remove when deprecating Pydantic v1
-                                {
-                                    "title": "Q",
-                                    "type": "array",
-                                    "items": {"type": "string"},
-                                }
-                            ),
-                            "name": "q",
-                            "in": "query",
-                        }
-                    ],
-                }
-            }
-        },
-        "components": {
-            "schemas": {
-                "ValidationError": {
-                    "title": "ValidationError",
-                    "required": ["loc", "msg", "type"],
-                    "type": "object",
-                    "properties": {
-                        "loc": {
-                            "title": "Location",
-                            "type": "array",
-                            "items": {
-                                "anyOf": [{"type": "string"}, {"type": "integer"}]
-                            },
-                        },
-                        "msg": {"title": "Message", "type": "string"},
-                        "type": {"title": "Error Type", "type": "string"},
-                    },
-                },
-                "HTTPValidationError": {
-                    "title": "HTTPValidationError",
-                    "type": "object",
-                    "properties": {
-                        "detail": {
-                            "title": "Detail",
-                            "type": "array",
-                            "items": {"$ref": "#/components/schemas/ValidationError"},
-                        }
-                    },
-                },
-            }
-        },
-    }
diff --git a/tests/test_tutorial/test_query_params_str_validations/test_tutorial011_py310.py b/tests/test_tutorial/test_query_params_str_validations/test_tutorial011_py310.py
deleted file mode 100644 (file)
index bdc7295..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-import pytest
-from dirty_equals import IsDict
-from fastapi.testclient import TestClient
-
-from ...utils import needs_py310
-
-
-@pytest.fixture(name="client")
-def get_client():
-    from docs_src.query_params_str_validations.tutorial011_py310 import app
-
-    client = TestClient(app)
-    return client
-
-
-@needs_py310
-def test_multi_query_values(client: TestClient):
-    url = "/items/?q=foo&q=bar"
-    response = client.get(url)
-    assert response.status_code == 200, response.text
-    assert response.json() == {"q": ["foo", "bar"]}
-
-
-@needs_py310
-def test_query_no_values(client: TestClient):
-    url = "/items/"
-    response = client.get(url)
-    assert response.status_code == 200, response.text
-    assert response.json() == {"q": None}
-
-
-@needs_py310
-def test_openapi_schema(client: TestClient):
-    response = client.get("/openapi.json")
-    assert response.status_code == 200, response.text
-    assert response.json() == {
-        "openapi": "3.1.0",
-        "info": {"title": "FastAPI", "version": "0.1.0"},
-        "paths": {
-            "/items/": {
-                "get": {
-                    "responses": {
-                        "200": {
-                            "description": "Successful Response",
-                            "content": {"application/json": {"schema": {}}},
-                        },
-                        "422": {
-                            "description": "Validation Error",
-                            "content": {
-                                "application/json": {
-                                    "schema": {
-                                        "$ref": "#/components/schemas/HTTPValidationError"
-                                    }
-                                }
-                            },
-                        },
-                    },
-                    "summary": "Read Items",
-                    "operationId": "read_items_items__get",
-                    "parameters": [
-                        {
-                            "required": False,
-                            "schema": IsDict(
-                                {
-                                    "anyOf": [
-                                        {"type": "array", "items": {"type": "string"}},
-                                        {"type": "null"},
-                                    ],
-                                    "title": "Q",
-                                }
-                            )
-                            | IsDict(
-                                # TODO: remove when deprecating Pydantic v1
-                                {
-                                    "title": "Q",
-                                    "type": "array",
-                                    "items": {"type": "string"},
-                                }
-                            ),
-                            "name": "q",
-                            "in": "query",
-                        }
-                    ],
-                }
-            }
-        },
-        "components": {
-            "schemas": {
-                "ValidationError": {
-                    "title": "ValidationError",
-                    "required": ["loc", "msg", "type"],
-                    "type": "object",
-                    "properties": {
-                        "loc": {
-                            "title": "Location",
-                            "type": "array",
-                            "items": {
-                                "anyOf": [{"type": "string"}, {"type": "integer"}]
-                            },
-                        },
-                        "msg": {"title": "Message", "type": "string"},
-                        "type": {"title": "Error Type", "type": "string"},
-                    },
-                },
-                "HTTPValidationError": {
-                    "title": "HTTPValidationError",
-                    "type": "object",
-                    "properties": {
-                        "detail": {
-                            "title": "Detail",
-                            "type": "array",
-                            "items": {"$ref": "#/components/schemas/ValidationError"},
-                        }
-                    },
-                },
-            }
-        },
-    }
diff --git a/tests/test_tutorial/test_query_params_str_validations/test_tutorial011_py39.py b/tests/test_tutorial/test_query_params_str_validations/test_tutorial011_py39.py
deleted file mode 100644 (file)
index 26ac56b..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-import pytest
-from dirty_equals import IsDict
-from fastapi.testclient import TestClient
-
-from ...utils import needs_py39
-
-
-@pytest.fixture(name="client")
-def get_client():
-    from docs_src.query_params_str_validations.tutorial011_py39 import app
-
-    client = TestClient(app)
-    return client
-
-
-@needs_py39
-def test_multi_query_values(client: TestClient):
-    url = "/items/?q=foo&q=bar"
-    response = client.get(url)
-    assert response.status_code == 200, response.text
-    assert response.json() == {"q": ["foo", "bar"]}
-
-
-@needs_py39
-def test_query_no_values(client: TestClient):
-    url = "/items/"
-    response = client.get(url)
-    assert response.status_code == 200, response.text
-    assert response.json() == {"q": None}
-
-
-@needs_py39
-def test_openapi_schema(client: TestClient):
-    response = client.get("/openapi.json")
-    assert response.status_code == 200, response.text
-    assert response.json() == {
-        "openapi": "3.1.0",
-        "info": {"title": "FastAPI", "version": "0.1.0"},
-        "paths": {
-            "/items/": {
-                "get": {
-                    "responses": {
-                        "200": {
-                            "description": "Successful Response",
-                            "content": {"application/json": {"schema": {}}},
-                        },
-                        "422": {
-                            "description": "Validation Error",
-                            "content": {
-                                "application/json": {
-                                    "schema": {
-                                        "$ref": "#/components/schemas/HTTPValidationError"
-                                    }
-                                }
-                            },
-                        },
-                    },
-                    "summary": "Read Items",
-                    "operationId": "read_items_items__get",
-                    "parameters": [
-                        {
-                            "required": False,
-                            "schema": IsDict(
-                                {
-                                    "anyOf": [
-                                        {"type": "array", "items": {"type": "string"}},
-                                        {"type": "null"},
-                                    ],
-                                    "title": "Q",
-                                }
-                            )
-                            | IsDict(
-                                # TODO: remove when deprecating Pydantic v1
-                                {
-                                    "title": "Q",
-                                    "type": "array",
-                                    "items": {"type": "string"},
-                                }
-                            ),
-                            "name": "q",
-                            "in": "query",
-                        }
-                    ],
-                }
-            }
-        },
-        "components": {
-            "schemas": {
-                "ValidationError": {
-                    "title": "ValidationError",
-                    "required": ["loc", "msg", "type"],
-                    "type": "object",
-                    "properties": {
-                        "loc": {
-                            "title": "Location",
-                            "type": "array",
-                            "items": {
-                                "anyOf": [{"type": "string"}, {"type": "integer"}]
-                            },
-                        },
-                        "msg": {"title": "Message", "type": "string"},
-                        "type": {"title": "Error Type", "type": "string"},
-                    },
-                },
-                "HTTPValidationError": {
-                    "title": "HTTPValidationError",
-                    "type": "object",
-                    "properties": {
-                        "detail": {
-                            "title": "Detail",
-                            "type": "array",
-                            "items": {"$ref": "#/components/schemas/ValidationError"},
-                        }
-                    },
-                },
-            }
-        },
-    }
index 1436db384c99265e805b72ae6c57cc45cafe096d..549a90519e63b001b9e6645f8c4313ad59163f4c 100644 (file)
@@ -1,25 +1,44 @@
+import importlib
+
+import pytest
 from fastapi.testclient import TestClient
 
-from docs_src.query_params_str_validations.tutorial012 import app
+from ...utils import needs_py39
+
+
+@pytest.fixture(
+    name="client",
+    params=[
+        "tutorial012",
+        pytest.param("tutorial012_py39", marks=needs_py39),
+        "tutorial012_an",
+        pytest.param("tutorial012_an_py39", marks=needs_py39),
+    ],
+)
+def get_client(request: pytest.FixtureRequest):
+    mod = importlib.import_module(
+        f"docs_src.query_params_str_validations.{request.param}"
+    )
 
-client = TestClient(app)
+    client = TestClient(mod.app)
+    return client
 
 
-def test_default_query_values():
+def test_default_query_values(client: TestClient):
     url = "/items/"
     response = client.get(url)
     assert response.status_code == 200, response.text
     assert response.json() == {"q": ["foo", "bar"]}
 
 
-def test_multi_query_values():
+def test_multi_query_values(client: TestClient):
     url = "/items/?q=baz&q=foobar"
     response = client.get(url)
     assert response.status_code == 200, response.text
     assert response.json() == {"q": ["baz", "foobar"]}
 
 
-def test_openapi_schema():
+def test_openapi_schema(client: TestClient):
     response = client.get("/openapi.json")
     assert response.status_code == 200, response.text
     assert response.json() == {
diff --git a/tests/test_tutorial/test_query_params_str_validations/test_tutorial012_an.py b/tests/test_tutorial/test_query_params_str_validations/test_tutorial012_an.py
deleted file mode 100644 (file)
index 270763f..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-from fastapi.testclient import TestClient
-
-from docs_src.query_params_str_validations.tutorial012_an import app
-
-client = TestClient(app)
-
-
-def test_default_query_values():
-    url = "/items/"
-    response = client.get(url)
-    assert response.status_code == 200, response.text
-    assert response.json() == {"q": ["foo", "bar"]}
-
-
-def test_multi_query_values():
-    url = "/items/?q=baz&q=foobar"
-    response = client.get(url)
-    assert response.status_code == 200, response.text
-    assert response.json() == {"q": ["baz", "foobar"]}
-
-
-def test_openapi_schema():
-    response = client.get("/openapi.json")
-    assert response.status_code == 200, response.text
-    assert response.json() == {
-        "openapi": "3.1.0",
-        "info": {"title": "FastAPI", "version": "0.1.0"},
-        "paths": {
-            "/items/": {
-                "get": {
-                    "responses": {
-                        "200": {
-                            "description": "Successful Response",
-                            "content": {"application/json": {"schema": {}}},
-                        },
-                        "422": {
-                            "description": "Validation Error",
-                            "content": {
-                                "application/json": {
-                                    "schema": {
-                                        "$ref": "#/components/schemas/HTTPValidationError"
-                                    }
-                                }
-                            },
-                        },
-                    },
-                    "summary": "Read Items",
-                    "operationId": "read_items_items__get",
-                    "parameters": [
-                        {
-                            "required": False,
-                            "schema": {
-                                "title": "Q",
-                                "type": "array",
-                                "items": {"type": "string"},
-                                "default": ["foo", "bar"],
-                            },
-                            "name": "q",
-                            "in": "query",
-                        }
-                    ],
-                }
-            }
-        },
-        "components": {
-            "schemas": {
-                "ValidationError": {
-                    "title": "ValidationError",
-                    "required": ["loc", "msg", "type"],
-                    "type": "object",
-                    "properties": {
-                        "loc": {
-                            "title": "Location",
-                            "type": "array",
-                            "items": {
-                                "anyOf": [{"type": "string"}, {"type": "integer"}]
-                            },
-                        },
-                        "msg": {"title": "Message", "type": "string"},
-                        "type": {"title": "Error Type", "type": "string"},
-                    },
-                },
-                "HTTPValidationError": {
-                    "title": "HTTPValidationError",
-                    "type": "object",
-                    "properties": {
-                        "detail": {
-                            "title": "Detail",
-                            "type": "array",
-                            "items": {"$ref": "#/components/schemas/ValidationError"},
-                        }
-                    },
-                },
-            }
-        },
-    }
diff --git a/tests/test_tutorial/test_query_params_str_validations/test_tutorial012_an_py39.py b/tests/test_tutorial/test_query_params_str_validations/test_tutorial012_an_py39.py
deleted file mode 100644 (file)
index 5483916..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-import pytest
-from fastapi.testclient import TestClient
-
-from ...utils import needs_py39
-
-
-@pytest.fixture(name="client")
-def get_client():
-    from docs_src.query_params_str_validations.tutorial012_an_py39 import app
-
-    client = TestClient(app)
-    return client
-
-
-@needs_py39
-def test_default_query_values(client: TestClient):
-    url = "/items/"
-    response = client.get(url)
-    assert response.status_code == 200, response.text
-    assert response.json() == {"q": ["foo", "bar"]}
-
-
-@needs_py39
-def test_multi_query_values(client: TestClient):
-    url = "/items/?q=baz&q=foobar"
-    response = client.get(url)
-    assert response.status_code == 200, response.text
-    assert response.json() == {"q": ["baz", "foobar"]}
-
-
-@needs_py39
-def test_openapi_schema(client: TestClient):
-    response = client.get("/openapi.json")
-    assert response.status_code == 200, response.text
-    assert response.json() == {
-        "openapi": "3.1.0",
-        "info": {"title": "FastAPI", "version": "0.1.0"},
-        "paths": {
-            "/items/": {
-                "get": {
-                    "responses": {
-                        "200": {
-                            "description": "Successful Response",
-                            "content": {"application/json": {"schema": {}}},
-                        },
-                        "422": {
-                            "description": "Validation Error",
-                            "content": {
-                                "application/json": {
-                                    "schema": {
-                                        "$ref": "#/components/schemas/HTTPValidationError"
-                                    }
-                                }
-                            },
-                        },
-                    },
-                    "summary": "Read Items",
-                    "operationId": "read_items_items__get",
-                    "parameters": [
-                        {
-                            "required": False,
-                            "schema": {
-                                "title": "Q",
-                                "type": "array",
-                                "items": {"type": "string"},
-                                "default": ["foo", "bar"],
-                            },
-                            "name": "q",
-                            "in": "query",
-                        }
-                    ],
-                }
-            }
-        },
-        "components": {
-            "schemas": {
-                "ValidationError": {
-                    "title": "ValidationError",
-                    "required": ["loc", "msg", "type"],
-                    "type": "object",
-                    "properties": {
-                        "loc": {
-                            "title": "Location",
-                            "type": "array",
-                            "items": {
-                                "anyOf": [{"type": "string"}, {"type": "integer"}]
-                            },
-                        },
-                        "msg": {"title": "Message", "type": "string"},
-                        "type": {"title": "Error Type", "type": "string"},
-                    },
-                },
-                "HTTPValidationError": {
-                    "title": "HTTPValidationError",
-                    "type": "object",
-                    "properties": {
-                        "detail": {
-                            "title": "Detail",
-                            "type": "array",
-                            "items": {"$ref": "#/components/schemas/ValidationError"},
-                        }
-                    },
-                },
-            }
-        },
-    }
diff --git a/tests/test_tutorial/test_query_params_str_validations/test_tutorial012_py39.py b/tests/test_tutorial/test_query_params_str_validations/test_tutorial012_py39.py
deleted file mode 100644 (file)
index e7d7451..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-import pytest
-from fastapi.testclient import TestClient
-
-from ...utils import needs_py39
-
-
-@pytest.fixture(name="client")
-def get_client():
-    from docs_src.query_params_str_validations.tutorial012_py39 import app
-
-    client = TestClient(app)
-    return client
-
-
-@needs_py39
-def test_default_query_values(client: TestClient):
-    url = "/items/"
-    response = client.get(url)
-    assert response.status_code == 200, response.text
-    assert response.json() == {"q": ["foo", "bar"]}
-
-
-@needs_py39
-def test_multi_query_values(client: TestClient):
-    url = "/items/?q=baz&q=foobar"
-    response = client.get(url)
-    assert response.status_code == 200, response.text
-    assert response.json() == {"q": ["baz", "foobar"]}
-
-
-@needs_py39
-def test_openapi_schema(client: TestClient):
-    response = client.get("/openapi.json")
-    assert response.status_code == 200, response.text
-    assert response.json() == {
-        "openapi": "3.1.0",
-        "info": {"title": "FastAPI", "version": "0.1.0"},
-        "paths": {
-            "/items/": {
-                "get": {
-                    "responses": {
-                        "200": {
-                            "description": "Successful Response",
-                            "content": {"application/json": {"schema": {}}},
-                        },
-                        "422": {
-                            "description": "Validation Error",
-                            "content": {
-                                "application/json": {
-                                    "schema": {
-                                        "$ref": "#/components/schemas/HTTPValidationError"
-                                    }
-                                }
-                            },
-                        },
-                    },
-                    "summary": "Read Items",
-                    "operationId": "read_items_items__get",
-                    "parameters": [
-                        {
-                            "required": False,
-                            "schema": {
-                                "title": "Q",
-                                "type": "array",
-                                "items": {"type": "string"},
-                                "default": ["foo", "bar"],
-                            },
-                            "name": "q",
-                            "in": "query",
-                        }
-                    ],
-                }
-            }
-        },
-        "components": {
-            "schemas": {
-                "ValidationError": {
-                    "title": "ValidationError",
-                    "required": ["loc", "msg", "type"],
-                    "type": "object",
-                    "properties": {
-                        "loc": {
-                            "title": "Location",
-                            "type": "array",
-                            "items": {
-                                "anyOf": [{"type": "string"}, {"type": "integer"}]
-                            },
-                        },
-                        "msg": {"title": "Message", "type": "string"},
-                        "type": {"title": "Error Type", "type": "string"},
-                    },
-                },
-                "HTTPValidationError": {
-                    "title": "HTTPValidationError",
-                    "type": "object",
-                    "properties": {
-                        "detail": {
-                            "title": "Detail",
-                            "type": "array",
-                            "items": {"$ref": "#/components/schemas/ValidationError"},
-                        }
-                    },
-                },
-            }
-        },
-    }
index 1ba1fdf618caf3a51a1de75f6ad2752988ce8116..f2f5f7a8589d93596decd3e6ddadedaa97ca165a 100644 (file)
@@ -1,25 +1,43 @@
+import importlib
+
+import pytest
 from fastapi.testclient import TestClient
 
-from docs_src.query_params_str_validations.tutorial013 import app
+from ...utils import needs_py39
+
+
+@pytest.fixture(
+    name="client",
+    params=[
+        "tutorial013",
+        "tutorial013_an",
+        pytest.param("tutorial013_an_py39", marks=needs_py39),
+    ],
+)
+def get_client(request: pytest.FixtureRequest):
+    mod = importlib.import_module(
+        f"docs_src.query_params_str_validations.{request.param}"
+    )
 
-client = TestClient(app)
+    client = TestClient(mod.app)
+    return client
 
 
-def test_multi_query_values():
+def test_multi_query_values(client: TestClient):
     url = "/items/?q=foo&q=bar"
     response = client.get(url)
     assert response.status_code == 200, response.text
     assert response.json() == {"q": ["foo", "bar"]}
 
 
-def test_query_no_values():
+def test_query_no_values(client: TestClient):
     url = "/items/"
     response = client.get(url)
     assert response.status_code == 200, response.text
     assert response.json() == {"q": []}
 
 
-def test_openapi_schema():
+def test_openapi_schema(client: TestClient):
     response = client.get("/openapi.json")
     assert response.status_code == 200, response.text
     assert response.json() == {
diff --git a/tests/test_tutorial/test_query_params_str_validations/test_tutorial013_an.py b/tests/test_tutorial/test_query_params_str_validations/test_tutorial013_an.py
deleted file mode 100644 (file)
index 3432617..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-from fastapi.testclient import TestClient
-
-from docs_src.query_params_str_validations.tutorial013_an import app
-
-client = TestClient(app)
-
-
-def test_multi_query_values():
-    url = "/items/?q=foo&q=bar"
-    response = client.get(url)
-    assert response.status_code == 200, response.text
-    assert response.json() == {"q": ["foo", "bar"]}
-
-
-def test_query_no_values():
-    url = "/items/"
-    response = client.get(url)
-    assert response.status_code == 200, response.text
-    assert response.json() == {"q": []}
-
-
-def test_openapi_schema():
-    response = client.get("/openapi.json")
-    assert response.status_code == 200, response.text
-    assert response.json() == {
-        "openapi": "3.1.0",
-        "info": {"title": "FastAPI", "version": "0.1.0"},
-        "paths": {
-            "/items/": {
-                "get": {
-                    "responses": {
-                        "200": {
-                            "description": "Successful Response",
-                            "content": {"application/json": {"schema": {}}},
-                        },
-                        "422": {
-                            "description": "Validation Error",
-                            "content": {
-                                "application/json": {
-                                    "schema": {
-                                        "$ref": "#/components/schemas/HTTPValidationError"
-                                    }
-                                }
-                            },
-                        },
-                    },
-                    "summary": "Read Items",
-                    "operationId": "read_items_items__get",
-                    "parameters": [
-                        {
-                            "required": False,
-                            "schema": {
-                                "title": "Q",
-                                "type": "array",
-                                "items": {},
-                                "default": [],
-                            },
-                            "name": "q",
-                            "in": "query",
-                        }
-                    ],
-                }
-            }
-        },
-        "components": {
-            "schemas": {
-                "ValidationError": {
-                    "title": "ValidationError",
-                    "required": ["loc", "msg", "type"],
-                    "type": "object",
-                    "properties": {
-                        "loc": {
-                            "title": "Location",
-                            "type": "array",
-                            "items": {
-                                "anyOf": [{"type": "string"}, {"type": "integer"}]
-                            },
-                        },
-                        "msg": {"title": "Message", "type": "string"},
-                        "type": {"title": "Error Type", "type": "string"},
-                    },
-                },
-                "HTTPValidationError": {
-                    "title": "HTTPValidationError",
-                    "type": "object",
-                    "properties": {
-                        "detail": {
-                            "title": "Detail",
-                            "type": "array",
-                            "items": {"$ref": "#/components/schemas/ValidationError"},
-                        }
-                    },
-                },
-            }
-        },
-    }
diff --git a/tests/test_tutorial/test_query_params_str_validations/test_tutorial013_an_py39.py b/tests/test_tutorial/test_query_params_str_validations/test_tutorial013_an_py39.py
deleted file mode 100644 (file)
index 537d632..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-import pytest
-from fastapi.testclient import TestClient
-
-from ...utils import needs_py39
-
-
-@pytest.fixture(name="client")
-def get_client():
-    from docs_src.query_params_str_validations.tutorial013_an_py39 import app
-
-    client = TestClient(app)
-    return client
-
-
-@needs_py39
-def test_multi_query_values(client: TestClient):
-    url = "/items/?q=foo&q=bar"
-    response = client.get(url)
-    assert response.status_code == 200, response.text
-    assert response.json() == {"q": ["foo", "bar"]}
-
-
-@needs_py39
-def test_query_no_values(client: TestClient):
-    url = "/items/"
-    response = client.get(url)
-    assert response.status_code == 200, response.text
-    assert response.json() == {"q": []}
-
-
-@needs_py39
-def test_openapi_schema(client: TestClient):
-    response = client.get("/openapi.json")
-    assert response.status_code == 200, response.text
-    assert response.json() == {
-        "openapi": "3.1.0",
-        "info": {"title": "FastAPI", "version": "0.1.0"},
-        "paths": {
-            "/items/": {
-                "get": {
-                    "responses": {
-                        "200": {
-                            "description": "Successful Response",
-                            "content": {"application/json": {"schema": {}}},
-                        },
-                        "422": {
-                            "description": "Validation Error",
-                            "content": {
-                                "application/json": {
-                                    "schema": {
-                                        "$ref": "#/components/schemas/HTTPValidationError"
-                                    }
-                                }
-                            },
-                        },
-                    },
-                    "summary": "Read Items",
-                    "operationId": "read_items_items__get",
-                    "parameters": [
-                        {
-                            "required": False,
-                            "schema": {
-                                "title": "Q",
-                                "type": "array",
-                                "items": {},
-                                "default": [],
-                            },
-                            "name": "q",
-                            "in": "query",
-                        }
-                    ],
-                }
-            }
-        },
-        "components": {
-            "schemas": {
-                "ValidationError": {
-                    "title": "ValidationError",
-                    "required": ["loc", "msg", "type"],
-                    "type": "object",
-                    "properties": {
-                        "loc": {
-                            "title": "Location",
-                            "type": "array",
-                            "items": {
-                                "anyOf": [{"type": "string"}, {"type": "integer"}]
-                            },
-                        },
-                        "msg": {"title": "Message", "type": "string"},
-                        "type": {"title": "Error Type", "type": "string"},
-                    },
-                },
-                "HTTPValidationError": {
-                    "title": "HTTPValidationError",
-                    "type": "object",
-                    "properties": {
-                        "detail": {
-                            "title": "Detail",
-                            "type": "array",
-                            "items": {"$ref": "#/components/schemas/ValidationError"},
-                        }
-                    },
-                },
-            }
-        },
-    }
index 7bce7590c20b1759775b05ad5b1fe5ea0083cec7..edd40bb1ab433a78d3b2bce9ea590c567872695c 100644 (file)
@@ -1,23 +1,43 @@
+import importlib
+
+import pytest
 from fastapi.testclient import TestClient
 
-from docs_src.query_params_str_validations.tutorial014 import app
+from ...utils import needs_py39, needs_py310
+
+
+@pytest.fixture(
+    name="client",
+    params=[
+        "tutorial014",
+        pytest.param("tutorial014_py310", marks=needs_py310),
+        "tutorial014_an",
+        pytest.param("tutorial014_an_py39", marks=needs_py39),
+        pytest.param("tutorial014_an_py310", marks=needs_py310),
+    ],
+)
+def get_client(request: pytest.FixtureRequest):
+    mod = importlib.import_module(
+        f"docs_src.query_params_str_validations.{request.param}"
+    )
 
-client = TestClient(app)
+    client = TestClient(mod.app)
+    return client
 
 
-def test_hidden_query():
+def test_hidden_query(client: TestClient):
     response = client.get("/items?hidden_query=somevalue")
     assert response.status_code == 200, response.text
     assert response.json() == {"hidden_query": "somevalue"}
 
 
-def test_no_hidden_query():
+def test_no_hidden_query(client: TestClient):
     response = client.get("/items")
     assert response.status_code == 200, response.text
     assert response.json() == {"hidden_query": "Not found"}
 
 
-def test_openapi_schema():
+def test_openapi_schema(client: TestClient):
     response = client.get("/openapi.json")
     assert response.status_code == 200, response.text
     assert response.json() == {
diff --git a/tests/test_tutorial/test_query_params_str_validations/test_tutorial014_an.py b/tests/test_tutorial/test_query_params_str_validations/test_tutorial014_an.py
deleted file mode 100644 (file)
index 2182e87..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-from fastapi.testclient import TestClient
-
-from docs_src.query_params_str_validations.tutorial014_an import app
-
-client = TestClient(app)
-
-
-def test_hidden_query():
-    response = client.get("/items?hidden_query=somevalue")
-    assert response.status_code == 200, response.text
-    assert response.json() == {"hidden_query": "somevalue"}
-
-
-def test_no_hidden_query():
-    response = client.get("/items")
-    assert response.status_code == 200, response.text
-    assert response.json() == {"hidden_query": "Not found"}
-
-
-def test_openapi_schema():
-    response = client.get("/openapi.json")
-    assert response.status_code == 200, response.text
-    assert response.json() == {
-        "openapi": "3.1.0",
-        "info": {"title": "FastAPI", "version": "0.1.0"},
-        "paths": {
-            "/items/": {
-                "get": {
-                    "summary": "Read Items",
-                    "operationId": "read_items_items__get",
-                    "responses": {
-                        "200": {
-                            "description": "Successful Response",
-                            "content": {"application/json": {"schema": {}}},
-                        },
-                        "422": {
-                            "description": "Validation Error",
-                            "content": {
-                                "application/json": {
-                                    "schema": {
-                                        "$ref": "#/components/schemas/HTTPValidationError"
-                                    }
-                                }
-                            },
-                        },
-                    },
-                }
-            }
-        },
-        "components": {
-            "schemas": {
-                "HTTPValidationError": {
-                    "title": "HTTPValidationError",
-                    "type": "object",
-                    "properties": {
-                        "detail": {
-                            "title": "Detail",
-                            "type": "array",
-                            "items": {"$ref": "#/components/schemas/ValidationError"},
-                        }
-                    },
-                },
-                "ValidationError": {
-                    "title": "ValidationError",
-                    "required": ["loc", "msg", "type"],
-                    "type": "object",
-                    "properties": {
-                        "loc": {
-                            "title": "Location",
-                            "type": "array",
-                            "items": {
-                                "anyOf": [{"type": "string"}, {"type": "integer"}]
-                            },
-                        },
-                        "msg": {"title": "Message", "type": "string"},
-                        "type": {"title": "Error Type", "type": "string"},
-                    },
-                },
-            }
-        },
-    }
diff --git a/tests/test_tutorial/test_query_params_str_validations/test_tutorial014_an_py310.py b/tests/test_tutorial/test_query_params_str_validations/test_tutorial014_an_py310.py
deleted file mode 100644 (file)
index 344004d..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-import pytest
-from fastapi.testclient import TestClient
-
-from ...utils import needs_py310
-
-
-@pytest.fixture(name="client")
-def get_client():
-    from docs_src.query_params_str_validations.tutorial014_an_py310 import app
-
-    client = TestClient(app)
-    return client
-
-
-@needs_py310
-def test_hidden_query(client: TestClient):
-    response = client.get("/items?hidden_query=somevalue")
-    assert response.status_code == 200, response.text
-    assert response.json() == {"hidden_query": "somevalue"}
-
-
-@needs_py310
-def test_no_hidden_query(client: TestClient):
-    response = client.get("/items")
-    assert response.status_code == 200, response.text
-    assert response.json() == {"hidden_query": "Not found"}
-
-
-@needs_py310
-def test_openapi_schema(client: TestClient):
-    response = client.get("/openapi.json")
-    assert response.status_code == 200, response.text
-    assert response.json() == {
-        "openapi": "3.1.0",
-        "info": {"title": "FastAPI", "version": "0.1.0"},
-        "paths": {
-            "/items/": {
-                "get": {
-                    "summary": "Read Items",
-                    "operationId": "read_items_items__get",
-                    "responses": {
-                        "200": {
-                            "description": "Successful Response",
-                            "content": {"application/json": {"schema": {}}},
-                        },
-                        "422": {
-                            "description": "Validation Error",
-                            "content": {
-                                "application/json": {
-                                    "schema": {
-                                        "$ref": "#/components/schemas/HTTPValidationError"
-                                    }
-                                }
-                            },
-                        },
-                    },
-                }
-            }
-        },
-        "components": {
-            "schemas": {
-                "HTTPValidationError": {
-                    "title": "HTTPValidationError",
-                    "type": "object",
-                    "properties": {
-                        "detail": {
-                            "title": "Detail",
-                            "type": "array",
-                            "items": {"$ref": "#/components/schemas/ValidationError"},
-                        }
-                    },
-                },
-                "ValidationError": {
-                    "title": "ValidationError",
-                    "required": ["loc", "msg", "type"],
-                    "type": "object",
-                    "properties": {
-                        "loc": {
-                            "title": "Location",
-                            "type": "array",
-                            "items": {
-                                "anyOf": [{"type": "string"}, {"type": "integer"}]
-                            },
-                        },
-                        "msg": {"title": "Message", "type": "string"},
-                        "type": {"title": "Error Type", "type": "string"},
-                    },
-                },
-            }
-        },
-    }
diff --git a/tests/test_tutorial/test_query_params_str_validations/test_tutorial014_an_py39.py b/tests/test_tutorial/test_query_params_str_validations/test_tutorial014_an_py39.py
deleted file mode 100644 (file)
index 5d4f6df..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-import pytest
-from fastapi.testclient import TestClient
-
-from ...utils import needs_py310
-
-
-@pytest.fixture(name="client")
-def get_client():
-    from docs_src.query_params_str_validations.tutorial014_an_py39 import app
-
-    client = TestClient(app)
-    return client
-
-
-@needs_py310
-def test_hidden_query(client: TestClient):
-    response = client.get("/items?hidden_query=somevalue")
-    assert response.status_code == 200, response.text
-    assert response.json() == {"hidden_query": "somevalue"}
-
-
-@needs_py310
-def test_no_hidden_query(client: TestClient):
-    response = client.get("/items")
-    assert response.status_code == 200, response.text
-    assert response.json() == {"hidden_query": "Not found"}
-
-
-@needs_py310
-def test_openapi_schema(client: TestClient):
-    response = client.get("/openapi.json")
-    assert response.status_code == 200, response.text
-    assert response.json() == {
-        "openapi": "3.1.0",
-        "info": {"title": "FastAPI", "version": "0.1.0"},
-        "paths": {
-            "/items/": {
-                "get": {
-                    "summary": "Read Items",
-                    "operationId": "read_items_items__get",
-                    "responses": {
-                        "200": {
-                            "description": "Successful Response",
-                            "content": {"application/json": {"schema": {}}},
-                        },
-                        "422": {
-                            "description": "Validation Error",
-                            "content": {
-                                "application/json": {
-                                    "schema": {
-                                        "$ref": "#/components/schemas/HTTPValidationError"
-                                    }
-                                }
-                            },
-                        },
-                    },
-                }
-            }
-        },
-        "components": {
-            "schemas": {
-                "HTTPValidationError": {
-                    "title": "HTTPValidationError",
-                    "type": "object",
-                    "properties": {
-                        "detail": {
-                            "title": "Detail",
-                            "type": "array",
-                            "items": {"$ref": "#/components/schemas/ValidationError"},
-                        }
-                    },
-                },
-                "ValidationError": {
-                    "title": "ValidationError",
-                    "required": ["loc", "msg", "type"],
-                    "type": "object",
-                    "properties": {
-                        "loc": {
-                            "title": "Location",
-                            "type": "array",
-                            "items": {
-                                "anyOf": [{"type": "string"}, {"type": "integer"}]
-                            },
-                        },
-                        "msg": {"title": "Message", "type": "string"},
-                        "type": {"title": "Error Type", "type": "string"},
-                    },
-                },
-            }
-        },
-    }
diff --git a/tests/test_tutorial/test_query_params_str_validations/test_tutorial014_py310.py b/tests/test_tutorial/test_query_params_str_validations/test_tutorial014_py310.py
deleted file mode 100644 (file)
index dad49fb..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-import pytest
-from fastapi.testclient import TestClient
-
-from ...utils import needs_py310
-
-
-@pytest.fixture(name="client")
-def get_client():
-    from docs_src.query_params_str_validations.tutorial014_py310 import app
-
-    client = TestClient(app)
-    return client
-
-
-@needs_py310
-def test_hidden_query(client: TestClient):
-    response = client.get("/items?hidden_query=somevalue")
-    assert response.status_code == 200, response.text
-    assert response.json() == {"hidden_query": "somevalue"}
-
-
-@needs_py310
-def test_no_hidden_query(client: TestClient):
-    response = client.get("/items")
-    assert response.status_code == 200, response.text
-    assert response.json() == {"hidden_query": "Not found"}
-
-
-@needs_py310
-def test_openapi_schema(client: TestClient):
-    response = client.get("/openapi.json")
-    assert response.status_code == 200, response.text
-    assert response.json() == {
-        "openapi": "3.1.0",
-        "info": {"title": "FastAPI", "version": "0.1.0"},
-        "paths": {
-            "/items/": {
-                "get": {
-                    "summary": "Read Items",
-                    "operationId": "read_items_items__get",
-                    "responses": {
-                        "200": {
-                            "description": "Successful Response",
-                            "content": {"application/json": {"schema": {}}},
-                        },
-                        "422": {
-                            "description": "Validation Error",
-                            "content": {
-                                "application/json": {
-                                    "schema": {
-                                        "$ref": "#/components/schemas/HTTPValidationError"
-                                    }
-                                }
-                            },
-                        },
-                    },
-                }
-            }
-        },
-        "components": {
-            "schemas": {
-                "HTTPValidationError": {
-                    "title": "HTTPValidationError",
-                    "type": "object",
-                    "properties": {
-                        "detail": {
-                            "title": "Detail",
-                            "type": "array",
-                            "items": {"$ref": "#/components/schemas/ValidationError"},
-                        }
-                    },
-                },
-                "ValidationError": {
-                    "title": "ValidationError",
-                    "required": ["loc", "msg", "type"],
-                    "type": "object",
-                    "properties": {
-                        "loc": {
-                            "title": "Location",
-                            "type": "array",
-                            "items": {
-                                "anyOf": [{"type": "string"}, {"type": "integer"}]
-                            },
-                        },
-                        "msg": {"title": "Message", "type": "string"},
-                        "type": {"title": "Error Type", "type": "string"},
-                    },
-                },
-            }
-        },
-    }