Coverage for tests / test_tutorial / test_subcommands / test_tutorial001.py: 100%

66 statements  

« prev     ^ index     » next       coverage.py v7.13.1, created at 2026-03-26 21:46 +0000

1import os 1abcdefg

2import subprocess 1abcdefg

3import sys 1abcdefg

4 

5import pytest 1abcdefg

6from typer.testing import CliRunner 1abcdefg

7 

8from docs_src.subcommands import tutorial001_py310 1abcdefg

9 

10runner = CliRunner() 1abcdefg

11 

12 

13@pytest.fixture() 1abcdefg

14def mod(monkeypatch): 1abcdefg

15 with monkeypatch.context(): 1abcdefg

16 monkeypatch.syspath_prepend(list(tutorial001_py310.__path__)[0]) 1abcdefg

17 from docs_src.subcommands.tutorial001_py310 import main 1abcdefg

18 

19 return main 1abcdefg

20 

21 

22@pytest.fixture() 1abcdefg

23def app(mod): 1abcdefg

24 return mod.app 1abcdefg

25 

26 

27def test_help(app): 1abcdefg

28 result = runner.invoke(app, ["--help"]) 1abcdefg

29 assert result.exit_code == 0 1abcdefg

30 assert "[OPTIONS] COMMAND [ARGS]..." in result.output 1abcdefg

31 assert "Commands" in result.output 1abcdefg

32 assert "items" in result.output 1abcdefg

33 assert "users" in result.output 1abcdefg

34 

35 

36def test_help_items(app): 1abcdefg

37 result = runner.invoke(app, ["items", "--help"]) 1abcdefg

38 assert result.exit_code == 0 1abcdefg

39 assert "[OPTIONS] COMMAND [ARGS]..." in result.output 1abcdefg

40 assert "Commands" in result.output 1abcdefg

41 assert "create" in result.output 1abcdefg

42 assert "delete" in result.output 1abcdefg

43 assert "sell" in result.output 1abcdefg

44 

45 

46def test_items_create(app): 1abcdefg

47 result = runner.invoke(app, ["items", "create", "Wand"]) 1abcdefg

48 assert result.exit_code == 0 1abcdefg

49 assert "Creating item: Wand" in result.output 1abcdefg

50 

51 

52def test_items_sell(app): 1abcdefg

53 result = runner.invoke(app, ["items", "sell", "Vase"]) 1abcdefg

54 assert result.exit_code == 0 1abcdefg

55 assert "Selling item: Vase" in result.output 1abcdefg

56 

57 

58def test_items_delete(app): 1abcdefg

59 result = runner.invoke(app, ["items", "delete", "Vase"]) 1abcdefg

60 assert result.exit_code == 0 1abcdefg

61 assert "Deleting item: Vase" in result.output 1abcdefg

62 

63 

64def test_help_users(app): 1abcdefg

65 result = runner.invoke(app, ["users", "--help"]) 1abcdefg

66 assert result.exit_code == 0 1abcdefg

67 assert "[OPTIONS] COMMAND [ARGS]..." in result.output 1abcdefg

68 assert "Commands" in result.output 1abcdefg

69 assert "create" in result.output 1abcdefg

70 assert "delete" in result.output 1abcdefg

71 assert "sell" not in result.output 1abcdefg

72 

73 

74def test_users_create(app): 1abcdefg

75 result = runner.invoke(app, ["users", "create", "Camila"]) 1abcdefg

76 assert result.exit_code == 0 1abcdefg

77 assert "Creating user: Camila" in result.output 1abcdefg

78 

79 

80def test_users_delete(app): 1abcdefg

81 result = runner.invoke(app, ["users", "delete", "Camila"]) 1abcdefg

82 assert result.exit_code == 0 1abcdefg

83 assert "Deleting user: Camila" in result.output 1abcdefg

84 

85 

86def test_scripts(mod): 1abcdefg

87 from docs_src.subcommands.tutorial001_py310 import items, users 1abcdefg

88 

89 env = os.environ.copy() 1abcdefg

90 env["PYTHONPATH"] = ":".join(list(tutorial001_py310.__path__)) 1abcdefg

91 

92 for module in [mod, items, users]: 1abcdefg

93 result = subprocess.run( 1abcdefg

94 [sys.executable, "-m", "coverage", "run", module.__file__, "--help"], 

95 capture_output=True, 

96 encoding="utf-8", 

97 env=env, 

98 ) 

99 assert "Usage" in result.stdout 1abcdefg