summaryrefslogtreecommitdiff
path: root/gitlab/tests
diff options
context:
space:
mode:
authorGauvain Pocentek <gauvain.pocentek@objectif-libre.com>2016-01-03 13:21:03 +0100
committerGauvain Pocentek <gauvain.pocentek@objectif-libre.com>2016-01-03 13:21:03 +0100
commit2a93c629ef88ffbe2564d154fa32fc723a4b0ea9 (patch)
tree95a30867d89f78bc15896a9e870fd551a89ee6cd /gitlab/tests
parentfdf295f99f4e7f68e360280f103a164f447adf15 (diff)
downloadgitlab-2a93c629ef88ffbe2564d154fa32fc723a4b0ea9.tar.gz
add unit tests for BaseManager
Diffstat (limited to 'gitlab/tests')
-rw-r--r--gitlab/tests/test_manager.py147
1 files changed, 147 insertions, 0 deletions
diff --git a/gitlab/tests/test_manager.py b/gitlab/tests/test_manager.py
new file mode 100644
index 0000000..837e013
--- /dev/null
+++ b/gitlab/tests/test_manager.py
@@ -0,0 +1,147 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2016 Gauvain Pocentek <gauvain@pocentek.net>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+try:
+ import unittest
+except ImportError:
+ import unittest2 as unittest
+
+from httmock import HTTMock # noqa
+from httmock import response # noqa
+from httmock import urlmatch # noqa
+
+from gitlab import * # noqa
+from gitlab.objects import BaseManager # noqa
+
+
+class FakeChildObject(GitlabObject):
+ _url = "/fake"
+
+
+class FakeChildManager(BaseManager):
+ obj_cls = FakeChildObject
+
+
+class FakeObject(GitlabObject):
+ _url = "/fake"
+ managers = [('children', FakeChildManager, [('child_id', 'id')])]
+
+
+class FakeObjectManager(BaseManager):
+ obj_cls = FakeObject
+
+
+class TestGitlabManager(unittest.TestCase):
+ def setUp(self):
+ self.gitlab = Gitlab("http://localhost", private_token="private_token",
+ email="testuser@test.com",
+ password="testpassword", ssl_verify=True)
+
+ def test_constructor(self):
+ self.assertRaises(AttributeError, BaseManager, self.gitlab)
+
+ @urlmatch(scheme="http", netloc="localhost", path="/api/v3/fake/1",
+ method="get")
+ def resp_get(url, request):
+ headers = {'content-type': 'application/json'}
+ content = '{"id": 1, "name": "fake_name"}'.encode("utf-8")
+ return response(200, content, headers, None, 5, request)
+
+ with HTTMock(resp_get):
+ mgr = FakeObjectManager(self.gitlab)
+ fake_obj = mgr.get(1)
+ self.assertEqual(fake_obj.id, 1)
+ self.assertEqual(fake_obj.name, "fake_name")
+ self.assertEqual(mgr.gitlab, self.gitlab)
+ self.assertEqual(mgr.args, [])
+ self.assertEqual(mgr.parent, None)
+
+ self.assertIsInstance(fake_obj.children, FakeChildManager)
+ self.assertEqual(fake_obj.children.gitlab, self.gitlab)
+ self.assertEqual(fake_obj.children.parent, fake_obj)
+ self.assertEqual(len(fake_obj.children.args), 1)
+
+ fake_child = fake_obj.children.get(1)
+ self.assertEqual(fake_child.id, 1)
+ self.assertEqual(fake_child.name, "fake_name")
+
+ def test_get(self):
+ mgr = FakeObjectManager(self.gitlab)
+ FakeObject.canGet = False
+ self.assertRaises(NotImplementedError, mgr.get, 1)
+
+ @urlmatch(scheme="http", netloc="localhost", path="/api/v3/fake/1",
+ method="get")
+ def resp_get(url, request):
+ headers = {'content-type': 'application/json'}
+ content = '{"id": 1, "name": "fake_name"}'.encode("utf-8")
+ return response(200, content, headers, None, 5, request)
+
+ with HTTMock(resp_get):
+ FakeObject.canGet = True
+ mgr = FakeObjectManager(self.gitlab)
+ fake_obj = mgr.get(1)
+ self.assertIsInstance(fake_obj, FakeObject)
+ self.assertEqual(fake_obj.id, 1)
+ self.assertEqual(fake_obj.name, "fake_name")
+
+ def test_list(self):
+ mgr = FakeObjectManager(self.gitlab)
+ FakeObject.canList = False
+ self.assertRaises(NotImplementedError, mgr.list)
+
+ @urlmatch(scheme="http", netloc="localhost", path="/api/v3/fake",
+ method="get")
+ def resp_get(url, request):
+ headers = {'content-type': 'application/json'}
+ content = ('[{"id": 1, "name": "fake_name1"},'
+ '{"id": 2, "name": "fake_name2"}]')
+ content = content.encode("utf-8")
+ return response(200, content, headers, None, 5, request)
+
+ with HTTMock(resp_get):
+ FakeObject.canList = True
+ mgr = FakeObjectManager(self.gitlab)
+ fake_list = mgr.list()
+ self.assertEqual(len(fake_list), 2)
+ self.assertIsInstance(fake_list[0], FakeObject)
+ self.assertEqual(fake_list[0].id, 1)
+ self.assertEqual(fake_list[0].name, "fake_name1")
+ self.assertIsInstance(fake_list[1], FakeObject)
+ self.assertEqual(fake_list[1].id, 2)
+ self.assertEqual(fake_list[1].name, "fake_name2")
+
+ def test_create(self):
+ mgr = FakeObjectManager(self.gitlab)
+ FakeObject.canCreate = False
+ self.assertRaises(NotImplementedError, mgr.create, {'foo': 'bar'})
+
+ @urlmatch(scheme="http", netloc="localhost", path="/api/v3/fake",
+ method="post")
+ def resp_post(url, request):
+ headers = {'content-type': 'application/json'}
+ data = '{"name": "fake_name"}'
+ content = '{"id": 1, "name": "fake_name"}'.encode("utf-8")
+ return response(201, content, headers, data, 5, request)
+
+ with HTTMock(resp_post):
+ FakeObject.canCreate = True
+ mgr = FakeObjectManager(self.gitlab)
+ fake_obj = mgr.create({'name': 'fake_name'})
+ self.assertIsInstance(fake_obj, FakeObject)
+ self.assertEqual(fake_obj.id, 1)
+ self.assertEqual(fake_obj.name, "fake_name")