Coverage for tests / test_request_params / test_path / test_required_str.py: 100%
27 statements
« prev ^ index » next coverage.py v7.13.3, created at 2026-02-12 18:15 +0000
« prev ^ index » next coverage.py v7.13.3, created at 2026-02-12 18:15 +0000
1from typing import Annotated 1abcd
3import pytest 1abcd
4from fastapi import FastAPI, Path 1abcd
5from fastapi.testclient import TestClient 1abcd
6from inline_snapshot import Is, snapshot 1abcd
8app = FastAPI() 1abcd
11@app.get("/required-str/{p}") 1abcd
12async def read_required_str(p: Annotated[str, Path()]): 1abcd
13 return {"p": p} 1efg
16@app.get("/required-alias/{p_alias}") 1abcd
17async def read_required_alias(p: Annotated[str, Path(alias="p_alias")]): 1abcd
18 return {"p": p} 1efg
21@app.get("/required-validation-alias/{p_val_alias}") 1abcd
22def read_required_validation_alias( 1abcd
23 p: Annotated[str, Path(validation_alias="p_val_alias")],
24):
25 return {"p": p} 1efg
28@app.get("/required-alias-and-validation-alias/{p_val_alias}") 1abcd
29def read_required_alias_and_validation_alias( 1abcd
30 p: Annotated[str, Path(alias="p_alias", validation_alias="p_val_alias")],
31):
32 return {"p": p} 1efg
35@pytest.mark.parametrize( 1abcd
36 ("path", "expected_name", "expected_title"),
37 [
38 pytest.param("/required-str/{p}", "p", "P", id="required-str"),
39 pytest.param(
40 "/required-alias/{p_alias}", "p_alias", "P Alias", id="required-alias"
41 ),
42 pytest.param(
43 "/required-validation-alias/{p_val_alias}",
44 "p_val_alias",
45 "P Val Alias",
46 id="required-validation-alias",
47 ),
48 pytest.param(
49 "/required-alias-and-validation-alias/{p_val_alias}",
50 "p_val_alias",
51 "P Val Alias",
52 id="required-alias-and-validation-alias",
53 ),
54 ],
55)
56def test_schema(path: str, expected_name: str, expected_title: str): 1abcd
57 assert app.openapi()["paths"][path]["get"]["parameters"] == snapshot( 1hij
58 [
59 {
60 "required": True,
61 "schema": {"title": Is(expected_title), "type": "string"},
62 "name": Is(expected_name),
63 "in": "path",
64 }
65 ]
66 )
69@pytest.mark.parametrize( 1abcd
70 "path",
71 [
72 pytest.param("/required-str", id="required-str"),
73 pytest.param("/required-alias", id="required-alias"),
74 pytest.param(
75 "/required-validation-alias",
76 id="required-validation-alias",
77 ),
78 pytest.param(
79 "/required-alias-and-validation-alias",
80 id="required-alias-and-validation-alias",
81 ),
82 ],
83)
84def test_success(path: str): 1abcd
85 client = TestClient(app) 1efg
86 response = client.get(f"{path}/hello") 1efg
87 assert response.status_code == 200, response.text 1efg
88 assert response.json() == {"p": "hello"} 1efg