diff options
Diffstat (limited to 'gitlab/tests')
-rw-r--r-- | gitlab/tests/objects/test_application.py | 8 | ||||
-rw-r--r-- | gitlab/tests/objects/test_commits.py | 16 | ||||
-rw-r--r-- | gitlab/tests/objects/test_groups.py | 26 | ||||
-rw-r--r-- | gitlab/tests/objects/test_projects.py | 70 | ||||
-rw-r--r-- | gitlab/tests/test_base.py | 58 | ||||
-rw-r--r-- | gitlab/tests/test_cli.py | 70 | ||||
-rw-r--r-- | gitlab/tests/test_config.py | 81 | ||||
-rw-r--r-- | gitlab/tests/test_exceptions.py | 5 | ||||
-rw-r--r-- | gitlab/tests/test_gitlab.py | 335 | ||||
-rw-r--r-- | gitlab/tests/test_mixins.py | 184 | ||||
-rw-r--r-- | gitlab/tests/test_types.py | 24 | ||||
-rw-r--r-- | gitlab/tests/test_utils.py | 8 |
12 files changed, 446 insertions, 439 deletions
diff --git a/gitlab/tests/objects/test_application.py b/gitlab/tests/objects/test_application.py index 50ca1ad..a10691b 100644 --- a/gitlab/tests/objects/test_application.py +++ b/gitlab/tests/objects/test_application.py @@ -80,13 +80,13 @@ class TestApplicationAppearance(unittest.TestCase): with HTTMock(resp_get_appearance), HTTMock(resp_update_appearance): appearance = self.gl.appearance.get() - self.assertEqual(appearance.title, self.title) - self.assertEqual(appearance.description, self.description) + assert appearance.title == self.title + assert appearance.description == self.description appearance.title = self.new_title appearance.description = self.new_description appearance.save() - self.assertEqual(appearance.title, self.new_title) - self.assertEqual(appearance.description, self.new_description) + assert appearance.title == self.new_title + assert appearance.description == self.new_description def test_update_appearance(self): @urlmatch( diff --git a/gitlab/tests/objects/test_commits.py b/gitlab/tests/objects/test_commits.py index 7e7c3b4..bf7d5a8 100644 --- a/gitlab/tests/objects/test_commits.py +++ b/gitlab/tests/objects/test_commits.py @@ -78,8 +78,8 @@ class TestCommit(TestProject): @with_httmock(resp_get_commit) def test_get_commit(self): commit = self.project.commits.get("6b2257ea") - self.assertEqual(commit.short_id, "6b2257ea") - self.assertEqual(commit.title, "Initial commit") + assert commit.short_id == "6b2257ea" + assert commit.title == "Initial commit" @with_httmock(resp_create_commit) def test_create_commit(self): @@ -89,19 +89,19 @@ class TestCommit(TestProject): "actions": [{"action": "create", "file_path": "README", "content": "",}], } commit = self.project.commits.create(data) - self.assertEqual(commit.short_id, "ed899a2f") - self.assertEqual(commit.title, data["commit_message"]) + assert commit.short_id == "ed899a2f" + assert commit.title == data["commit_message"] @with_httmock(resp_revert_commit) def test_revert_commit(self): commit = self.project.commits.get("6b2257ea", lazy=True) revert_commit = commit.revert(branch="master") - self.assertEqual(revert_commit["short_id"], "8b090c1b") - self.assertEqual(revert_commit["title"], 'Revert "Initial commit"') + assert revert_commit["short_id"] == "8b090c1b" + assert revert_commit["title"] == 'Revert "Initial commit"' @with_httmock(resp_get_commit_gpg_signature) def test_get_commit_gpg_signature(self): commit = self.project.commits.get("6b2257ea", lazy=True) signature = commit.signature() - self.assertEqual(signature["gpg_key_primary_keyid"], "8254AAB3FBD54AC9") - self.assertEqual(signature["verification_status"], "verified") + assert signature["gpg_key_primary_keyid"] == "8254AAB3FBD54AC9" + assert signature["verification_status"] == "verified" diff --git a/gitlab/tests/objects/test_groups.py b/gitlab/tests/objects/test_groups.py index 075d915..12ebdb2 100644 --- a/gitlab/tests/objects/test_groups.py +++ b/gitlab/tests/objects/test_groups.py @@ -48,18 +48,18 @@ class TestGroup(unittest.TestCase): @with_httmock(resp_get_group) def test_get_group(self): data = self.gl.groups.get(1) - self.assertIsInstance(data, gitlab.v4.objects.Group) - self.assertEqual(data.name, "name") - self.assertEqual(data.path, "path") - self.assertEqual(data.id, 1) + assert isinstance(data, gitlab.v4.objects.Group) + assert data.name == "name" + assert data.path == "path" + assert data.id == 1 @with_httmock(resp_create_group) def test_create_group(self): name, path = "name", "path" data = self.gl.groups.create({"name": name, "path": path}) - self.assertIsInstance(data, gitlab.v4.objects.Group) - self.assertEqual(data.name, name) - self.assertEqual(data.path, path) + assert isinstance(data, gitlab.v4.objects.Group) + assert data.name == name + assert data.path == path class TestGroupExport(TestGroup): @@ -70,32 +70,32 @@ class TestGroupExport(TestGroup): @with_httmock(resp_create_export) def test_create_group_export(self): export = self.group.exports.create() - self.assertEqual(export.message, "202 Accepted") + assert export.message == "202 Accepted" @unittest.skip("GitLab API endpoint not implemented") @with_httmock(resp_create_export) def test_refresh_group_export_status(self): export = self.group.exports.create() export.refresh() - self.assertEqual(export.export_status, "finished") + assert export.export_status == "finished" @with_httmock(resp_create_export, resp_download_export) def test_download_group_export(self): export = self.group.exports.create() download = export.download() - self.assertIsInstance(download, bytes) - self.assertEqual(download, binary_content) + assert isinstance(download, bytes) + assert download == binary_content class TestGroupImport(TestGroup): @with_httmock(resp_create_import) def test_import_group(self): group_import = self.gl.groups.import_group("file", "api-group", "API Group") - self.assertEqual(group_import["message"], "202 Accepted") + assert group_import["message"] == "202 Accepted" @unittest.skip("GitLab API endpoint not implemented") @with_httmock(resp_create_import) def test_refresh_group_import_status(self): group_import = self.group.imports.get() group_import.refresh() - self.assertEqual(group_import.import_status, "finished") + assert group_import.import_status == "finished" diff --git a/gitlab/tests/objects/test_projects.py b/gitlab/tests/objects/test_projects.py index ca7e0c8..fa105ae 100644 --- a/gitlab/tests/objects/test_projects.py +++ b/gitlab/tests/objects/test_projects.py @@ -341,9 +341,9 @@ class TestProjectSnippets(TestProject): with HTTMock(resp_list_snippet): snippets = self.project.snippets.list() - self.assertEqual(len(snippets), 1) - self.assertEqual(snippets[0].title, title) - self.assertEqual(snippets[0].visibility, visibility) + assert len(snippets) == 1 + assert snippets[0].title == title + assert snippets[0].visibility == visibility def test_get_project_snippets(self): title = "Example Snippet Title" @@ -370,8 +370,8 @@ class TestProjectSnippets(TestProject): with HTTMock(resp_get_snippet): snippet = self.project.snippets.get(1) - self.assertEqual(snippet.title, title) - self.assertEqual(snippet.visibility, visibility) + assert snippet.title == title + assert snippet.visibility == visibility def test_create_update_project_snippets(self): title = "Example Snippet Title" @@ -424,107 +424,107 @@ class TestProjectSnippets(TestProject): "visibility": visibility, } ) - self.assertEqual(snippet.title, title) - self.assertEqual(snippet.visibility, visibility) + assert snippet.title == title + assert snippet.visibility == visibility title = "new-title" snippet.title = title snippet.save() - self.assertEqual(snippet.title, title) - self.assertEqual(snippet.visibility, visibility) + assert snippet.title == title + assert snippet.visibility == visibility class TestProjectExport(TestProject): @with_httmock(resp_create_export) def test_create_project_export(self): export = self.project.exports.create() - self.assertEqual(export.message, "202 Accepted") + assert export.message == "202 Accepted" @with_httmock(resp_create_export, resp_export_status) def test_refresh_project_export_status(self): export = self.project.exports.create() export.refresh() - self.assertEqual(export.export_status, "finished") + assert export.export_status == "finished" @with_httmock(resp_create_export, resp_download_export) def test_download_project_export(self): export = self.project.exports.create() download = export.download() - self.assertIsInstance(download, bytes) - self.assertEqual(download, binary_content) + assert isinstance(download, bytes) + assert download == binary_content class TestProjectImport(TestProject): @with_httmock(resp_import_project) def test_import_project(self): project_import = self.gl.projects.import_project("file", "api-project") - self.assertEqual(project_import["import_status"], "scheduled") + assert project_import["import_status"] == "scheduled" @with_httmock(resp_import_status) def test_refresh_project_import_status(self): project_import = self.project.imports.get() project_import.refresh() - self.assertEqual(project_import.import_status, "finished") + assert project_import.import_status == "finished" @with_httmock(resp_import_github) def test_import_github(self): base_path = "/root" name = "my-repo" ret = self.gl.projects.import_github("githubkey", 1234, base_path, name) - self.assertIsInstance(ret, dict) - self.assertEqual(ret["name"], name) - self.assertEqual(ret["full_path"], "/".join((base_path, name))) - self.assertTrue(ret["full_name"].endswith(name)) + assert isinstance(ret, dict) + assert ret["name"] == name + assert ret["full_path"] == "/".join((base_path, name)) + assert ret["full_name"].endswith(name) class TestProjectRemoteMirrors(TestProject): @with_httmock(resp_get_remote_mirrors) def test_list_project_remote_mirrors(self): mirrors = self.project.remote_mirrors.list() - self.assertIsInstance(mirrors, list) - self.assertIsInstance(mirrors[0], ProjectRemoteMirror) - self.assertTrue(mirrors[0].enabled) + assert isinstance(mirrors, list) + assert isinstance(mirrors[0], ProjectRemoteMirror) + assert mirrors[0].enabled @with_httmock(resp_create_remote_mirror) def test_create_project_remote_mirror(self): mirror = self.project.remote_mirrors.create({"url": "https://example.com"}) - self.assertIsInstance(mirror, ProjectRemoteMirror) - self.assertEqual(mirror.update_status, "none") + assert isinstance(mirror, ProjectRemoteMirror) + assert mirror.update_status == "none" @with_httmock(resp_create_remote_mirror, resp_update_remote_mirror) def test_update_project_remote_mirror(self): mirror = self.project.remote_mirrors.create({"url": "https://example.com"}) mirror.only_protected_branches = True mirror.save() - self.assertEqual(mirror.update_status, "finished") - self.assertTrue(mirror.only_protected_branches) + assert mirror.update_status == "finished" + assert mirror.only_protected_branches class TestProjectServices(TestProject): @with_httmock(resp_get_active_services) def test_list_active_services(self): services = self.project.services.list() - self.assertIsInstance(services, list) - self.assertIsInstance(services[0], ProjectService) - self.assertTrue(services[0].active) - self.assertTrue(services[0].push_events) + assert isinstance(services, list) + assert isinstance(services[0], ProjectService) + assert services[0].active + assert services[0].push_events def test_list_available_services(self): services = self.project.services.available() - self.assertIsInstance(services, list) - self.assertIsInstance(services[0], str) + assert isinstance(services, list) + assert isinstance(services[0], str) @with_httmock(resp_get_service) def test_get_service(self): service = self.project.services.get("pipelines-email") - self.assertIsInstance(service, ProjectService) - self.assertEqual(service.push_events, True) + assert isinstance(service, ProjectService) + assert service.push_events == True @with_httmock(resp_get_service, resp_update_service) def test_update_service(self): service = self.project.services.get("pipelines-email") service.issues_events = True service.save() - self.assertEqual(service.issues_events, True) + assert service.issues_events == True class TestProjectPipelineSchedule(TestProject): diff --git a/gitlab/tests/test_base.py b/gitlab/tests/test_base.py index 5a43b1d..666060c 100644 --- a/gitlab/tests/test_base.py +++ b/gitlab/tests/test_base.py @@ -19,6 +19,7 @@ import pickle import unittest from gitlab import base +import pytest class FakeGitlab(object): @@ -41,7 +42,7 @@ class TestRESTManager(unittest.TestCase): _obj_cls = object mgr = MGR(FakeGitlab()) - self.assertEqual(mgr._computed_path, "/tests") + assert mgr._computed_path == "/tests" def test_computed_path_with_parent(self): class MGR(base.RESTManager): @@ -53,7 +54,7 @@ class TestRESTManager(unittest.TestCase): id = 42 mgr = MGR(FakeGitlab(), parent=Parent()) - self.assertEqual(mgr._computed_path, "/tests/42/cases") + assert mgr._computed_path == "/tests/42/cases" def test_path_property(self): class MGR(base.RESTManager): @@ -61,7 +62,7 @@ class TestRESTManager(unittest.TestCase): _obj_cls = object mgr = MGR(FakeGitlab()) - self.assertEqual(mgr.path, "/tests") + assert mgr.path == "/tests" class TestRESTObject(unittest.TestCase): @@ -72,54 +73,55 @@ class TestRESTObject(unittest.TestCase): def test_instanciate(self): obj = FakeObject(self.manager, {"foo": "bar"}) - self.assertDictEqual({"foo": "bar"}, obj._attrs) - self.assertDictEqual({}, obj._updated_attrs) - self.assertEqual(None, obj._create_managers()) - self.assertEqual(self.manager, obj.manager) - self.assertEqual(self.gitlab, obj.manager.gitlab) + assert {"foo": "bar"} == obj._attrs + assert {} == obj._updated_attrs + assert None == obj._create_managers() + assert self.manager == obj.manager + assert self.gitlab == obj.manager.gitlab def test_pickability(self): obj = FakeObject(self.manager, {"foo": "bar"}) original_obj_module = obj._module pickled = pickle.dumps(obj) unpickled = pickle.loads(pickled) - self.assertIsInstance(unpickled, FakeObject) - self.assertTrue(hasattr(unpickled, "_module")) - self.assertEqual(unpickled._module, original_obj_module) + assert isinstance(unpickled, FakeObject) + assert hasattr(unpickled, "_module") + assert unpickled._module == original_obj_module pickled2 = pickle.dumps(unpickled) def test_attrs(self): obj = FakeObject(self.manager, {"foo": "bar"}) - self.assertEqual("bar", obj.foo) - self.assertRaises(AttributeError, getattr, obj, "bar") + assert "bar" == obj.foo + with pytest.raises(AttributeError): + getattr(obj, "bar") obj.bar = "baz" - self.assertEqual("baz", obj.bar) - self.assertDictEqual({"foo": "bar"}, obj._attrs) - self.assertDictEqual({"bar": "baz"}, obj._updated_attrs) + assert "baz" == obj.bar + assert {"foo": "bar"} == obj._attrs + assert {"bar": "baz"} == obj._updated_attrs def test_get_id(self): obj = FakeObject(self.manager, {"foo": "bar"}) obj.id = 42 - self.assertEqual(42, obj.get_id()) + assert 42 == obj.get_id() obj.id = None - self.assertEqual(None, obj.get_id()) + assert None == obj.get_id() def test_custom_id_attr(self): class OtherFakeObject(FakeObject): _id_attr = "foo" obj = OtherFakeObject(self.manager, {"foo": "bar"}) - self.assertEqual("bar", obj.get_id()) + assert "bar" == obj.get_id() def test_update_attrs(self): obj = FakeObject(self.manager, {"foo": "bar"}) obj.bar = "baz" obj._update_attrs({"foo": "foo", "bar": "bar"}) - self.assertDictEqual({"foo": "foo", "bar": "bar"}, obj._attrs) - self.assertDictEqual({}, obj._updated_attrs) + assert {"foo": "foo", "bar": "bar"} == obj._attrs + assert {} == obj._updated_attrs def test_create_managers(self): class ObjectWithManager(FakeObject): @@ -127,14 +129,14 @@ class TestRESTObject(unittest.TestCase): obj = ObjectWithManager(self.manager, {"foo": "bar"}) obj.id = 42 - self.assertIsInstance(obj.fakes, FakeManager) - self.assertEqual(obj.fakes.gitlab, self.gitlab) - self.assertEqual(obj.fakes._parent, obj) + assert isinstance(obj.fakes, FakeManager) + assert obj.fakes.gitlab == self.gitlab + assert obj.fakes._parent == obj def test_equality(self): obj1 = FakeObject(self.manager, {"id": "foo"}) obj2 = FakeObject(self.manager, {"id": "foo", "other_attr": "bar"}) - self.assertEqual(obj1, obj2) + assert obj1 == obj2 def test_equality_custom_id(self): class OtherFakeObject(FakeObject): @@ -142,14 +144,14 @@ class TestRESTObject(unittest.TestCase): obj1 = OtherFakeObject(self.manager, {"foo": "bar"}) obj2 = OtherFakeObject(self.manager, {"foo": "bar", "other_attr": "baz"}) - self.assertEqual(obj1, obj2) + assert obj1 == obj2 def test_inequality(self): obj1 = FakeObject(self.manager, {"id": "foo"}) obj2 = FakeObject(self.manager, {"id": "bar"}) - self.assertNotEqual(obj1, obj2) + assert obj1 != obj2 def test_inequality_no_id(self): obj1 = FakeObject(self.manager, {"attr1": "foo"}) obj2 = FakeObject(self.manager, {"attr1": "bar"}) - self.assertNotEqual(obj1, obj2) + assert obj1 != obj2 diff --git a/gitlab/tests/test_cli.py b/gitlab/tests/test_cli.py index 4820103..63a5793 100644 --- a/gitlab/tests/test_cli.py +++ b/gitlab/tests/test_cli.py @@ -37,12 +37,13 @@ except ImportError: from gitlab import cli import gitlab.v4.cli +import pytest class TestCLI(unittest.TestCase): def test_what_to_cls(self): - self.assertEqual("Foo", cli.what_to_cls("foo")) - self.assertEqual("FooBar", cli.what_to_cls("foo-bar")) + assert "Foo" == cli.what_to_cls("foo") + assert "FooBar" == cli.what_to_cls("foo-bar") def test_cls_to_what(self): class Class(object): @@ -51,64 +52,63 @@ class TestCLI(unittest.TestCase): class TestClass(object): pass - self.assertEqual("test-class", cli.cls_to_what(TestClass)) - self.assertEqual("class", cli.cls_to_what(Class)) + assert "test-class" == cli.cls_to_what(TestClass) + assert "class" == cli.cls_to_what(Class) def test_die(self): fl = io.StringIO() with redirect_stderr(fl): - with self.assertRaises(SystemExit) as test: + with pytest.raises(SystemExit) as test: cli.die("foobar") - self.assertEqual(fl.getvalue(), "foobar\n") - self.assertEqual(test.exception.code, 1) + assert fl.getvalue() == "foobar\n" + assert test.value.code == 1 def test_parse_value(self): ret = cli._parse_value("foobar") - self.assertEqual(ret, "foobar") + assert ret == "foobar" ret = cli._parse_value(True) - self.assertEqual(ret, True) + assert ret == True ret = cli._parse_value(1) - self.assertEqual(ret, 1) + assert ret == 1 ret = cli._parse_value(None) - self.assertEqual(ret, None) + assert ret == None fd, temp_path = tempfile.mkstemp() os.write(fd, b"content") os.close(fd) ret = cli._parse_value("@%s" % temp_path) - self.assertEqual(ret, "content") + assert ret == "content" os.unlink(temp_path) fl = io.StringIO() with redirect_stderr(fl): - with self.assertRaises(SystemExit) as exc: + with pytest.raises(SystemExit) as exc: cli._parse_value("@/thisfileprobablydoesntexist") - self.assertEqual( - fl.getvalue(), - "[Errno 2] No such file or directory:" - " '/thisfileprobablydoesntexist'\n", + assert ( + fl.getvalue() == "[Errno 2] No such file or directory:" + " '/thisfileprobablydoesntexist'\n" ) - self.assertEqual(exc.exception.code, 1) + assert exc.value.code == 1 def test_base_parser(self): parser = cli._get_base_parser() args = parser.parse_args( ["-v", "-g", "gl_id", "-c", "foo.cfg", "-c", "bar.cfg"] ) - self.assertTrue(args.verbose) - self.assertEqual(args.gitlab, "gl_id") - self.assertEqual(args.config_file, ["foo.cfg", "bar.cfg"]) + assert args.verbose + assert args.gitlab == "gl_id" + assert args.config_file == ["foo.cfg", "bar.cfg"] class TestV4CLI(unittest.TestCase): def test_parse_args(self): parser = cli._get_parser(gitlab.v4.cli) args = parser.parse_args(["project", "list"]) - self.assertEqual(args.what, "project") - self.assertEqual(args.whaction, "list") + assert args.what == "project" + assert args.whaction == "list" def test_parser(self): parser = cli._get_parser(gitlab.v4.cli) @@ -117,25 +117,25 @@ class TestV4CLI(unittest.TestCase): for action in parser._actions if isinstance(action, argparse._SubParsersAction) ) - self.assertIsNotNone(subparsers) - self.assertIn("project", subparsers.choices) + assert subparsers is not None + assert "project" in subparsers.choices user_subparsers = next( action for action in subparsers.choices["project"]._actions if isinstance(action, argparse._SubParsersAction) ) - self.assertIsNotNone(user_subparsers) - self.assertIn("list", user_subparsers.choices) - self.assertIn("get", user_subparsers.choices) - self.assertIn("delete", user_subparsers.choices) - self.assertIn("update", user_subparsers.choices) - self.assertIn("create", user_subparsers.choices) - self.assertIn("archive", user_subparsers.choices) - self.assertIn("unarchive", user_subparsers.choices) + assert user_subparsers is not None + assert "list" in user_subparsers.choices + assert "get" in user_subparsers.choices + assert "delete" in user_subparsers.choices + assert "update" in user_subparsers.choices + assert "create" in user_subparsers.choices + assert "archive" in user_subparsers.choices + assert "unarchive" in user_subparsers.choices actions = user_subparsers.choices["create"]._option_string_actions - self.assertFalse(actions["--description"].required) + assert not actions["--description"].required user_subparsers = next( action @@ -143,4 +143,4 @@ class TestV4CLI(unittest.TestCase): if isinstance(action, argparse._SubParsersAction) ) actions = user_subparsers.choices["create"]._option_string_actions - self.assertTrue(actions["--name"].required) + assert actions["--name"].required diff --git a/gitlab/tests/test_config.py b/gitlab/tests/test_config.py index 681b3d1..abdeed0 100644 --- a/gitlab/tests/test_config.py +++ b/gitlab/tests/test_config.py @@ -22,6 +22,7 @@ import mock import io from gitlab import config +import pytest valid_config = u"""[global] @@ -76,18 +77,18 @@ per_page = 200 class TestEnvConfig(unittest.TestCase): def test_env_present(self): with mock.patch.dict(os.environ, {"PYTHON_GITLAB_CFG": "/some/path"}): - self.assertEqual(["/some/path"], config._env_config()) + assert ["/some/path"] == config._env_config() def test_env_missing(self): with mock.patch.dict(os.environ, {}, clear=True): - self.assertEqual([], config._env_config()) + assert [] == config._env_config() class TestConfigParser(unittest.TestCase): @mock.patch("os.path.exists") def test_missing_config(self, path_exists): path_exists.return_value = False - with self.assertRaises(config.GitlabConfigMissingError): + with pytest.raises(config.GitlabConfigMissingError): config.GitlabConfigParser("test") @mock.patch("os.path.exists") @@ -98,14 +99,14 @@ class TestConfigParser(unittest.TestCase): m_open.return_value = fd path_exists.return_value = True config.GitlabConfigParser("there") - self.assertRaises(config.GitlabIDError, config.GitlabConfigParser) + with pytest.raises(config.GitlabIDError): + config.GitlabConfigParser() fd = io.StringIO(valid_config) fd.close = mock.Mock(return_value=None) m_open.return_value = fd - self.assertRaises( - config.GitlabDataError, config.GitlabConfigParser, gitlab_id="not_there" - ) + with pytest.raises(config.GitlabDataError): + config.GitlabConfigParser(gitlab_id="not_there") @mock.patch("os.path.exists") @mock.patch("builtins.open") @@ -117,15 +118,13 @@ class TestConfigParser(unittest.TestCase): config.GitlabConfigParser("one") config.GitlabConfigParser("one") - self.assertRaises( - config.GitlabDataError, config.GitlabConfigParser, gitlab_id="two" - ) - self.assertRaises( - config.GitlabDataError, config.GitlabConfigParser, gitlab_id="three" - ) - with self.assertRaises(config.GitlabDataError) as emgr: + with pytest.raises(config.GitlabDataError): + config.GitlabConfigParser(gitlab_id="two") + with pytest.raises(config.GitlabDataError): + config.GitlabConfigParser(gitlab_id="three") + with pytest.raises(config.GitlabDataError) as emgr: config.GitlabConfigParser("four") - self.assertEqual("Unsupported per_page number: 200", emgr.exception.args[0]) + assert "Unsupported per_page number: 200" == emgr.value.args[0] @mock.patch("os.path.exists") @mock.patch("builtins.open") @@ -136,44 +135,44 @@ class TestConfigParser(unittest.TestCase): path_exists.return_value = True cp = config.GitlabConfigParser() - self.assertEqual("one", cp.gitlab_id) - self.assertEqual("http://one.url", cp.url) - self.assertEqual("ABCDEF", cp.private_token) - self.assertEqual(None, cp.oauth_token) - self.assertEqual(2, cp.timeout) - self.assertEqual(True, cp.ssl_verify) - self.assertIsNone(cp.per_page) + assert "one" == cp.gitlab_id + assert "http://one.url" == cp.url + assert "ABCDEF" == cp.private_token + assert None == cp.oauth_token + assert 2 == cp.timeout + assert True == cp.ssl_verify + assert cp.per_page is None fd = io.StringIO(valid_config) fd.close = mock.Mock(return_value=None) m_open.return_value = fd cp = config.GitlabConfigParser(gitlab_id="two") - self.assertEqual("two", cp.gitlab_id) - self.assertEqual("https://two.url", cp.url) - self.assertEqual("GHIJKL", cp.private_token) - self.assertEqual(None, cp.oauth_token) - self.assertEqual(10, cp.timeout) - self.assertEqual(False, cp.ssl_verify) + assert "two" == cp.gitlab_id + assert "https://two.url" == cp.url + assert "GHIJKL" == cp.private_token + assert None == cp.oauth_token + assert 10 == cp.timeout + assert False == cp.ssl_verify fd = io.StringIO(valid_config) fd.close = mock.Mock(return_value=None) m_open.return_value = fd cp = config.GitlabConfigParser(gitlab_id="three") - self.assertEqual("three", cp.gitlab_id) - self.assertEqual("https://three.url", cp.url) - self.assertEqual("MNOPQR", cp.private_token) - self.assertEqual(None, cp.oauth_token) - self.assertEqual(2, cp.timeout) - self.assertEqual("/path/to/CA/bundle.crt", cp.ssl_verify) - self.assertEqual(50, cp.per_page) + assert "three" == cp.gitlab_id + assert "https://three.url" == cp.url + assert "MNOPQR" == cp.private_token + assert None == cp.oauth_token + assert 2 == cp.timeout + assert "/path/to/CA/bundle.crt" == cp.ssl_verify + assert 50 == cp.per_page fd = io.StringIO(valid_config) fd.close = mock.Mock(return_value=None) m_open.return_value = fd cp = config.GitlabConfigParser(gitlab_id="four") - self.assertEqual("four", cp.gitlab_id) - self.assertEqual("https://four.url", cp.url) - self.assertEqual(None, cp.private_token) - self.assertEqual("STUV", cp.oauth_token) - self.assertEqual(2, cp.timeout) - self.assertEqual(True, cp.ssl_verify) + assert "four" == cp.gitlab_id + assert "https://four.url" == cp.url + assert None == cp.private_token + assert "STUV" == cp.oauth_token + assert 2 == cp.timeout + assert True == cp.ssl_verify diff --git a/gitlab/tests/test_exceptions.py b/gitlab/tests/test_exceptions.py index 1f00af0..57622c0 100644 --- a/gitlab/tests/test_exceptions.py +++ b/gitlab/tests/test_exceptions.py @@ -1,6 +1,7 @@ import unittest from gitlab import exceptions +import pytest class TestExceptions(unittest.TestCase): @@ -14,6 +15,6 @@ class TestExceptions(unittest.TestCase): def raise_error_from_http_error(): raise exceptions.GitlabHttpError - with self.assertRaises(TestError) as context: + with pytest.raises(TestError) as context: raise_error_from_http_error() - self.assertIsInstance(context.exception.__cause__, exceptions.GitlabHttpError) + assert isinstance(context.value.__cause__, exceptions.GitlabHttpError) diff --git a/gitlab/tests/test_gitlab.py b/gitlab/tests/test_gitlab.py index 6fc551c..59139e4 100644 --- a/gitlab/tests/test_gitlab.py +++ b/gitlab/tests/test_gitlab.py @@ -30,6 +30,7 @@ import requests import gitlab from gitlab import * # noqa from gitlab.v4.objects import * # noqa +import pytest valid_config = b"""[global] @@ -45,17 +46,17 @@ private_token = ABCDEF class TestSanitize(unittest.TestCase): def test_do_nothing(self): - self.assertEqual(1, gitlab._sanitize(1)) - self.assertEqual(1.5, gitlab._sanitize(1.5)) - self.assertEqual("foo", gitlab._sanitize("foo")) + assert 1 == gitlab._sanitize(1) + assert 1.5 == gitlab._sanitize(1.5) + assert "foo" == gitlab._sanitize("foo") def test_slash(self): - self.assertEqual("foo%2Fbar", gitlab._sanitize("foo/bar")) + assert "foo%2Fbar" == gitlab._sanitize("foo/bar") def test_dict(self): source = {"url": "foo/bar", "id": 1} expected = {"url": "foo%2Fbar", "id": 1} - self.assertEqual(expected, gitlab._sanitize(source)) + assert expected == gitlab._sanitize(source) class TestGitlabList(unittest.TestCase): @@ -102,22 +103,20 @@ class TestGitlabList(unittest.TestCase): with HTTMock(resp_1): obj = self.gl.http_list("/tests", as_list=False) - self.assertEqual(len(obj), 2) - self.assertEqual( - obj._next_url, "http://localhost/api/v4/tests?per_page=1&page=2" - ) - self.assertEqual(obj.current_page, 1) - self.assertEqual(obj.prev_page, None) - self.assertEqual(obj.next_page, 2) - self.assertEqual(obj.per_page, 1) - self.assertEqual(obj.total_pages, 2) - self.assertEqual(obj.total, 2) + assert len(obj) == 2 + assert obj._next_url == "http://localhost/api/v4/tests?per_page=1&page=2" + assert obj.current_page == 1 + assert obj.prev_page == None + assert obj.next_page == 2 + assert obj.per_page == 1 + assert obj.total_pages == 2 + assert obj.total == 2 with HTTMock(resp_2): l = list(obj) - self.assertEqual(len(l), 2) - self.assertEqual(l[0]["a"], "b") - self.assertEqual(l[1]["c"], "d") + assert len(l) == 2 + assert l[0]["a"] == "b" + assert l[1]["c"] == "d" def test_all_omitted_when_as_list(self): @urlmatch(scheme="http", netloc="localhost", path="/api/v4/tests", method="get") @@ -135,7 +134,7 @@ class TestGitlabList(unittest.TestCase): with HTTMock(resp): result = self.gl.http_list("/tests", as_list=False, all=True) - self.assertIsInstance(result, GitlabList) + assert isinstance(result, GitlabList) class TestGitlabHttpMethods(unittest.TestCase): @@ -146,11 +145,11 @@ class TestGitlabHttpMethods(unittest.TestCase): def test_build_url(self): r = self.gl._build_url("http://localhost/api/v4") - self.assertEqual(r, "http://localhost/api/v4") + assert r == "http://localhost/api/v4" r = self.gl._build_url("https://localhost/api/v4") - self.assertEqual(r, "https://localhost/api/v4") + assert r == "https://localhost/api/v4" r = self.gl._build_url("/projects") - self.assertEqual(r, "http://localhost/api/v4/projects") + assert r == "http://localhost/api/v4/projects" def test_http_request(self): @urlmatch( @@ -164,7 +163,7 @@ class TestGitlabHttpMethods(unittest.TestCase): with HTTMock(resp_cont): http_r = self.gl.http_request("get", "/projects") http_r.json() - self.assertEqual(http_r.status_code, 200) + assert http_r.status_code == 200 def test_http_request_404(self): @urlmatch( @@ -175,9 +174,8 @@ class TestGitlabHttpMethods(unittest.TestCase): return response(404, content, {}, None, 5, request) with HTTMock(resp_cont): - self.assertRaises( - GitlabHttpError, self.gl.http_request, "get", "/not_there" - ) + with pytest.raises(GitlabHttpError): + self.gl.http_request("get", "/not_there") def test_get_request(self): @urlmatch( @@ -190,8 +188,8 @@ class TestGitlabHttpMethods(unittest.TestCase): with HTTMock(resp_cont): result = self.gl.http_get("/projects") - self.assertIsInstance(result, dict) - self.assertEqual(result["name"], "project1") + assert isinstance(result, dict) + assert result["name"] == "project1" def test_get_request_raw(self): @urlmatch( @@ -204,7 +202,7 @@ class TestGitlabHttpMethods(unittest.TestCase): with HTTMock(resp_cont): result = self.gl.http_get("/projects") - self.assertEqual(result.content.decode("utf-8"), "content") + assert result.content.decode("utf-8") == "content" def test_get_request_404(self): @urlmatch( @@ -215,7 +213,8 @@ class TestGitlabHttpMethods(unittest.TestCase): return response(404, content, {}, None, 5, request) with HTTMock(resp_cont): - self.assertRaises(GitlabHttpError, self.gl.http_get, "/not_there") + with pytest.raises(GitlabHttpError): + self.gl.http_get("/not_there") def test_get_request_invalid_data(self): @urlmatch( @@ -227,7 +226,8 @@ class TestGitlabHttpMethods(unittest.TestCase): return response(200, content, headers, None, 5, request) with HTTMock(resp_cont): - self.assertRaises(GitlabParsingError, self.gl.http_get, "/projects") + with pytest.raises(GitlabParsingError): + self.gl.http_get("/projects") def test_list_request(self): @urlmatch( @@ -240,18 +240,18 @@ class TestGitlabHttpMethods(unittest.TestCase): with HTTMock(resp_cont): result = self.gl.http_list("/projects", as_list=True) - self.assertIsInstance(result, list) - self.assertEqual(len(result), 1) + assert isinstance(result, list) + assert len(result) == 1 with HTTMock(resp_cont): result = self.gl.http_list("/projects", as_list=False) - self.assertIsInstance(result, GitlabList) - self.assertEqual(len(result), 1) + assert isinstance(result, GitlabList) + assert len(result) == 1 with HTTMock(resp_cont): result = self.gl.http_list("/projects", all=True) - self.assertIsInstance(result, list) - self.assertEqual(len(result), 1) + assert isinstance(result, list) + assert len(result) == 1 def test_list_request_404(self): @urlmatch( @@ -262,7 +262,8 @@ class TestGitlabHttpMethods(unittest.TestCase): return response(404, content, {}, None, 5, request) with HTTMock(resp_cont): - self.assertRaises(GitlabHttpError, self.gl.http_list, "/not_there") + with pytest.raises(GitlabHttpError): + self.gl.http_list("/not_there") def test_list_request_invalid_data(self): @urlmatch( @@ -274,7 +275,8 @@ class TestGitlabHttpMethods(unittest.TestCase): return response(200, content, headers, None, 5, request) with HTTMock(resp_cont): - self.assertRaises(GitlabParsingError, self.gl.http_list, "/projects") + with pytest.raises(GitlabParsingError): + self.gl.http_list("/projects") def test_post_request(self): @urlmatch( @@ -287,8 +289,8 @@ class TestGitlabHttpMethods(unittest.TestCase): with HTTMock(resp_cont): result = self.gl.http_post("/projects") - self.assertIsInstance(result, dict) - self.assertEqual(result["name"], "project1") + assert isinstance(result, dict) + assert result["name"] == "project1" def test_post_request_404(self): @urlmatch( @@ -299,7 +301,8 @@ class TestGitlabHttpMethods(unittest.TestCase): return response(404, content, {}, None, 5, request) with HTTMock(resp_cont): - self.assertRaises(GitlabHttpError, self.gl.http_post, "/not_there") + with pytest.raises(GitlabHttpError): + self.gl.http_post("/not_there") def test_post_request_invalid_data(self): @urlmatch( @@ -311,7 +314,8 @@ class TestGitlabHttpMethods(unittest.TestCase): return response(200, content, headers, None, 5, request) with HTTMock(resp_cont): - self.assertRaises(GitlabParsingError, self.gl.http_post, "/projects") + with pytest.raises(GitlabParsingError): + self.gl.http_post("/projects") def test_put_request(self): @urlmatch( @@ -324,8 +328,8 @@ class TestGitlabHttpMethods(unittest.TestCase): with HTTMock(resp_cont): result = self.gl.http_put("/projects") - self.assertIsInstance(result, dict) - self.assertEqual(result["name"], "project1") + assert isinstance(result, dict) + assert result["name"] == "project1" def test_put_request_404(self): @urlmatch( @@ -336,7 +340,8 @@ class TestGitlabHttpMethods(unittest.TestCase): return response(404, content, {}, None, 5, request) with HTTMock(resp_cont): - self.assertRaises(GitlabHttpError, self.gl.http_put, "/not_there") + with pytest.raises(GitlabHttpError): + self.gl.http_put("/not_there") def test_put_request_invalid_data(self): @urlmatch( @@ -348,7 +353,8 @@ class TestGitlabHttpMethods(unittest.TestCase): return response(200, content, headers, None, 5, request) with HTTMock(resp_cont): - self.assertRaises(GitlabParsingError, self.gl.http_put, "/projects") + with pytest.raises(GitlabParsingError): + self.gl.http_put("/projects") def test_delete_request(self): @urlmatch( @@ -361,8 +367,8 @@ class TestGitlabHttpMethods(unittest.TestCase): with HTTMock(resp_cont): result = self.gl.http_delete("/projects") - self.assertIsInstance(result, requests.Response) - self.assertEqual(result.json(), True) + assert isinstance(result, requests.Response) + assert result.json() == True def test_delete_request_404(self): @urlmatch( @@ -373,7 +379,8 @@ class TestGitlabHttpMethods(unittest.TestCase): return response(404, content, {}, None, 5, request) with HTTMock(resp_cont): - self.assertRaises(GitlabHttpError, self.gl.http_delete, "/not_there") + with pytest.raises(GitlabHttpError): + self.gl.http_delete("/not_there") class TestGitlabStripBaseUrl(unittest.TestCase): @@ -383,81 +390,77 @@ class TestGitlabStripBaseUrl(unittest.TestCase): ) def test_strip_base_url(self): - self.assertEqual(self.gl.url, "http://localhost") + assert self.gl.url == "http://localhost" def test_strip_api_url(self): - self.assertEqual(self.gl.api_url, "http://localhost/api/v4") + assert self.gl.api_url == "http://localhost/api/v4" def test_build_url(self): r = self.gl._build_url("/projects") - self.assertEqual(r, "http://localhost/api/v4/projects") + assert r == "http://localhost/api/v4/projects" class TestGitlabAuth(unittest.TestCase): def test_invalid_auth_args(self): - self.assertRaises( - ValueError, - Gitlab, - "http://localhost", - api_version="4", - private_token="private_token", - oauth_token="bearer", - ) - self.assertRaises( - ValueError, - Gitlab, - "http://localhost", - api_version="4", - oauth_token="bearer", - http_username="foo", - http_password="bar", - ) - self.assertRaises( - ValueError, - Gitlab, - "http://localhost", - api_version="4", - private_token="private_token", - http_password="bar", - ) - self.assertRaises( - ValueError, - Gitlab, - "http://localhost", - api_version="4", - private_token="private_token", - http_username="foo", - ) + with pytest.raises(ValueError): + Gitlab( + "http://localhost", + api_version="4", + private_token="private_token", + oauth_token="bearer", + ) + with pytest.raises(ValueError): + Gitlab( + "http://localhost", + api_version="4", + oauth_token="bearer", + http_username="foo", + http_password="bar", + ) + with pytest.raises(ValueError): + Gitlab( + "http://localhost", + api_version="4", + private_token="private_token", + http_password="bar", + ) + with pytest.raises(ValueError): + Gitlab( + "http://localhost", + api_version="4", + private_token="private_token", + http_username="foo", + ) def test_private_token_auth(self): gl = Gitlab("http://localhost", private_token="private_token", api_version="4") - self.assertEqual(gl.private_token, "private_token") - self.assertEqual(gl.oauth_token, None) - self.assertEqual(gl.job_token, None) - self.assertEqual(gl._http_auth, None) - self.assertNotIn("Authorization", gl.headers) - self.assertEqual(gl.headers["PRIVATE-TOKEN"], "private_token") - self.assertNotIn("JOB-TOKEN", gl.headers) + assert gl.private_token == "private_token" + assert gl.oauth_token == None + assert gl.job_token == None + assert gl._http_auth == None + assert "Authorization" not in gl.headers + assert gl.headers["PRIVATE-TOKEN"] == "private_token" + assert "JOB-TOKEN" not in gl.headers def test_oauth_token_auth(self): gl = Gitlab("http://localhost", oauth_token="oauth_token", api_version="4") - self.assertEqual(gl.private_token, None) - self.assertEqual(gl.oauth_token, "oauth_token") - self.assertEqual(gl.job_token, None) - self.assertEqual(gl._http_auth, None) - self.assertEqual(gl.headers["Authorization"], "Bearer oauth_token") - self.assertNotIn("PRIVATE-TOKEN", gl.headers) - self.assertNotIn("JOB-TOKEN", gl.headers) + assert gl.private_token == None + assert gl.oauth_token == "oauth_token" + assert gl.job_token == None + assert gl._http_auth == None + assert gl.headers["Authorization"] == "Bearer oauth_token" + assert "PRIVATE-TOKEN" not in gl.headers + assert "JOB-TOKEN" not in gl.headers def test_job_token_auth(self): gl = Gitlab("http://localhost", job_token="CI_JOB_TOKEN", api_version="4") - self.assertEqual(gl.private_token, None) - self.assertEqual(gl.oauth_token, None) - self.assertEqual(gl.job_token, "CI_JOB_TOKEN") - self.assertEqual(gl._http_auth, None) - self.assertNotIn("Authorization", gl.headers) - self.assertNotIn("PRIVATE-TOKEN", gl.headers) - self.assertEqual(gl.headers["JOB-TOKEN"], "CI_JOB_TOKEN") + assert gl.private_token == None + assert gl.oauth_token == None + assert gl.job_token == "CI_JOB_TOKEN" + assert gl._http_auth == None + assert "Authorization" not in gl.headers + assert "PRIVATE-TOKEN" not in gl.headers + assert gl.headers["JOB-TOKEN"] == "CI_JOB_TOKEN" def test_http_auth(self): gl = Gitlab( @@ -467,12 +470,12 @@ class TestGitlabAuth(unittest.TestCase): http_password="bar", api_version="4", ) - self.assertEqual(gl.private_token, "private_token") - self.assertEqual(gl.oauth_token, None) - self.assertEqual(gl.job_token, None) - self.assertIsInstance(gl._http_auth, requests.auth.HTTPBasicAuth) - self.assertEqual(gl.headers["PRIVATE-TOKEN"], "private_token") - self.assertNotIn("Authorization", gl.headers) + assert gl.private_token == "private_token" + assert gl.oauth_token == None + assert gl.job_token == None + assert isinstance(gl._http_auth, requests.auth.HTTPBasicAuth) + assert gl.headers["PRIVATE-TOKEN"] == "private_token" + assert "Authorization" not in gl.headers class TestGitlab(unittest.TestCase): @@ -488,9 +491,9 @@ class TestGitlab(unittest.TestCase): original_gl_objects = self.gl._objects pickled = pickle.dumps(self.gl) unpickled = pickle.loads(pickled) - self.assertIsInstance(unpickled, Gitlab) - self.assertTrue(hasattr(unpickled, "_objects")) - self.assertEqual(unpickled._objects, original_gl_objects) + assert isinstance(unpickled, Gitlab) + assert hasattr(unpickled, "_objects") + assert unpickled._objects == original_gl_objects def test_token_auth(self, callback=None): name = "username" @@ -506,9 +509,9 @@ class TestGitlab(unittest.TestCase): with HTTMock(resp_cont): self.gl.auth() - self.assertEqual(self.gl.user.username, name) - self.assertEqual(self.gl.user.id, id_) - self.assertIsInstance(self.gl.user, CurrentUser) + assert self.gl.user.username == name + assert self.gl.user.id == id_ + assert isinstance(self.gl.user, CurrentUser) def test_hooks(self): @urlmatch( @@ -521,9 +524,9 @@ class TestGitlab(unittest.TestCase): with HTTMock(resp_get_hook): data = self.gl.hooks.get(1) - self.assertIsInstance(data, Hook) - self.assertEqual(data.url, "testurl") - self.assertEqual(data.id, 1) + assert isinstance(data, Hook) + assert data.url == "testurl" + assert data.id == 1 def test_projects(self): @urlmatch( @@ -536,9 +539,9 @@ class TestGitlab(unittest.TestCase): with HTTMock(resp_get_project): data = self.gl.projects.get(1) - self.assertIsInstance(data, Project) - self.assertEqual(data.name, "name") - self.assertEqual(data.id, 1) + assert isinstance(data, Project) + assert data.name == "name" + assert data.id == 1 def test_project_environments(self): @urlmatch( @@ -565,10 +568,10 @@ class TestGitlab(unittest.TestCase): with HTTMock(resp_get_project, resp_get_environment): project = self.gl.projects.get(1) environment = project.environments.get(1) - self.assertIsInstance(environment, ProjectEnvironment) - self.assertEqual(environment.id, 1) - self.assertEqual(environment.last_deployment, "sometime") - self.assertEqual(environment.name, "environment_name") + assert isinstance(environment, ProjectEnvironment) + assert environment.id == 1 + assert environment.last_deployment == "sometime" + assert environment.name == "environment_name" def test_project_additional_statistics(self): @urlmatch( @@ -595,8 +598,8 @@ class TestGitlab(unittest.TestCase): with HTTMock(resp_get_project, resp_get_environment): project = self.gl.projects.get(1) statistics = project.additionalstatistics.get() - self.assertIsInstance(statistics, ProjectAdditionalStatistics) - self.assertEqual(statistics.fetches["total"], 50) + assert isinstance(statistics, ProjectAdditionalStatistics) + assert statistics.fetches["total"] == 50 def test_project_issues_statistics(self): @urlmatch( @@ -623,8 +626,8 @@ class TestGitlab(unittest.TestCase): with HTTMock(resp_get_project, resp_get_environment): project = self.gl.projects.get(1) statistics = project.issuesstatistics.get() - self.assertIsInstance(statistics, ProjectIssuesStatistics) - self.assertEqual(statistics.statistics["counts"]["all"], 20) + assert isinstance(statistics, ProjectIssuesStatistics) + assert statistics.statistics["counts"]["all"] == 20 def test_issues(self): @urlmatch( @@ -638,8 +641,8 @@ class TestGitlab(unittest.TestCase): with HTTMock(resp_get_issue): data = self.gl.issues.list() - self.assertEqual(data[1].id, 2) - self.assertEqual(data[1].name, "other_name") + assert data[1].id == 2 + assert data[1].name == "other_name" @urlmatch(scheme="http", netloc="localhost", path="/api/v4/users/1", method="get") def resp_get_user(self, url, request): @@ -654,9 +657,9 @@ class TestGitlab(unittest.TestCase): def test_users(self): with HTTMock(self.resp_get_user): user = self.gl.users.get(1) - self.assertIsInstance(user, User) - self.assertEqual(user.name, "name") - self.assertEqual(user.id, 1) + assert isinstance(user, User) + assert user.name == "name" + assert user.id == 1 def test_user_memberships(self): @urlmatch( @@ -687,8 +690,8 @@ class TestGitlab(unittest.TestCase): with HTTMock(resp_get_user_memberships): user = self.gl.users.get(1, lazy=True) memberships = user.memberships.list() - self.assertIsInstance(memberships[0], UserMembership) - self.assertEqual(memberships[0].source_type, "Project") + assert isinstance(memberships[0], UserMembership) + assert memberships[0].source_type == "Project" def test_user_status(self): @urlmatch( @@ -707,9 +710,9 @@ class TestGitlab(unittest.TestCase): user = self.gl.users.get(1) with HTTMock(resp_get_user_status): status = user.status.get() - self.assertIsInstance(status, UserStatus) - self.assertEqual(status.message, "test") - self.assertEqual(status.emoji, "thumbsup") + assert isinstance(status, UserStatus) + assert status.message == "test" + assert status.emoji == "thumbsup" def test_todo(self): with open(os.path.dirname(__file__) + "/data/todo.json", "r") as json_file: @@ -736,10 +739,10 @@ class TestGitlab(unittest.TestCase): with HTTMock(resp_get_todo): todo = self.gl.todos.list()[0] - self.assertIsInstance(todo, Todo) - self.assertEqual(todo.id, 102) - self.assertEqual(todo.target_type, "MergeRequest") - self.assertEqual(todo.target["assignee"]["username"], "root") + assert isinstance(todo, Todo) + assert todo.id == 102 + assert todo.target_type == "MergeRequest" + assert todo.target["assignee"]["username"] == "root" with HTTMock(resp_mark_as_done): todo.mark_as_done() @@ -791,15 +794,15 @@ class TestGitlab(unittest.TestCase): "status": "created", } ) - self.assertEqual(deployment.id, 42) - self.assertEqual(deployment.status, "success") - self.assertEqual(deployment.ref, "master") + assert deployment.id == 42 + assert deployment.status == "success" + assert deployment.ref == "master" with HTTMock(resp_deployment_update): json_content["status"] = "failed" deployment.status = "failed" deployment.save() - self.assertEqual(deployment.status, "failed") + assert deployment.status == "failed" def test_user_activate_deactivate(self): @urlmatch( @@ -862,9 +865,9 @@ class TestGitlab(unittest.TestCase): with HTTMock(resp_get_project): project = self.gl.projects.get(1) - self.assertIsInstance(project, Project) - self.assertEqual(project.name, "name") - self.assertEqual(project.id, 1) + assert isinstance(project, Project) + assert project.name == "name" + assert project.id == 1 with HTTMock(resp_update_submodule): ret = project.update_submodule( submodule="foo/bar", @@ -872,9 +875,9 @@ class TestGitlab(unittest.TestCase): commit_sha="4c3674f66071e30b3311dac9b9ccc90502a72664", commit_message="Message", ) - self.assertIsInstance(ret, dict) - self.assertEqual(ret["message"], "Message") - self.assertEqual(ret["id"], "ed899a2f4b50b4370feeea94676502b42383c746") + assert isinstance(ret, dict) + assert ret["message"] == "Message" + assert ret["id"] == "ed899a2f4b50b4370feeea94676502b42383c746" def test_applications(self): content = '{"name": "test_app", "redirect_uri": "http://localhost:8080", "scopes": ["api", "email"]}' @@ -899,9 +902,9 @@ class TestGitlab(unittest.TestCase): "confidential": False, } ) - self.assertEqual(application.name, "test_app") - self.assertEqual(application.redirect_uri, "http://localhost:8080") - self.assertEqual(application.scopes, ["api", "email"]) + assert application.name == "test_app" + assert application.redirect_uri == "http://localhost:8080" + assert application.scopes == ["api", "email"] def test_deploy_tokens(self): @urlmatch( @@ -931,11 +934,11 @@ class TestGitlab(unittest.TestCase): "scopes": ["read_repository"], } ) - self.assertIsInstance(deploy_token, ProjectDeployToken) - self.assertEqual(deploy_token.id, 1), - self.assertEqual(deploy_token.expires_at, "2022-01-01T00:00:00.000Z"), - self.assertEqual(deploy_token.username, "custom-user") - self.assertEqual(deploy_token.scopes, ["read_repository"]) + assert isinstance(deploy_token, ProjectDeployToken) + assert deploy_token.id == 1 + assert deploy_token.expires_at == "2022-01-01T00:00:00.000Z" + assert deploy_token.username == "custom-user" + assert deploy_token.scopes == ["read_repository"] def _default_config(self): fd, temp_path = tempfile.mkstemp() @@ -954,5 +957,5 @@ class TestGitlab(unittest.TestCase): config_path = self._default_config() gl = MyGitlab.from_config("one", [config_path]) - self.assertIsInstance(gl, MyGitlab) + assert isinstance(gl, MyGitlab) os.unlink(config_path) diff --git a/gitlab/tests/test_mixins.py b/gitlab/tests/test_mixins.py index 749c0d2..e8613f2 100644 --- a/gitlab/tests/test_mixins.py +++ b/gitlab/tests/test_mixins.py @@ -25,6 +25,7 @@ from httmock import urlmatch # noqa from gitlab import * # noqa from gitlab.base import * # noqa from gitlab.mixins import * # noqa +import pytest class TestObjectMixinsAttributes(unittest.TestCase): @@ -33,47 +34,47 @@ class TestObjectMixinsAttributes(unittest.TestCase): pass obj = O() - self.assertTrue(hasattr(obj, "approve")) + assert hasattr(obj, "approve") def test_subscribable_mixin(self): class O(SubscribableMixin): pass obj = O() - self.assertTrue(hasattr(obj, "subscribe")) - self.assertTrue(hasattr(obj, "unsubscribe")) + assert hasattr(obj, "subscribe") + assert hasattr(obj, "unsubscribe") def test_todo_mixin(self): class O(TodoMixin): pass obj = O() - self.assertTrue(hasattr(obj, "todo")) + assert hasattr(obj, "todo") def test_time_tracking_mixin(self): class O(TimeTrackingMixin): pass obj = O() - self.assertTrue(hasattr(obj, "time_stats")) - self.assertTrue(hasattr(obj, "time_estimate")) - self.assertTrue(hasattr(obj, "reset_time_estimate")) - self.assertTrue(hasattr(obj, "add_spent_time")) - self.assertTrue(hasattr(obj, "reset_spent_time")) + assert hasattr(obj, "time_stats") + assert hasattr(obj, "time_estimate") + assert hasattr(obj, "reset_time_estimate") + assert hasattr(obj, "add_spent_time") + assert hasattr(obj, "reset_spent_time") def test_set_mixin(self): class O(SetMixin): pass obj = O() - self.assertTrue(hasattr(obj, "set")) + assert hasattr(obj, "set") def test_user_agent_detail_mixin(self): class O(UserAgentDetailMixin): pass obj = O() - self.assertTrue(hasattr(obj, "user_agent_detail")) + assert hasattr(obj, "user_agent_detail") class TestMetaMixins(unittest.TestCase): @@ -82,45 +83,45 @@ class TestMetaMixins(unittest.TestCase): pass obj = M() - self.assertTrue(hasattr(obj, "list")) - self.assertTrue(hasattr(obj, "get")) - self.assertFalse(hasattr(obj, "create")) - self.assertFalse(hasattr(obj, "update")) - self.assertFalse(hasattr(obj, "delete")) - self.assertIsInstance(obj, ListMixin) - self.assertIsInstance(obj, GetMixin) + assert hasattr(obj, "list") + assert hasattr(obj, "get") + assert not hasattr(obj, "create") + assert not hasattr(obj, "update") + assert not hasattr(obj, "delete") + assert isinstance(obj, ListMixin) + assert isinstance(obj, GetMixin) def test_crud_mixin(self): class M(CRUDMixin): pass obj = M() - self.assertTrue(hasattr(obj, "get")) - self.assertTrue(hasattr(obj, "list")) - self.assertTrue(hasattr(obj, "create")) - self.assertTrue(hasattr(obj, "update")) - self.assertTrue(hasattr(obj, "delete")) - self.assertIsInstance(obj, ListMixin) - self.assertIsInstance(obj, GetMixin) - self.assertIsInstance(obj, CreateMixin) - self.assertIsInstance(obj, UpdateMixin) - self.assertIsInstance(obj, DeleteMixin) + assert hasattr(obj, "get") + assert hasattr(obj, "list") + assert hasattr(obj, "create") + assert hasattr(obj, "update") + assert hasattr(obj, "delete") + assert isinstance(obj, ListMixin) + assert isinstance(obj, GetMixin) + assert isinstance(obj, CreateMixin) + assert isinstance(obj, UpdateMixin) + assert isinstance(obj, DeleteMixin) def test_no_update_mixin(self): class M(NoUpdateMixin): pass obj = M() - self.assertTrue(hasattr(obj, "get")) - self.assertTrue(hasattr(obj, "list")) - self.assertTrue(hasattr(obj, "create")) - self.assertFalse(hasattr(obj, "update")) - self.assertTrue(hasattr(obj, "delete")) - self.assertIsInstance(obj, ListMixin) - self.assertIsInstance(obj, GetMixin) - self.assertIsInstance(obj, CreateMixin) - self.assertNotIsInstance(obj, UpdateMixin) - self.assertIsInstance(obj, DeleteMixin) + assert hasattr(obj, "get") + assert hasattr(obj, "list") + assert hasattr(obj, "create") + assert not hasattr(obj, "update") + assert hasattr(obj, "delete") + assert isinstance(obj, ListMixin) + assert isinstance(obj, GetMixin) + assert isinstance(obj, CreateMixin) + assert not isinstance(obj, UpdateMixin) + assert isinstance(obj, DeleteMixin) class FakeObject(base.RESTObject): @@ -153,9 +154,9 @@ class TestMixinMethods(unittest.TestCase): with HTTMock(resp_cont): mgr = M(self.gl) obj = mgr.get(42) - self.assertIsInstance(obj, FakeObject) - self.assertEqual(obj.foo, "bar") - self.assertEqual(obj.id, 42) + assert isinstance(obj, FakeObject) + assert obj.foo == "bar" + assert obj.id == 42 def test_refresh_mixin(self): class O(RefreshMixin, FakeObject): @@ -173,9 +174,9 @@ class TestMixinMethods(unittest.TestCase): mgr = FakeManager(self.gl) obj = O(mgr, {"id": 42}) res = obj.refresh() - self.assertIsNone(res) - self.assertEqual(obj.foo, "bar") - self.assertEqual(obj.id, 42) + assert res is None + assert obj.foo == "bar" + assert obj.id == 42 def test_get_without_id_mixin(self): class M(GetWithoutIdMixin, FakeManager): @@ -190,9 +191,9 @@ class TestMixinMethods(unittest.TestCase): with HTTMock(resp_cont): mgr = M(self.gl) obj = mgr.get() - self.assertIsInstance(obj, FakeObject) - self.assertEqual(obj.foo, "bar") - self.assertFalse(hasattr(obj, "id")) + assert isinstance(obj, FakeObject) + assert obj.foo == "bar" + assert not hasattr(obj, "id") def test_list_mixin(self): class M(ListMixin, FakeManager): @@ -208,18 +209,18 @@ class TestMixinMethods(unittest.TestCase): # test RESTObjectList mgr = M(self.gl) obj_list = mgr.list(as_list=False) - self.assertIsInstance(obj_list, base.RESTObjectList) + assert isinstance(obj_list, base.RESTObjectList) for obj in obj_list: - self.assertIsInstance(obj, FakeObject) - self.assertIn(obj.id, (42, 43)) + assert isinstance(obj, FakeObject) + assert obj.id in (42, 43) # test list() obj_list = mgr.list(all=True) - self.assertIsInstance(obj_list, list) - self.assertEqual(obj_list[0].id, 42) - self.assertEqual(obj_list[1].id, 43) - self.assertIsInstance(obj_list[0], FakeObject) - self.assertEqual(len(obj_list), 2) + assert isinstance(obj_list, list) + assert obj_list[0].id == 42 + assert obj_list[1].id == 43 + assert isinstance(obj_list[0], FakeObject) + assert len(obj_list) == 2 def test_list_other_url(self): class M(ListMixin, FakeManager): @@ -236,11 +237,12 @@ class TestMixinMethods(unittest.TestCase): with HTTMock(resp_cont): mgr = M(self.gl) obj_list = mgr.list(path="/others", as_list=False) - self.assertIsInstance(obj_list, base.RESTObjectList) + assert isinstance(obj_list, base.RESTObjectList) obj = obj_list.next() - self.assertEqual(obj.id, 42) - self.assertEqual(obj.foo, "bar") - self.assertRaises(StopIteration, obj_list.next) + assert obj.id == 42 + assert obj.foo == "bar" + with pytest.raises(StopIteration): + obj_list.next() def test_create_mixin_get_attrs(self): class M1(CreateMixin, FakeManager): @@ -252,15 +254,15 @@ class TestMixinMethods(unittest.TestCase): mgr = M1(self.gl) required, optional = mgr.get_create_attrs() - self.assertEqual(len(required), 0) - self.assertEqual(len(optional), 0) + assert len(required) == 0 + assert len(optional) == 0 mgr = M2(self.gl) required, optional = mgr.get_create_attrs() - self.assertIn("foo", required) - self.assertIn("bar", optional) - self.assertIn("baz", optional) - self.assertNotIn("bam", optional) + assert "foo" in required + assert "bar" in optional + assert "baz" in optional + assert "bam" not in optional def test_create_mixin_missing_attrs(self): class M(CreateMixin, FakeManager): @@ -271,9 +273,9 @@ class TestMixinMethods(unittest.TestCase): mgr._check_missing_create_attrs(data) data = {"baz": "blah"} - with self.assertRaises(AttributeError) as error: + with pytest.raises(AttributeError) as error: mgr._check_missing_create_attrs(data) - self.assertIn("foo", str(error.exception)) + assert "foo" in str(error.value) def test_create_mixin(self): class M(CreateMixin, FakeManager): @@ -291,9 +293,9 @@ class TestMixinMethods(unittest.TestCase): with HTTMock(resp_cont): mgr = M(self.gl) obj = mgr.create({"foo": "bar"}) - self.assertIsInstance(obj, FakeObject) - self.assertEqual(obj.id, 42) - self.assertEqual(obj.foo, "bar") + assert isinstance(obj, FakeObject) + assert obj.id == 42 + assert obj.foo == "bar" def test_create_mixin_custom_path(self): class M(CreateMixin, FakeManager): @@ -311,9 +313,9 @@ class TestMixinMethods(unittest.TestCase): with HTTMock(resp_cont): mgr = M(self.gl) obj = mgr.create({"foo": "bar"}, path="/others") - self.assertIsInstance(obj, FakeObject) - self.assertEqual(obj.id, 42) - self.assertEqual(obj.foo, "bar") + assert isinstance(obj, FakeObject) + assert obj.id == 42 + assert obj.foo == "bar" def test_update_mixin_get_attrs(self): class M1(UpdateMixin, FakeManager): @@ -325,15 +327,15 @@ class TestMixinMethods(unittest.TestCase): mgr = M1(self.gl) required, optional = mgr.get_update_attrs() - self.assertEqual(len(required), 0) - self.assertEqual(len(optional), 0) + assert len(required) == 0 + assert len(optional) == 0 mgr = M2(self.gl) required, optional = mgr.get_update_attrs() - self.assertIn("foo", required) - self.assertIn("bam", optional) - self.assertNotIn("bar", optional) - self.assertNotIn("baz", optional) + assert "foo" in required + assert "bam" in optional + assert "bar" not in optional + assert "baz" not in optional def test_update_mixin_missing_attrs(self): class M(UpdateMixin, FakeManager): @@ -344,9 +346,9 @@ class TestMixinMethods(unittest.TestCase): mgr._check_missing_update_attrs(data) data = {"baz": "blah"} - with self.assertRaises(AttributeError) as error: + with pytest.raises(AttributeError) as error: mgr._check_missing_update_attrs(data) - self.assertIn("foo", str(error.exception)) + assert "foo" in str(error.value) def test_update_mixin(self): class M(UpdateMixin, FakeManager): @@ -364,9 +366,9 @@ class TestMixinMethods(unittest.TestCase): with HTTMock(resp_cont): mgr = M(self.gl) server_data = mgr.update(42, {"foo": "baz"}) - self.assertIsInstance(server_data, dict) - self.assertEqual(server_data["id"], 42) - self.assertEqual(server_data["foo"], "baz") + assert isinstance(server_data, dict) + assert server_data["id"] == 42 + assert server_data["foo"] == "baz" def test_update_mixin_no_id(self): class M(UpdateMixin, FakeManager): @@ -382,8 +384,8 @@ class TestMixinMethods(unittest.TestCase): with HTTMock(resp_cont): mgr = M(self.gl) server_data = mgr.update(new_data={"foo": "baz"}) - self.assertIsInstance(server_data, dict) - self.assertEqual(server_data["foo"], "baz") + assert isinstance(server_data, dict) + assert server_data["foo"] == "baz" def test_delete_mixin(self): class M(DeleteMixin, FakeManager): @@ -421,8 +423,8 @@ class TestMixinMethods(unittest.TestCase): obj = O(mgr, {"id": 42, "foo": "bar"}) obj.foo = "baz" obj.save() - self.assertEqual(obj._attrs["foo"], "baz") - self.assertDictEqual(obj._updated_attrs, {}) + assert obj._attrs["foo"] == "baz" + assert obj._updated_attrs == {} def test_set_mixin(self): class M(SetMixin, FakeManager): @@ -439,6 +441,6 @@ class TestMixinMethods(unittest.TestCase): with HTTMock(resp_cont): mgr = M(self.gl) obj = mgr.set("foo", "bar") - self.assertIsInstance(obj, FakeObject) - self.assertEqual(obj.key, "foo") - self.assertEqual(obj.value, "bar") + assert isinstance(obj, FakeObject) + assert obj.key == "foo" + assert obj.value == "bar" diff --git a/gitlab/tests/test_types.py b/gitlab/tests/test_types.py index 3613383..8471bdf 100644 --- a/gitlab/tests/test_types.py +++ b/gitlab/tests/test_types.py @@ -23,49 +23,49 @@ from gitlab import types class TestGitlabAttribute(unittest.TestCase): def test_all(self): o = types.GitlabAttribute("whatever") - self.assertEqual("whatever", o.get()) + assert "whatever" == o.get() o.set_from_cli("whatever2") - self.assertEqual("whatever2", o.get()) + assert "whatever2" == o.get() - self.assertEqual("whatever2", o.get_for_api()) + assert "whatever2" == o.get_for_api() o = types.GitlabAttribute() - self.assertEqual(None, o._value) + assert None == o._value class TestListAttribute(unittest.TestCase): def test_list_input(self): o = types.ListAttribute() o.set_from_cli("foo,bar,baz") - self.assertEqual(["foo", "bar", "baz"], o.get()) + assert ["foo", "bar", "baz"] == o.get() o.set_from_cli("foo") - self.assertEqual(["foo"], o.get()) + assert ["foo"] == o.get() def test_empty_input(self): o = types.ListAttribute() o.set_from_cli("") - self.assertEqual([], o.get()) + assert [] == o.get() o.set_from_cli(" ") - self.assertEqual([], o.get()) + assert [] == o.get() def test_get_for_api_from_cli(self): o = types.ListAttribute() o.set_from_cli("foo,bar,baz") - self.assertEqual("foo,bar,baz", o.get_for_api()) + assert "foo,bar,baz" == o.get_for_api() def test_get_for_api_from_list(self): o = types.ListAttribute(["foo", "bar", "baz"]) - self.assertEqual("foo,bar,baz", o.get_for_api()) + assert "foo,bar,baz" == o.get_for_api() def test_get_for_api_does_not_split_string(self): o = types.ListAttribute("foo") - self.assertEqual("foo", o.get_for_api()) + assert "foo" == o.get_for_api() class TestLowercaseStringAttribute(unittest.TestCase): def test_get_for_api(self): o = types.LowercaseStringAttribute("FOO") - self.assertEqual("foo", o.get_for_api()) + assert "foo" == o.get_for_api() diff --git a/gitlab/tests/test_utils.py b/gitlab/tests/test_utils.py index b57deda..7ebd006 100644 --- a/gitlab/tests/test_utils.py +++ b/gitlab/tests/test_utils.py @@ -24,17 +24,17 @@ class TestUtils(unittest.TestCase): def test_clean_str_id(self): src = "nothing_special" dest = "nothing_special" - self.assertEqual(dest, utils.clean_str_id(src)) + assert dest == utils.clean_str_id(src) src = "foo#bar/baz/" dest = "foo%23bar%2Fbaz%2F" - self.assertEqual(dest, utils.clean_str_id(src)) + assert dest == utils.clean_str_id(src) def test_sanitized_url(self): src = "http://localhost/foo/bar" dest = "http://localhost/foo/bar" - self.assertEqual(dest, utils.sanitized_url(src)) + assert dest == utils.sanitized_url(src) src = "http://localhost/foo.bar.baz" dest = "http://localhost/foo%2Ebar%2Ebaz" - self.assertEqual(dest, utils.sanitized_url(src)) + assert dest == utils.sanitized_url(src) |