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

1from typing import Annotated 1abcd

2 

3import pytest 1abcd

4from fastapi import FastAPI, Path 1abcd

5from fastapi.testclient import TestClient 1abcd

6from inline_snapshot import Is, snapshot 1abcd

7 

8app = FastAPI() 1abcd

9 

10 

11@app.get("/required-str/{p}") 1abcd

12async def read_required_str(p: Annotated[str, Path()]): 1abcd

13 return {"p": p} 1efg

14 

15 

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

19 

20 

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

26 

27 

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

33 

34 

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 ) 

67 

68 

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