Skip to content

Commit 4ee139a

Browse files
author
Gauvain Pocentek
committed
Add unit tests for mixin exceptions
1 parent a1b097c commit 4ee139a

File tree

3 files changed

+94
-2
lines changed

3 files changed

+94
-2
lines changed

RELEASE_NOTES.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ Changes from 1.1 to 1.2
1616
``set_token`` and ``set_credentials`` methods. Once a Gitlab object has been
1717
created its URL and authentication information cannot be updated: create a
1818
new Gitlab object if you need to use new information
19+
* The ``todo()`` method raises a ``GitlabTodoError`` exception on error
1920

2021
Changes from 1.0.2 to 1.1
2122
=========================

gitlab/mixins.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,12 @@ def get(self, id, **kwargs):
113113
GitlabAuthenticationError: If authentication is not correct
114114
GitlabGetError: If the server cannot perform the request
115115
"""
116-
gen = self.list()
116+
try:
117+
gen = self.list()
118+
except exc.GitlabListError:
119+
raise exc.GitlabGetError(response_code=404,
120+
error_message="Not found")
121+
117122
for obj in gen:
118123
if str(obj.get_id()) == str(id):
119124
return obj
@@ -382,7 +387,7 @@ def unsubscribe(self, **kwargs):
382387

383388
class TodoMixin(object):
384389
@cli.register_custom_action(('ProjectIssue', 'ProjectMergeRequest'))
385-
@exc.on_http_error(exc.GitlabHttpError)
390+
@exc.on_http_error(exc.GitlabTodoError)
386391
def todo(self, **kwargs):
387392
"""Create a todo associated to the object.
388393

gitlab/tests/test_mixins.py

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,3 +434,89 @@ def resp_cont(url, request):
434434
self.assertIsInstance(obj, FakeObject)
435435
self.assertEqual(obj.key, 'foo')
436436
self.assertEqual(obj.value, 'bar')
437+
438+
439+
class TestExceptions(unittest.TestCase):
440+
def setUp(self):
441+
self.gl = Gitlab("http://localhost", private_token="private_token",
442+
api_version=4)
443+
444+
def test_get_mixin(self):
445+
class M(GetMixin, FakeManager):
446+
pass
447+
448+
m = M(self.gl)
449+
self.assertRaises(GitlabGetError, m.get, 1)
450+
451+
def test_get_without_id_mixin(self):
452+
class M(GetWithoutIdMixin, FakeManager):
453+
pass
454+
455+
m = M(self.gl)
456+
self.assertRaises(GitlabGetError, m.get)
457+
458+
def test_list_mixin(self):
459+
class M(ListMixin, FakeManager):
460+
pass
461+
462+
m = M(self.gl)
463+
self.assertRaises(GitlabListError, m.list)
464+
465+
def test_get_from_list_mixin(self):
466+
class M(GetFromListMixin, FakeManager):
467+
pass
468+
469+
m = M(self.gl)
470+
self.assertRaises(GitlabListError, m.list)
471+
self.assertRaises(GitlabGetError, m.get, 1)
472+
473+
def test_create_mixin(self):
474+
class M(CreateMixin, FakeManager):
475+
pass
476+
477+
m = M(self.gl)
478+
self.assertRaises(GitlabCreateError, m.create, {})
479+
480+
def test_update_mixin(self):
481+
class M(UpdateMixin, FakeManager):
482+
pass
483+
484+
m = M(self.gl)
485+
self.assertRaises(GitlabUpdateError, m.update, 1, {})
486+
487+
def test_set_mixin(self):
488+
class M(SetMixin, FakeManager):
489+
pass
490+
491+
m = M(self.gl)
492+
self.assertRaises(GitlabSetError, m.set, 'foo', 'bar')
493+
494+
def test_delete_mixin(self):
495+
class M(DeleteMixin, FakeManager):
496+
pass
497+
498+
m = M(self.gl)
499+
self.assertRaises(GitlabDeleteError, m.delete, 1)
500+
501+
def test_object_mixin(self):
502+
class M(UpdateMixin, DeleteMixin, FakeManager):
503+
pass
504+
505+
class O(SaveMixin, ObjectDeleteMixin, AccessRequestMixin,
506+
SubscribableMixin, TodoMixin, TimeTrackingMixin, RESTObject):
507+
pass
508+
509+
mgr = M(self.gl)
510+
obj = O(mgr, {'id': 42, 'foo': 'bar'})
511+
obj.foo = 'baz'
512+
self.assertRaises(GitlabUpdateError, obj.save)
513+
self.assertRaises(GitlabDeleteError, obj.delete)
514+
self.assertRaises(GitlabUpdateError, obj.approve)
515+
self.assertRaises(GitlabSubscribeError, obj.subscribe)
516+
self.assertRaises(GitlabUnsubscribeError, obj.unsubscribe)
517+
self.assertRaises(GitlabTodoError, obj.todo)
518+
self.assertRaises(GitlabTimeTrackingError, obj.time_stats)
519+
self.assertRaises(GitlabTimeTrackingError, obj.time_estimate, '1d')
520+
self.assertRaises(GitlabTimeTrackingError, obj.reset_time_estimate)
521+
self.assertRaises(GitlabTimeTrackingError, obj.add_spent_time, '1d')
522+
self.assertRaises(GitlabTimeTrackingError, obj.reset_spent_time)

0 commit comments

Comments
 (0)