diff options
author | Nejc Habjan <hab.nejc@gmail.com> | 2020-04-05 22:58:04 +0200 |
---|---|---|
committer | Nejc Habjan <hab.nejc@gmail.com> | 2020-04-05 22:58:04 +0200 |
commit | e7b2d6c873f0bfd502d06c9bd239cedc465e51c5 (patch) | |
tree | b3ce19f49fbbb4dcecd7cee8a32f02ed80f823b2 /gitlab | |
parent | 6cb9d9238ea3cc73689d6b71e991f2ec233ee8e6 (diff) | |
download | gitlab-e7b2d6c873f0bfd502d06c9bd239cedc465e51c5.tar.gz |
test(api): add tests for group export/import API
Diffstat (limited to 'gitlab')
-rw-r--r-- | gitlab/tests/objects/mocks.py | 35 | ||||
-rw-r--r-- | gitlab/tests/objects/test_commits.py | 3 | ||||
-rw-r--r-- | gitlab/tests/objects/test_groups.py | 101 | ||||
-rw-r--r-- | gitlab/tests/objects/test_projects.py | 29 | ||||
-rw-r--r-- | gitlab/tests/test_gitlab.py | 17 |
5 files changed, 139 insertions, 46 deletions
diff --git a/gitlab/tests/objects/mocks.py b/gitlab/tests/objects/mocks.py new file mode 100644 index 0000000..e051339 --- /dev/null +++ b/gitlab/tests/objects/mocks.py @@ -0,0 +1,35 @@ +"""Common mocks for resources in gitlab.v4.objects""" + +from httmock import response, urlmatch + + +headers = {"content-type": "application/json"} +binary_content = b"binary content" + + +@urlmatch( + scheme="http", + netloc="localhost", + path="/api/v4/(groups|projects)/1/export", + method="post", +) +def resp_create_export(url, request): + """Common mock for Group/Project Export POST response.""" + content = """{ + "message": "202 Accepted" + }""" + content = content.encode("utf-8") + return response(202, content, headers, None, 25, request) + + +@urlmatch( + scheme="http", + netloc="localhost", + path="/api/v4/(groups|projects)/1/export/download", + method="get", +) +def resp_download_export(url, request): + """Common mock for Group/Project Export Download GET response.""" + headers = {"content-type": "application/octet-stream"} + content = binary_content + return response(200, content, headers, None, 25, request) diff --git a/gitlab/tests/objects/test_commits.py b/gitlab/tests/objects/test_commits.py index 23a4285..7e7c3b4 100644 --- a/gitlab/tests/objects/test_commits.py +++ b/gitlab/tests/objects/test_commits.py @@ -1,6 +1,7 @@ from httmock import urlmatch, response, with_httmock -from .test_projects import headers, TestProject +from .mocks import headers +from .test_projects import TestProject @urlmatch( diff --git a/gitlab/tests/objects/test_groups.py b/gitlab/tests/objects/test_groups.py new file mode 100644 index 0000000..075d915 --- /dev/null +++ b/gitlab/tests/objects/test_groups.py @@ -0,0 +1,101 @@ +import unittest + +from httmock import response, urlmatch, with_httmock + +import gitlab +from .mocks import * # noqa + + +@urlmatch(scheme="http", netloc="localhost", path="/api/v4/groups/1", method="get") +def resp_get_group(url, request): + content = '{"name": "name", "id": 1, "path": "path"}' + content = content.encode("utf-8") + return response(200, content, headers, None, 5, request) + + +@urlmatch(scheme="http", netloc="localhost", path="/api/v4/groups", method="post") +def resp_create_group(url, request): + content = '{"name": "name", "id": 1, "path": "path"}' + content = content.encode("utf-8") + return response(200, content, headers, None, 5, request) + + +@urlmatch( + scheme="http", netloc="localhost", path="/api/v4/groups/import", method="post", +) +def resp_create_import(url, request): + """Mock for Group import tests. + + GitLab does not respond with import status for group imports. + """ + + content = """{ + "message": "202 Accepted" + }""" + content = content.encode("utf-8") + return response(202, content, headers, None, 25, request) + + +class TestGroup(unittest.TestCase): + def setUp(self): + self.gl = gitlab.Gitlab( + "http://localhost", + private_token="private_token", + ssl_verify=True, + api_version=4, + ) + + @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) + + @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) + + +class TestGroupExport(TestGroup): + def setUp(self): + super(TestGroupExport, self).setUp() + self.group = self.gl.groups.get(1, lazy=True) + + @with_httmock(resp_create_export) + def test_create_group_export(self): + export = self.group.exports.create() + self.assertEqual(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") + + @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) + + +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") + + @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") diff --git a/gitlab/tests/objects/test_projects.py b/gitlab/tests/objects/test_projects.py index d87f759..1c2347a 100644 --- a/gitlab/tests/objects/test_projects.py +++ b/gitlab/tests/objects/test_projects.py @@ -10,21 +10,7 @@ from gitlab import * # noqa from gitlab.v4.objects import * # noqa from httmock import HTTMock, urlmatch, response, with_httmock # noqa - -headers = {"content-type": "application/json"} -binary_content = b"binary content" - - -@urlmatch( - scheme="http", netloc="localhost", path="/api/v4/projects/1/export", method="post", -) -def resp_create_export(url, request): - """Common mock for Project Export tests.""" - content = """{ - "message": "202 Accepted" - }""" - content = content.encode("utf-8") - return response(202, content, headers, None, 25, request) +from .mocks import * # noqa @urlmatch( @@ -52,19 +38,6 @@ def resp_export_status(url, request): @urlmatch( - scheme="http", - netloc="localhost", - path="/api/v4/projects/1/export/download", - method="get", -) -def resp_download_export(url, request): - """Mock for Project Export Download GET response.""" - headers = {"content-type": "application/octet-stream"} - content = binary_content - return response(200, content, headers, None, 25, request) - - -@urlmatch( scheme="http", netloc="localhost", path="/api/v4/projects/import", method="post", ) def resp_import_project(url, request): diff --git a/gitlab/tests/test_gitlab.py b/gitlab/tests/test_gitlab.py index d104c7d..8261cc6 100644 --- a/gitlab/tests/test_gitlab.py +++ b/gitlab/tests/test_gitlab.py @@ -626,23 +626,6 @@ class TestGitlab(unittest.TestCase): self.assertIsInstance(statistics, ProjectIssuesStatistics) self.assertEqual(statistics.statistics["counts"]["all"], 20) - def test_groups(self): - @urlmatch( - scheme="http", netloc="localhost", path="/api/v4/groups/1", method="get" - ) - def resp_get_group(url, request): - headers = {"content-type": "application/json"} - content = '{"name": "name", "id": 1, "path": "path"}' - content = content.encode("utf-8") - return response(200, content, headers, None, 5, request) - - with HTTMock(resp_get_group): - data = self.gl.groups.get(1) - self.assertIsInstance(data, Group) - self.assertEqual(data.name, "name") - self.assertEqual(data.path, "path") - self.assertEqual(data.id, 1) - def test_issues(self): @urlmatch( scheme="http", netloc="localhost", path="/api/v4/issues", method="get" |