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

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

9from docs_src.subcommands.tutorial003 import items, users 1abcdefghi

10 

11runner = CliRunner() 1abcdefghi

12 

13 

14@pytest.fixture() 1abcdefghi

15def mod(monkeypatch): 1abcdefghi

16 with monkeypatch.context() as m: 1abcdefghi

17 m.syspath_prepend(list(tutorial003.__path__)[0]) 1abcdefghi

18 from docs_src.subcommands.tutorial003 import main 1abcdefghi

19 

20 return main 1abcdefghi

21 

22 

23@pytest.fixture() 1abcdefghi

24def app(mod): 1abcdefghi

25 return mod.app 1abcdefghi

26 

27 

28def test_help(app): 1abcdefghi

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

30 assert result.exit_code == 0 1abcdefghi

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

32 assert "Commands" in result.output 1abcdefghi

33 assert "items" in result.output 1abcdefghi

34 assert "users" in result.output 1abcdefghi

35 assert "lands" in result.output 1abcdefghi

36 

37 

38def test_help_items(app): 1abcdefghi

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

40 assert result.exit_code == 0 1abcdefghi

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

42 assert "Commands" in result.output 1abcdefghi

43 assert "create" in result.output 1abcdefghi

44 assert "delete" in result.output 1abcdefghi

45 assert "sell" in result.output 1abcdefghi

46 

47 

48def test_items_create(app): 1abcdefghi

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

50 assert result.exit_code == 0 1abcdefghi

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

52 # For coverage, because the monkeypatch above sometimes confuses coverage 

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

54 assert result.exit_code == 0 1abcdefghi

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

56 

57 

58def test_items_sell(app): 1abcdefghi

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

60 assert result.exit_code == 0 1abcdefghi

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

62 # For coverage, because the monkeypatch above sometimes confuses coverage 

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

64 assert result.exit_code == 0 1abcdefghi

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

66 

67 

68def test_items_delete(app): 1abcdefghi

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

70 assert result.exit_code == 0 1abcdefghi

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

72 # For coverage, because the monkeypatch above sometimes confuses coverage 

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

74 assert result.exit_code == 0 1abcdefghi

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

76 

77 

78def test_help_users(app): 1abcdefghi

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

80 assert result.exit_code == 0 1abcdefghi

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

82 assert "Commands" in result.output 1abcdefghi

83 assert "create" in result.output 1abcdefghi

84 assert "delete" in result.output 1abcdefghi

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

86 

87 

88def test_users_create(app): 1abcdefghi

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

90 assert result.exit_code == 0 1abcdefghi

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

92 # For coverage, because the monkeypatch above sometimes confuses coverage 

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

94 assert result.exit_code == 0 1abcdefghi

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

96 

97 

98def test_users_delete(app): 1abcdefghi

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

100 assert result.exit_code == 0 1abcdefghi

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

102 # For coverage, because the monkeypatch above sometimes confuses coverage 

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

104 assert result.exit_code == 0 1abcdefghi

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

106 

107 

108def test_help_lands(app): 1abcdefghi

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

110 assert result.exit_code == 0 1abcdefghi

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

112 assert "Commands" in result.output 1abcdefghi

113 assert "reigns" in result.output 1abcdefghi

114 assert "towns" in result.output 1abcdefghi

115 

116 

117def test_help_lands_reigns(app): 1abcdefghi

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

119 assert result.exit_code == 0 1abcdefghi

120 assert "lands reigns [OPTIONS] COMMAND [ARGS]..." in result.output 1abcdefghi

121 assert "Commands" in result.output 1abcdefghi

122 assert "conquer" in result.output 1abcdefghi

123 assert "destroy" in result.output 1abcdefghi

124 

125 

126def test_lands_reigns_conquer(app): 1abcdefghi

127 result = runner.invoke(app, ["lands", "reigns", "conquer", "Gondor"]) 1abcdefghi

128 assert result.exit_code == 0 1abcdefghi

129 assert "Conquering reign: Gondor" in result.output 1abcdefghi

130 

131 

132def test_lands_reigns_destroy(app): 1abcdefghi

133 result = runner.invoke(app, ["lands", "reigns", "destroy", "Mordor"]) 1abcdefghi

134 assert result.exit_code == 0 1abcdefghi

135 assert "Destroying reign: Mordor" in result.output 1abcdefghi

136 

137 

138def test_help_lands_towns(app): 1abcdefghi

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

140 assert result.exit_code == 0 1abcdefghi

141 assert "lands towns [OPTIONS] COMMAND [ARGS]..." in result.output 1abcdefghi

142 assert "Commands" in result.output 1abcdefghi

143 assert "burn" in result.output 1abcdefghi

144 assert "found" in result.output 1abcdefghi

145 

146 

147def test_lands_towns_found(app): 1abcdefghi

148 result = runner.invoke(app, ["lands", "towns", "found", "Cartagena"]) 1abcdefghi

149 assert result.exit_code == 0 1abcdefghi

150 assert "Founding town: Cartagena" in result.output 1abcdefghi

151 

152 

153def test_lands_towns_burn(app): 1abcdefghi

154 result = runner.invoke(app, ["lands", "towns", "burn", "New Asgard"]) 1abcdefghi

155 assert result.exit_code == 0 1abcdefghi

156 assert "Burning town: New Asgard" in result.output 1abcdefghi

157 

158 

159def test_scripts(mod): 1abcdefghi

160 from docs_src.subcommands.tutorial003 import items, lands, reigns, towns, users 1abcdefghi

161 

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

163 env["PYTHONPATH"] = ":".join(list(tutorial003.__path__)) 1abcdefghi

164 

165 for module in [mod, items, lands, reigns, towns, users]: 1abcdefghi

166 result = subprocess.run( 1abcdefghi

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

168 capture_output=True, 

169 encoding="utf-8", 

170 env=env, 

171 ) 

172 assert "Usage" in result.stdout 1abcdefghi