-
-
Notifications
You must be signed in to change notification settings - Fork 407
/
test_cli.py
225 lines (186 loc) · 8.23 KB
/
test_cli.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
import unittest
import unittest.mock as mock
import pytest
import os
import sys
import shutil
import tempfile
import gettext
import contextlib
import click
from click.testing import CliRunner
import opsdroid.__main__
import opsdroid.cli
import opsdroid.cli.version
from opsdroid.cli.start import configure_lang
import opsdroid.web as web
from opsdroid.const import __version__
from opsdroid.core import OpsDroid
from opsdroid.helper import del_rw
class TestCLI(unittest.TestCase):
"""Test the opsdroid CLI."""
def setUp(self):
self._tmp_dir = os.path.join(tempfile.gettempdir(), "opsdroid_tests")
with contextlib.suppress(FileExistsError):
os.makedirs(self._tmp_dir, mode=0o777)
configure_lang({})
def tearDown(self):
with contextlib.suppress(PermissionError):
shutil.rmtree(self._tmp_dir, onerror=del_rw)
def test_init_runs(self):
with mock.patch.object(opsdroid.cli, "cli") as mainfunc:
with mock.patch.object(opsdroid.__main__, "__name__", "__main__"):
opsdroid.__main__.init()
self.assertTrue(mainfunc.called)
def test_init_doesnt_run(self):
with mock.patch.object(opsdroid.cli, "cli") as mainfunc:
with mock.patch.object(opsdroid.__main__, "__name__", "opsdroid"):
opsdroid.__main__.init()
self.assertFalse(mainfunc.called)
def test_configure_no_lang(self):
with mock.patch.object(gettext, "translation") as translation:
from opsdroid.cli.start import configure_lang
configure_lang({})
self.assertFalse(translation.return_value.install.called)
def test_configure_lang(self):
with mock.patch.object(gettext, "translation") as translation:
from opsdroid.cli.utils import configure_lang
configure_lang({"lang": "es"})
self.assertTrue(translation.return_value.install.called)
def test_welcome_message(self):
config = {"welcome-message": True}
from opsdroid.cli.utils import welcome_message
welcome_message(config)
self.assertLogs("_LOGGER", "info")
def test_welcome_exception(self):
config = {}
from opsdroid.cli.utils import welcome_message
response = welcome_message(config)
self.assertIsNone(response)
def test_check_version_27(self):
with mock.patch.object(sys, "version_info") as version_info:
version_info.major = 2
version_info.minor = 7
with self.assertRaises(SystemExit):
from opsdroid.cli.utils import check_dependencies
check_dependencies()
def test_check_version_34(self):
with mock.patch.object(sys, "version_info") as version_info:
version_info.major = 3
version_info.minor = 4
with self.assertRaises(SystemExit):
from opsdroid.cli.utils import check_dependencies
check_dependencies()
def test_check_version_35(self):
with mock.patch.object(sys, "version_info") as version_info:
version_info.major = 3
version_info.minor = 5
with self.assertRaises(SystemExit):
from opsdroid.cli.utils import check_dependencies
check_dependencies()
def test_check_version_36(self):
with mock.patch.object(sys, "version_info") as version_info:
version_info.major = 3
version_info.minor = 6
try:
from opsdroid.cli.utils import check_dependencies
check_dependencies()
except SystemExit:
self.fail("check_dependencies() exited unexpectedly!")
def test_check_version_37(self):
with mock.patch.object(sys, "version_info") as version_info:
version_info.major = 3
version_info.minor = 7
try:
from opsdroid.cli.start import check_dependencies
check_dependencies()
except SystemExit:
self.fail("check_dependencies() exited unexpectedly!")
def test_gen_config(self):
with mock.patch.object(click, "echo") as click_echo, mock.patch(
"opsdroid.core.OpsDroid.load"
) as opsdroid_load:
runner = CliRunner()
from opsdroid.cli.config import gen
result = runner.invoke(gen, [])
self.assertTrue(click_echo.called)
self.assertFalse(opsdroid_load.called)
self.assertEqual(result.exit_code, 0)
def test_deprecated_gen_config(self):
with mock.patch.object(click, "echo") as click_echo, mock.patch(
"opsdroid.core.OpsDroid.load"
) as opsdroid_load:
runner = CliRunner()
with pytest.warns(DeprecationWarning, match=".*opsdroid config gen.*"):
result = runner.invoke(opsdroid.cli.cli, ["--gen-config"])
self.assertTrue(click_echo.called)
self.assertFalse(opsdroid_load.called)
self.assertEqual(result.exit_code, 0)
def test_print_version(self):
with mock.patch.object(click, "echo") as click_echo, mock.patch(
"opsdroid.core.OpsDroid.load"
) as opsdroid_load:
runner = CliRunner()
from opsdroid.cli.version import version
result = runner.invoke(version, [])
self.assertTrue(click_echo.called)
self.assertFalse(opsdroid_load.called)
self.assertTrue(__version__ in click_echo.call_args[0][0])
self.assertEqual(result.exit_code, 0)
def test_deprecated_print_version(self):
with mock.patch.object(click, "echo") as click_echo, mock.patch(
"opsdroid.core.OpsDroid.load"
) as opsdroid_load:
runner = CliRunner()
with pytest.warns(DeprecationWarning, match=".*opsdroid version.*"):
result = runner.invoke(opsdroid.cli.cli, ["--version"])
self.assertTrue(click_echo.called)
self.assertFalse(opsdroid_load.called)
self.assertTrue(__version__ in click_echo.call_args[0][0])
self.assertEqual(result.exit_code, 0)
def test_edit_files_config(self):
with mock.patch.object(click, "echo") as click_echo, mock.patch(
"subprocess.run"
) as editor:
runner = CliRunner()
from opsdroid.cli.config import edit
result = runner.invoke(edit, [], input="y")
self.assertTrue(click_echo.called)
self.assertTrue(editor.called)
self.assertEqual(result.exit_code, 0)
def test_deprecated_edit_files_config(self):
with mock.patch.object(click, "echo") as click_echo, mock.patch(
"subprocess.run"
) as editor:
runner = CliRunner()
with pytest.warns(DeprecationWarning, match=".*opsdroid config edit.*"):
result = runner.invoke(opsdroid.cli.cli, ["--edit-config"], input="y")
self.assertTrue(click_echo.called)
self.assertTrue(editor.called)
self.assertEqual(result.exit_code, 0)
def test_edit_files_log(self):
with mock.patch.object(click, "echo") as click_echo, mock.patch(
"subprocess.run"
) as editor:
runner = CliRunner()
from opsdroid.cli.logs import logs
result = runner.invoke(logs, [])
self.assertTrue(click_echo.called)
self.assertTrue(editor.called)
self.assertEqual(result.exit_code, 0)
def test_deprecated_edit_files_log(self):
with mock.patch.object(click, "echo") as click_echo, mock.patch(
"subprocess.run"
) as editor:
runner = CliRunner()
with pytest.warns(DeprecationWarning, match=".*opsdroid logs.*"):
result = runner.invoke(opsdroid.cli.cli, ["--view-log"])
self.assertTrue(click_echo.called)
self.assertTrue(editor.called)
self.assertEqual(result.exit_code, 0)
def test_main(self):
with pytest.warns(DeprecationWarning, match=".*opsdroid start.*"):
runner = CliRunner()
with mock.patch.object(OpsDroid, "run") as mock_run:
runner.invoke(opsdroid.cli.cli, [])
assert mock_run.called