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

66 statements  

« prev     ^ index     » next       coverage.py v7.6.1, created at 2025-12-19 20:29 +0000

1import os 1abcdefghi

2import subprocess 1abcdefghi

3import sys 1abcdefghi

4 

5import pytest 1abcdefghi

6from typer.testing import CliRunner 1abcdefghi

7 

8from docs_src.subcommands import tutorial001 1abcdefghi

9 

10runner = CliRunner() 1abcdefghi

11 

12 

13@pytest.fixture() 1abcdefghi

14def mod(monkeypatch): 1abcdefghi

15 with monkeypatch.context(): 1abcdefghi

16 monkeypatch.syspath_prepend(list(tutorial001.__path__)[0]) 1abcdefghi

17 from docs_src.subcommands.tutorial001 import main 1abcdefghi

18 

19 return main 1abcdefghi

20 

21 

22@pytest.fixture() 1abcdefghi

23def app(mod): 1abcdefghi

24 return mod.app 1abcdefghi

25 

26 

27def test_help(app): 1abcdefghi

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

29 assert result.exit_code == 0 1abcdefghi

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

31 assert "Commands" in result.output 1abcdefghi

32 assert "items" in result.output 1abcdefghi

33 assert "users" in result.output 1abcdefghi

34 

35 

36def test_help_items(app): 1abcdefghi

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

38 assert result.exit_code == 0 1abcdefghi

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

40 assert "Commands" in result.output 1abcdefghi

41 assert "create" in result.output 1abcdefghi

42 assert "delete" in result.output 1abcdefghi

43 assert "sell" in result.output 1abcdefghi

44 

45 

46def test_items_create(app): 1abcdefghi

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

48 assert result.exit_code == 0 1abcdefghi

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

50 

51 

52def test_items_sell(app): 1abcdefghi

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

54 assert result.exit_code == 0 1abcdefghi

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

56 

57 

58def test_items_delete(app): 1abcdefghi

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

60 assert result.exit_code == 0 1abcdefghi

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

62 

63 

64def test_help_users(app): 1abcdefghi

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

66 assert result.exit_code == 0 1abcdefghi

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

68 assert "Commands" in result.output 1abcdefghi

69 assert "create" in result.output 1abcdefghi

70 assert "delete" in result.output 1abcdefghi

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

72 

73 

74def test_users_create(app): 1abcdefghi

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

76 assert result.exit_code == 0 1abcdefghi

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

78 

79 

80def test_users_delete(app): 1abcdefghi

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

82 assert result.exit_code == 0 1abcdefghi

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

84 

85 

86def test_scripts(mod): 1abcdefghi

87 from docs_src.subcommands.tutorial001 import items, users 1abcdefghi

88 

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

90 env["PYTHONPATH"] = ":".join(list(tutorial001.__path__)) 1abcdefghi

91 

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

93 result = subprocess.run( 1abcdefghi

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 1abcdefghi