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

120 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 tutorial003_py310 1abcdefg

9from docs_src.subcommands.tutorial003_py310 import items, users 1abcdefg

10 

11runner = CliRunner() 1abcdefg

12 

13 

14@pytest.fixture() 1abcdefg

15def mod(monkeypatch): 1abcdefg

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

17 m.syspath_prepend(list(tutorial003_py310.__path__)[0]) 1abcdefg

18 from docs_src.subcommands.tutorial003_py310 import main 1abcdefg

19 

20 return main 1abcdefg

21 

22 

23@pytest.fixture() 1abcdefg

24def app(mod): 1abcdefg

25 return mod.app 1abcdefg

26 

27 

28def test_help(app): 1abcdefg

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

30 assert result.exit_code == 0 1abcdefg

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

32 assert "Commands" in result.output 1abcdefg

33 assert "items" in result.output 1abcdefg

34 assert "users" in result.output 1abcdefg

35 assert "lands" in result.output 1abcdefg

36 

37 

38def test_help_items(app): 1abcdefg

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

40 assert result.exit_code == 0 1abcdefg

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

42 assert "Commands" in result.output 1abcdefg

43 assert "create" in result.output 1abcdefg

44 assert "delete" in result.output 1abcdefg

45 assert "sell" in result.output 1abcdefg

46 

47 

48def test_items_create(app): 1abcdefg

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

50 assert result.exit_code == 0 1abcdefg

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

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

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

54 assert result.exit_code == 0 1abcdefg

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

56 

57 

58def test_items_sell(app): 1abcdefg

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

60 assert result.exit_code == 0 1abcdefg

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

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

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

64 assert result.exit_code == 0 1abcdefg

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

66 

67 

68def test_items_delete(app): 1abcdefg

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

70 assert result.exit_code == 0 1abcdefg

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

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

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

74 assert result.exit_code == 0 1abcdefg

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

76 

77 

78def test_help_users(app): 1abcdefg

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

80 assert result.exit_code == 0 1abcdefg

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

82 assert "Commands" in result.output 1abcdefg

83 assert "create" in result.output 1abcdefg

84 assert "delete" in result.output 1abcdefg

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

86 

87 

88def test_users_create(app): 1abcdefg

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

90 assert result.exit_code == 0 1abcdefg

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

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

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

94 assert result.exit_code == 0 1abcdefg

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

96 

97 

98def test_users_delete(app): 1abcdefg

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

100 assert result.exit_code == 0 1abcdefg

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

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

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

104 assert result.exit_code == 0 1abcdefg

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

106 

107 

108def test_help_lands(app): 1abcdefg

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

110 assert result.exit_code == 0 1abcdefg

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

112 assert "Commands" in result.output 1abcdefg

113 assert "reigns" in result.output 1abcdefg

114 assert "towns" in result.output 1abcdefg

115 

116 

117def test_help_lands_reigns(app): 1abcdefg

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

119 assert result.exit_code == 0 1abcdefg

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

121 assert "Commands" in result.output 1abcdefg

122 assert "conquer" in result.output 1abcdefg

123 assert "destroy" in result.output 1abcdefg

124 

125 

126def test_lands_reigns_conquer(app): 1abcdefg

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

128 assert result.exit_code == 0 1abcdefg

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

130 

131 

132def test_lands_reigns_destroy(app): 1abcdefg

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

134 assert result.exit_code == 0 1abcdefg

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

136 

137 

138def test_help_lands_towns(app): 1abcdefg

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

140 assert result.exit_code == 0 1abcdefg

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

142 assert "Commands" in result.output 1abcdefg

143 assert "burn" in result.output 1abcdefg

144 assert "found" in result.output 1abcdefg

145 

146 

147def test_lands_towns_found(app): 1abcdefg

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

149 assert result.exit_code == 0 1abcdefg

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

151 

152 

153def test_lands_towns_burn(app): 1abcdefg

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

155 assert result.exit_code == 0 1abcdefg

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

157 

158 

159def test_scripts(mod): 1abcdefg

160 from docs_src.subcommands.tutorial003_py310 import ( 1abcdefg

161 items, 

162 lands, 

163 reigns, 

164 towns, 

165 users, 

166 ) 

167 

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

169 env["PYTHONPATH"] = ":".join(list(tutorial003_py310.__path__)) 1abcdefg

170 

171 for module in [mod, items, lands, reigns, towns, users]: 1abcdefg

172 result = subprocess.run( 1abcdefg

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

174 capture_output=True, 

175 encoding="utf-8", 

176 env=env, 

177 ) 

178 assert "Usage" in result.stdout 1abcdefg