Coverage for tests/test_utils_default_file.py: 100%

50 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-11-11 09:18 +0000

1import importlib 1abcdefghijklmn

2import sys 1abcdefghijklmn

3from pathlib import Path 1abcdefghijklmn

4 

5import pytest 1abcdefghijklmn

6from pytest import CaptureFixture 1abcdefghijklmn

7 

8from fastapi_cli.discover import get_import_data 1abcdefghijklmn

9from fastapi_cli.exceptions import FastAPICLIException 1abcdefghijklmn

10 

11from .utils import changing_dir 1abcdefghijklmn

12 

13assets_path = Path(__file__).parent / "assets" 1abcdefghijklmn

14 

15 

16def test_single_file_main() -> None: 1abcdefghijklmn

17 root_path = assets_path / "default_files" / "default_main" 1opqrstuvwxyzAB

18 old_sys_path = sys.path.copy() 1opqrstuvwxyzAB

19 with changing_dir(root_path): 1opqrstuvwxyzAB

20 sys.path.insert(0, str(root_path)) 1opqrstuvwxyzAB

21 mod = importlib.import_module("main") 1opqrstuvwxyzAB

22 

23 importlib.reload(mod) 1opqrstuvwxyzAB

24 import_data = get_import_data() 1opqrstuvwxyzAB

25 

26 assert import_data.import_string == "main:app" 1opqrstuvwxyzAB

27 assert import_data.module_data.extra_sys_path == root_path 1opqrstuvwxyzAB

28 assert import_data.module_data.module_import_str == "main" 1opqrstuvwxyzAB

29 

30 sys.path = old_sys_path 1opqrstuvwxyzAB

31 

32 

33def test_single_file_app() -> None: 1abcdefghijklmn

34 root_path = assets_path / "default_files" / "default_app" 1CDEFGHIJKLMNOP

35 old_sys_path = sys.path.copy() 1CDEFGHIJKLMNOP

36 with changing_dir(root_path): 1CDEFGHIJKLMNOP

37 sys.path.insert(0, str(root_path)) 1CDEFGHIJKLMNOP

38 mod = importlib.import_module("app") 1CDEFGHIJKLMNOP

39 

40 importlib.reload(mod) 1CDEFGHIJKLMNOP

41 import_data = get_import_data() 1CDEFGHIJKLMNOP

42 

43 assert import_data.import_string == "app:app" 1CDEFGHIJKLMNOP

44 assert import_data.module_data.extra_sys_path == root_path 1CDEFGHIJKLMNOP

45 assert import_data.module_data.module_import_str == "app" 1CDEFGHIJKLMNOP

46 

47 sys.path = old_sys_path 1CDEFGHIJKLMNOP

48 

49 

50def test_single_file_api() -> None: 1abcdefghijklmn

51 root_path = assets_path / "default_files" / "default_api" 1QRSTUVWXYZ0123

52 old_sys_path = sys.path.copy() 1QRSTUVWXYZ0123

53 with changing_dir(root_path): 1QRSTUVWXYZ0123

54 sys.path.insert(0, str(root_path)) 1QRSTUVWXYZ0123

55 mod = importlib.import_module("api") 1QRSTUVWXYZ0123

56 

57 importlib.reload(mod) 1QRSTUVWXYZ0123

58 import_data = get_import_data() 1QRSTUVWXYZ0123

59 

60 assert import_data.import_string == "api:app" 1QRSTUVWXYZ0123

61 assert import_data.module_data.extra_sys_path == root_path 1QRSTUVWXYZ0123

62 assert import_data.module_data.module_import_str == "api" 1QRSTUVWXYZ0123

63 

64 sys.path = old_sys_path 1QRSTUVWXYZ0123

65 

66 

67def test_non_default_file(capsys: CaptureFixture[str]) -> None: 1abcdefghijklmn

68 with changing_dir(assets_path / "default_files" / "non_default"): 1456789!#$%'()*

69 with pytest.raises(FastAPICLIException) as e: 1456789!#$%'()*

70 get_import_data() 1456789!#$%'()*

71 assert ( 1456789!#$%'()*

72 "Could not find a default file to run, please provide an explicit path" 

73 in e.value.args[0] 

74 )