Skip to content

Commit 8f59516

Browse files
committed
define UserManager.search() to search for users
1 parent 01802c0 commit 8f59516

File tree

3 files changed

+43
-0
lines changed

3 files changed

+43
-0
lines changed

gitlab/objects.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -565,6 +565,14 @@ def __eq__(self, other):
565565
class UserManager(BaseManager):
566566
obj_cls = User
567567

568+
def search(self, query, **kwargs):
569+
"""Search users.
570+
571+
Returns a list of matching users.
572+
"""
573+
url = self.obj_cls._url + '?search=' + query
574+
return self._custom_list(url, self.obj_cls, **kwargs)
575+
568576

569577
class CurrentUserKey(GitlabObject):
570578
_url = '/user/keys'

gitlab/tests/test_manager.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,29 @@ def resp_get_all(url, request):
235235
self.assertEqual(data[0].id, 1)
236236
self.assertEqual(data[1].id, 2)
237237

238+
def test_user_manager_search(self):
239+
mgr = UserManager(self.gitlab)
240+
241+
@urlmatch(scheme="http", netloc="localhost", path="/api/v3/users",
242+
query="search=foo", method="get")
243+
def resp_get_search(url, request):
244+
headers = {'content-type': 'application/json'}
245+
content = ('[{"name": "foo1", "id": 1}, '
246+
'{"name": "foo2", "id": 2}]')
247+
content = content.encode("utf-8")
248+
return response(200, content, headers, None, 5, request)
249+
250+
with HTTMock(resp_get_search):
251+
data = mgr.search('foo')
252+
self.assertEqual(type(data), list)
253+
self.assertEqual(2, len(data))
254+
self.assertEqual(type(data[0]), User)
255+
self.assertEqual(type(data[1]), User)
256+
self.assertEqual(data[0].name, "foo1")
257+
self.assertEqual(data[1].name, "foo2")
258+
self.assertEqual(data[0].id, 1)
259+
self.assertEqual(data[1].id, 2)
260+
238261
def test_group_manager_search(self):
239262
mgr = GroupManager(self.gitlab)
240263

tools/python_test.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,24 @@
4343
new_user.block()
4444
new_user.unblock()
4545

46+
foobar_user = gl.users.create(
47+
{'email': 'foobar@example.com', 'username': 'foobar',
48+
'name': 'Foo Bar', 'password': 'foobar_password'})
49+
50+
assert gl.users.search('foobar') == [foobar_user]
51+
usercmp = lambda x,y: cmp(x.id, y.id)
52+
expected = sorted([new_user, foobar_user], cmp=usercmp)
53+
actual = sorted(gl.users.search('foo'), cmp=usercmp)
54+
assert expected == actual
55+
assert gl.users.search('asdf') == []
56+
4657
# SSH keys
4758
key = new_user.keys.create({'title': 'testkey', 'key': SSH_KEY})
4859
assert(len(new_user.keys.list()) == 1)
4960
key.delete()
5061

5162
new_user.delete()
63+
foobar_user.delete()
5264
assert(len(gl.users.list()) == 1)
5365

5466
# current user key

0 commit comments

Comments
 (0)