summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGauvain Pocentek <gauvain@pocentek.net>2017-11-11 16:06:21 +0100
committerGauvain Pocentek <gauvain@pocentek.net>2017-11-11 16:14:21 +0100
commit4ee139ad5c58006da1f9af93fdd4e70592e6daa0 (patch)
tree3bd816b1981cf2089cfbac6f47904f33f72e6ac1
parenta1b097ce1811d320322a225d22183c36125b4a3c (diff)
downloadgitlab-4ee139ad5c58006da1f9af93fdd4e70592e6daa0.tar.gz
Add unit tests for mixin exceptions
-rw-r--r--RELEASE_NOTES.rst1
-rw-r--r--gitlab/mixins.py9
-rw-r--r--gitlab/tests/test_mixins.py86
3 files changed, 94 insertions, 2 deletions
diff --git a/RELEASE_NOTES.rst b/RELEASE_NOTES.rst
index 2d6a05c..a9008f7 100644
--- a/RELEASE_NOTES.rst
+++ b/RELEASE_NOTES.rst
@@ -16,6 +16,7 @@ Changes from 1.1 to 1.2
``set_token`` and ``set_credentials`` methods. Once a Gitlab object has been
created its URL and authentication information cannot be updated: create a
new Gitlab object if you need to use new information
+* The ``todo()`` method raises a ``GitlabTodoError`` exception on error
Changes from 1.0.2 to 1.1
=========================
diff --git a/gitlab/mixins.py b/gitlab/mixins.py
index 3d6e321..c9243ed 100644
--- a/gitlab/mixins.py
+++ b/gitlab/mixins.py
@@ -113,7 +113,12 @@ class GetFromListMixin(ListMixin):
GitlabAuthenticationError: If authentication is not correct
GitlabGetError: If the server cannot perform the request
"""
- gen = self.list()
+ try:
+ gen = self.list()
+ except exc.GitlabListError:
+ raise exc.GitlabGetError(response_code=404,
+ error_message="Not found")
+
for obj in gen:
if str(obj.get_id()) == str(id):
return obj
@@ -382,7 +387,7 @@ class SubscribableMixin(object):
class TodoMixin(object):
@cli.register_custom_action(('ProjectIssue', 'ProjectMergeRequest'))
- @exc.on_http_error(exc.GitlabHttpError)
+ @exc.on_http_error(exc.GitlabTodoError)
def todo(self, **kwargs):
"""Create a todo associated to the object.
diff --git a/gitlab/tests/test_mixins.py b/gitlab/tests/test_mixins.py
index c51322a..e78c757 100644
--- a/gitlab/tests/test_mixins.py
+++ b/gitlab/tests/test_mixins.py
@@ -434,3 +434,89 @@ class TestMixinMethods(unittest.TestCase):
self.assertIsInstance(obj, FakeObject)
self.assertEqual(obj.key, 'foo')
self.assertEqual(obj.value, 'bar')
+
+
+class TestExceptions(unittest.TestCase):
+ def setUp(self):
+ self.gl = Gitlab("http://localhost", private_token="private_token",
+ api_version=4)
+
+ def test_get_mixin(self):
+ class M(GetMixin, FakeManager):
+ pass
+
+ m = M(self.gl)
+ self.assertRaises(GitlabGetError, m.get, 1)
+
+ def test_get_without_id_mixin(self):
+ class M(GetWithoutIdMixin, FakeManager):
+ pass
+
+ m = M(self.gl)
+ self.assertRaises(GitlabGetError, m.get)
+
+ def test_list_mixin(self):
+ class M(ListMixin, FakeManager):
+ pass
+
+ m = M(self.gl)
+ self.assertRaises(GitlabListError, m.list)
+
+ def test_get_from_list_mixin(self):
+ class M(GetFromListMixin, FakeManager):
+ pass
+
+ m = M(self.gl)
+ self.assertRaises(GitlabListError, m.list)
+ self.assertRaises(GitlabGetError, m.get, 1)
+
+ def test_create_mixin(self):
+ class M(CreateMixin, FakeManager):
+ pass
+
+ m = M(self.gl)
+ self.assertRaises(GitlabCreateError, m.create, {})
+
+ def test_update_mixin(self):
+ class M(UpdateMixin, FakeManager):
+ pass
+
+ m = M(self.gl)
+ self.assertRaises(GitlabUpdateError, m.update, 1, {})
+
+ def test_set_mixin(self):
+ class M(SetMixin, FakeManager):
+ pass
+
+ m = M(self.gl)
+ self.assertRaises(GitlabSetError, m.set, 'foo', 'bar')
+
+ def test_delete_mixin(self):
+ class M(DeleteMixin, FakeManager):
+ pass
+
+ m = M(self.gl)
+ self.assertRaises(GitlabDeleteError, m.delete, 1)
+
+ def test_object_mixin(self):
+ class M(UpdateMixin, DeleteMixin, FakeManager):
+ pass
+
+ class O(SaveMixin, ObjectDeleteMixin, AccessRequestMixin,
+ SubscribableMixin, TodoMixin, TimeTrackingMixin, RESTObject):
+ pass
+
+ mgr = M(self.gl)
+ obj = O(mgr, {'id': 42, 'foo': 'bar'})
+ obj.foo = 'baz'
+ self.assertRaises(GitlabUpdateError, obj.save)
+ self.assertRaises(GitlabDeleteError, obj.delete)
+ self.assertRaises(GitlabUpdateError, obj.approve)
+ self.assertRaises(GitlabSubscribeError, obj.subscribe)
+ self.assertRaises(GitlabUnsubscribeError, obj.unsubscribe)
+ self.assertRaises(GitlabTodoError, obj.todo)
+ self.assertRaises(GitlabTimeTrackingError, obj.time_stats)
+ self.assertRaises(GitlabTimeTrackingError, obj.time_estimate, '1d')
+ self.assertRaises(GitlabTimeTrackingError, obj.reset_time_estimate)
+ self.assertRaises(GitlabTimeTrackingError, obj.add_spent_time, '1d')
+ self.assertRaises(GitlabTimeTrackingError, obj.reset_spent_time)