Skip to content

Commit fcaaf50

Browse files
authored
migrate unittest to pytest (#438)
## 📝 Description removed unittest library dependencies in all unit tests removed unittest command from Makefile ## ✔️ How to Test **What are the steps to reproduce the issue or verify the changes?** make testunit ## 📷 Preview **If applicable, include a screenshot or code snippet of this change. Otherwise, please remove this section.**
1 parent dab9a60 commit fcaaf50

File tree

6 files changed

+82
-77
lines changed

6 files changed

+82
-77
lines changed

.github/workflows/unit-tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ jobs:
2020
python-version: '3.x'
2121

2222
- name: Install Python wheel
23-
run: pip install wheel boto3
23+
run: pip install wheel boto3 mock
2424

2525
- name: Update cert
2626
run: pip install certifi -U

Makefile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ clean:
4646
testunit: export LINODE_CLI_TEST_MODE = 1
4747
testunit:
4848
pytest tests/unit
49-
python -m unittest tests/unit/*.py
5049

5150
.PHONY: testint
5251
testint:

tests/unit/conftest.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import configparser
2-
import sys
32

43
import pytest
54

@@ -41,7 +40,7 @@ def mock_cli(
4140
# We need this to suppress warnings for operations that don't
4241
# have access to the cli.suppress_warnings attribute.
4342
# e.g. operation defaults
44-
sys.argv.append("--suppress-warnings")
43+
# sys.argv.append("--suppress-warnings")
4544

4645
return result
4746

tests/unit/test_api_request.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
import io
77
import json
88
from types import SimpleNamespace
9-
from unittest.mock import Mock, patch
109

1110
import requests
11+
from mock import Mock, patch
1212

1313
from linodecli import api_request
1414

tests/unit/completion.py renamed to tests/unit/test_completion.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,12 @@
33
Unit tests for linodecli.completion
44
"""
55

6-
import unittest
7-
from unittest.mock import mock_open, patch
6+
from mock import mock_open, patch
87

98
from linodecli import completion
109

1110

12-
class CompletionTests(unittest.TestCase):
11+
class TestCompletion:
1312
"""
1413
Unit tests for linodecli.completion
1514
"""
@@ -48,37 +47,38 @@ class CompletionTests(unittest.TestCase):
4847
complete -F _linode_cli linode
4948
complete -F _linode_cli lin"""
5049

51-
def test_fish_completion(self):
50+
def test_fish_completion(self, mocker):
5251
"""
5352
Test if the fish completion renders correctly
5453
"""
5554
actual = completion.get_fish_completions(self.ops)
56-
self.assertEqual(actual, self.fish_expected)
55+
assert actual == self.fish_expected
5756

58-
def test_bash_completion(self):
57+
def test_bash_completion(self, mocker):
5958
"""
6059
Test if the bash completion renders correctly
6160
"""
61+
# mocker = mocker.patch('linodecli-completion.get_bash_completions', return_value=self.bash_expected)
6262
actual = completion.get_bash_completions(self.ops)
63-
self.assertEqual(actual, self.bash_expected)
63+
assert actual == self.bash_expected
6464

6565
def test_get_completions(self):
6666
"""
6767
Test get_completions for arg parse
6868
"""
6969
actual = completion.get_completions(self.ops, False, "bash")
70-
self.assertEqual(actual, self.bash_expected)
70+
assert actual == self.bash_expected
7171

7272
actual = completion.get_completions(self.ops, False, "fish")
73-
self.assertEqual(actual, self.fish_expected)
73+
assert actual == self.fish_expected
7474

7575
actual = completion.get_completions(self.ops, False, "notrealshell")
76-
self.assertIn("invoke", actual)
76+
assert "invoke" in actual
7777

7878
actual = completion.get_completions(self.ops, True, "")
79-
self.assertIn("[SHELL]", actual)
79+
assert "[SHELL]" in actual
8080

81-
def test_bake_completions(self):
81+
def test_bake_completions(self, mocker):
8282
"""
8383
Test bake_completions write to file
8484
"""
@@ -90,8 +90,8 @@ def test_bake_completions(self):
9090

9191
completion.bake_completions(new_ops)
9292

93-
self.assertNotIn("_base_url", new_ops)
94-
self.assertNotIn("_spec_version", new_ops)
93+
assert "_base_url" not in new_ops
94+
assert "_spec_version" not in new_ops
9595

9696
m.assert_called_with("linode-cli.sh", "w", encoding="utf-8")
9797
m.return_value.write.assert_called_once_with(self.bash_expected)

tests/unit/configuration.py renamed to tests/unit/test_configuration.py

Lines changed: 65 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@
77
import io
88
import os
99
import sys
10-
import unittest
11-
from unittest.mock import call, mock_open, patch
1210

11+
import pytest
1312
import requests_mock
13+
from mock import call, mock_open, patch
1414

1515
from linodecli import configuration
1616

1717

18-
class ConfigurationTests(unittest.TestCase):
18+
class TestConfiguration:
1919
"""
2020
Unit tests for linodecli.configuration
2121
"""
@@ -60,10 +60,10 @@ def test_default_username(self):
6060
"""
6161
conf = self._build_test_config()
6262

63-
self.assertEqual(conf.default_username(), "cli-dev")
63+
assert conf.default_username() == "cli-dev"
6464

6565
conf.config.remove_option("DEFAULT", "default-user")
66-
self.assertEqual(conf.default_username(), "")
66+
assert conf.default_username() == ""
6767

6868
def test_set_user(self):
6969
"""
@@ -72,13 +72,16 @@ def test_set_user(self):
7272
conf = self._build_test_config()
7373

7474
f = io.StringIO()
75-
with self.assertRaises(SystemExit) as cm, contextlib.redirect_stdout(f):
76-
conf.set_user("bad_user")
77-
self.assertEqual(cm.exception.code, 1)
78-
self.assertTrue("not configured" in f.getvalue())
75+
76+
try:
77+
with contextlib.redirect_stdout(f):
78+
conf.set_user("bad_user")
79+
except SystemExit as err:
80+
assert err.code == 1
81+
assert "not configured" in f.getvalue()
7982

8083
conf.set_user("cli-dev2")
81-
self.assertEqual(conf.username, "cli-dev2")
84+
assert conf.username == "cli-dev2"
8285

8386
def test_remove_user(self):
8487
"""
@@ -87,14 +90,17 @@ def test_remove_user(self):
8790
conf = self._build_test_config()
8891

8992
f = io.StringIO()
90-
with self.assertRaises(SystemExit) as cm, contextlib.redirect_stdout(f):
91-
conf.remove_user("cli-dev")
92-
self.assertEqual(cm.exception.code, 1)
93-
self.assertTrue("default user!" in f.getvalue())
93+
94+
try:
95+
with contextlib.redirect_stdout(f):
96+
conf.remove_user("cli-dev")
97+
except SystemExit as err:
98+
assert err.code == 1
99+
assert "default user!" in f.getvalue()
94100

95101
with patch("linodecli.configuration.open", mock_open()):
96102
conf.remove_user("cli-dev2")
97-
self.assertFalse(conf.config.has_section("cli-dev2"))
103+
assert conf.config.has_section("cli-dev2") is False
98104

99105
def test_print_users(self):
100106
"""
@@ -103,10 +109,13 @@ def test_print_users(self):
103109
conf = self._build_test_config()
104110

105111
f = io.StringIO()
106-
with self.assertRaises(SystemExit) as cm, contextlib.redirect_stdout(f):
107-
conf.print_users()
108-
self.assertEqual(cm.exception.code, 0)
109-
self.assertTrue("* cli-dev" in f.getvalue())
112+
113+
try:
114+
with contextlib.redirect_stdout(f):
115+
conf.print_users()
116+
except SystemExit as err:
117+
assert err.code == 0
118+
assert "* cli-dev" in f.getvalue()
110119

111120
def test_set_default_user(self):
112121
"""
@@ -115,60 +124,62 @@ def test_set_default_user(self):
115124
conf = self._build_test_config()
116125

117126
f = io.StringIO()
118-
with self.assertRaises(SystemExit) as cm, contextlib.redirect_stdout(f):
119-
conf.set_default_user("bad_user")
120-
self.assertEqual(cm.exception.code, 1)
121-
self.assertTrue("not configured!" in f.getvalue())
127+
try:
128+
with contextlib.redirect_stdout(f):
129+
conf.set_default_user("bad_user")
130+
except SystemExit as err:
131+
assert err.code == 1
132+
assert "not configured" in f.getvalue()
122133

123134
with patch("linodecli.configuration.open", mock_open()):
124135
conf.set_default_user("cli-dev2")
125-
self.assertEqual(conf.config.get("DEFAULT", "default-user"), "cli-dev2")
136+
assert conf.config.get("DEFAULT", "default-user") == "cli-dev2"
126137

127138
def test_get_token(self):
128139
"""
129140
Test CLIConfig.get_token()
130141
"""
131142
conf = self._build_test_config()
132143
conf.used_env_token = False
133-
self.assertEqual(conf.get_token(), self.test_token)
144+
assert conf.get_token() == self.test_token
134145

135146
def test_get_value(self):
136147
"""
137148
Test CLIConfig.get_value({key})
138149
"""
139150
conf = self._build_test_config()
140-
self.assertEqual(conf.get_value("notakey"), None)
141-
self.assertEqual(conf.get_value("region"), "us-east")
151+
assert conf.get_value("notakey") == None
152+
assert conf.get_value("region") == "us-east"
142153

143154
def test_plugin_set_value(self):
144155
"""
145156
Test CLIConfig.plugin_set_value({key}, {value})
146157
"""
147158
conf = self._build_test_config()
148-
with self.assertRaises(RuntimeError):
159+
with pytest.raises(RuntimeError):
149160
conf.plugin_set_value("anykey", "anyvalue")
150161

151162
conf.running_plugin = "testplugin"
152163

153164
conf.plugin_set_value("testkey", "newvalue")
154165
actual = conf.config.get("cli-dev", "plugin-testplugin-testkey")
155-
self.assertEqual(actual, "newvalue")
166+
assert actual == "newvalue"
156167

157168
def test_plugin_get_value(self):
158169
"""
159170
Test CLIConfig.plugin_get_value({key})
160171
"""
161172
conf = self._build_test_config()
162-
with self.assertRaises(RuntimeError):
173+
with pytest.raises(RuntimeError):
163174
conf.plugin_get_value("anykey")
164175

165176
conf.running_plugin = "testplugin"
166177

167178
actual = conf.plugin_get_value("badkey")
168-
self.assertEqual(actual, None)
179+
assert actual == None
169180

170181
actual = conf.plugin_get_value("testkey")
171-
self.assertEqual(actual, "plugin-test-value")
182+
assert actual == "plugin-test-value"
172183

173184
def test_update(self):
174185
"""
@@ -204,26 +215,26 @@ def test_update(self):
204215
with contextlib.redirect_stdout(f):
205216
result = vars(conf.update(ns, allowed_defaults))
206217

207-
self.assertTrue("--no-defaults" in f.getvalue())
208-
self.assertEqual(result.get("newkey"), "newvalue")
209-
self.assertEqual(result.get("testkey"), "testvalue")
210-
self.assertTrue(isinstance(result.get("authorized_users"), list))
211-
self.assertFalse(result.get("plugin-testplugin-testkey"))
218+
assert "--no-defaults" in f.getvalue()
219+
assert result.get("newkey") == "newvalue"
220+
assert result.get("testkey") == "testvalue"
221+
assert isinstance(result.get("authorized_users"), list)
222+
assert result.get("plugin-testplugin-testkey") is None
212223

213224
f = io.StringIO()
214225
sys.argv.append("--suppress-warnings")
215226
with contextlib.redirect_stdout(f):
216227
result = vars(conf.update(ns, None))
217228
sys.argv.remove("--suppress-warnings")
218229

219-
self.assertFalse("--no-defaults" in f.getvalue())
230+
assert "--no-defaults" not in f.getvalue()
220231

221232
# test that update default engine value correctly when creating database
222233
create_db_action = "mysql-create"
223234
f = io.StringIO()
224235
with contextlib.redirect_stdout(f):
225236
result = vars(conf.update(ns, allowed_defaults, create_db_action))
226-
self.assertEqual(result.get("engine"), "mysql/new-test-engine")
237+
assert result.get("engine") == "mysql/new-test-engine"
227238

228239
def test_write_config(self):
229240
"""
@@ -235,7 +246,7 @@ def test_write_config(self):
235246
m = mock_open()
236247
with patch("builtins.open", m):
237248
conf.write_config()
238-
self.assertIn(call("type = newvalue\n"), m().write.call_args_list)
249+
assert call("type = newvalue\n") in m().write.call_args_list
239250

240251
def test_configure_no_default_terminal(self):
241252
"""
@@ -290,16 +301,14 @@ def mock_input(prompt):
290301
)
291302
conf.configure()
292303

293-
self.assertEqual(conf.get_value("type"), "test-type")
294-
self.assertEqual(conf.get_value("token"), "test-token")
295-
self.assertEqual(conf.get_value("image"), "test-image")
296-
self.assertEqual(conf.get_value("region"), "test-region")
297-
self.assertEqual(conf.get_value("authorized_users"), "cli-dev")
304+
assert conf.get_value("type") == "test-type"
305+
assert conf.get_value("token") == "test-token"
306+
assert conf.get_value("image") == "test-image"
307+
assert conf.get_value("region") == "test-region"
308+
assert conf.get_value("authorized_users") == "cli-dev"
298309
# make sure that we set the default engine value according to type of database
299-
self.assertEqual(conf.get_value("mysql_engine"), "mysql/test-engine")
300-
self.assertEqual(
301-
conf.get_value("postgresql_engine"), "postgresql/test-engine"
302-
)
310+
assert conf.get_value("mysql_engine") == "mysql/test-engine"
311+
assert conf.get_value("postgresql_engine") == "postgresql/test-engine"
303312

304313
def test_configure_default_terminal(self):
305314
"""
@@ -354,13 +363,11 @@ def mock_input(prompt):
354363
)
355364
conf.configure()
356365

357-
self.assertEqual(conf.get_value("type"), "test-type")
358-
self.assertEqual(conf.get_value("image"), "test-image")
359-
self.assertEqual(conf.get_value("region"), "test-region")
360-
self.assertEqual(conf.get_value("authorized_users"), "cli-dev")
361-
self.assertEqual(conf.config.get("DEFAULT", "default-user"), "DEFAULT")
366+
assert conf.get_value("type") == "test-type"
367+
assert conf.get_value("image") == "test-image"
368+
assert conf.get_value("region") == "test-region"
369+
assert conf.get_value("authorized_users") == "cli-dev"
370+
assert conf.config.get("DEFAULT", "default-user") == "DEFAULT"
362371
# make sure that we set the default engine value according to type of database
363-
self.assertEqual(conf.get_value("mysql_engine"), "mysql/test-engine")
364-
self.assertEqual(
365-
conf.get_value("postgresql_engine"), "postgresql/test-engine"
366-
)
372+
assert conf.get_value("mysql_engine") == "mysql/test-engine"
373+
assert conf.get_value("postgresql_engine") == "postgresql/test-engine"

0 commit comments

Comments
 (0)