diff --git a/pagure/api/__init__.py b/pagure/api/__init__.py index d349944..3c542f3 100644 --- a/pagure/api/__init__.py +++ b/pagure/api/__init__.py @@ -359,55 +359,6 @@ def api_project_tags(repo, username=None): ) -@API.route('/groups/') -@API.route('/groups') -def api_groups(): - ''' - List groups - ----------- - Retrieve groups on this Pagure instance. - This can then be used as input for autocompletion in some forms/fields. - - :: - - GET /api/0/groups - - Parameters - ^^^^^^^^^^ - - +---------------+----------+---------------+--------------------------+ - | Key | Type | Optionality | Description | - +===============+==========+===============+==========================+ - | ``pattern`` | string | Optional | | Filters the starting | - | | | | letters of the group | - | | | | names | - +---------------+----------+---------------+--------------------------+ - - Sample response - ^^^^^^^^^^^^^^^ - - :: - - { - "total_groups": 2, - "groups": ["group1", "group2"] - } - - ''' - pattern = flask.request.args.get('pattern', None) - if pattern is not None and not pattern.endswith('*'): - pattern += '*' - - groups = pagure.lib.search_groups(SESSION, pattern=pattern) - - return flask.jsonify( - { - 'total_groups': len(groups), - 'groups': [group.group_name for group in groups] - } - ) - - @API.route('/error_codes/') @API.route('/error_codes') def api_error_codes(): @@ -483,10 +434,10 @@ def api(): user.api_view_user_activity_date) api_view_group_doc = load_doc(group.api_view_group) + api_groups_doc = load_doc(group.api_groups) if pagure.APP.config.get('ENABLE_TICKETS', True): api_project_tags_doc = load_doc(api_project_tags) - api_groups_doc = load_doc(api_groups) api_error_codes_doc = load_doc(api_error_codes) extras = [ @@ -519,11 +470,11 @@ def api(): users=[ api_users_doc, api_view_user_doc, - api_groups_doc, api_view_user_activity_stats_doc, api_view_user_activity_date_doc, ], groups=[ + api_groups_doc, api_view_group_doc ], ci=ci_doc, diff --git a/pagure/api/group.py b/pagure/api/group.py index 3e30ca9..57b7752 100644 --- a/pagure/api/group.py +++ b/pagure/api/group.py @@ -4,6 +4,7 @@ (c) 2017 - Copyright Red Hat Inc Authors: + Pierre-Yves Chibon Matt Prahl """ @@ -17,6 +18,55 @@ from pagure import SESSION from pagure.api import API, api_method, APIERROR +@API.route('/groups/') +@API.route('/groups') +def api_groups(): + ''' + List groups + ----------- + Retrieve groups on this Pagure instance. + This can then be used as input for autocompletion in some forms/fields. + + :: + + GET /api/0/groups + + Parameters + ^^^^^^^^^^ + + +---------------+----------+---------------+--------------------------+ + | Key | Type | Optionality | Description | + +===============+==========+===============+==========================+ + | ``pattern`` | string | Optional | | Filters the starting | + | | | | letters of the group | + | | | | names | + +---------------+----------+---------------+--------------------------+ + + Sample response + ^^^^^^^^^^^^^^^ + + :: + + { + "total_groups": 2, + "groups": ["group1", "group2"] + } + + ''' + pattern = flask.request.args.get('pattern', None) + if pattern is not None and not pattern.endswith('*'): + pattern += '*' + + groups = pagure.lib.search_groups(SESSION, pattern=pattern) + + return flask.jsonify( + { + 'total_groups': len(groups), + 'groups': [group.group_name for group in groups] + } + ) + + @API.route('/group/') @api_method def api_view_group(group): diff --git a/tests/test_pagure_flask_api.py b/tests/test_pagure_flask_api.py index c912d38..0b198cd 100644 --- a/tests/test_pagure_flask_api.py +++ b/tests/test_pagure_flask_api.py @@ -109,41 +109,6 @@ class PagureFlaskApitests(tests.Modeltests): self.assertEqual(data['tags'], []) self.assertEqual(data['total_tags'], 0) - def test_api_groups(self): - """ Test the api_groups function. """ - - # Add a couple of groups so that we can list them - item = pagure.lib.model.PagureGroup( - group_name='group1', - group_type='user', - display_name='User group', - user_id=1, # pingou - ) - self.session.add(item) - - item = pagure.lib.model.PagureGroup( - group_name='rel-eng', - group_type='user', - display_name='Release engineering group', - user_id=1, # pingou - ) - self.session.add(item) - self.session.commit() - - output = self.app.get('/api/0/groups') - self.assertEqual(output.status_code, 200) - data = json.loads(output.data) - self.assertEqual(data['groups'], ['group1', 'rel-eng']) - self.assertEqual(sorted(data.keys()), ['groups', 'total_groups']) - self.assertEqual(data['total_groups'], 2) - - output = self.app.get('/api/0/groups?pattern=re') - self.assertEqual(output.status_code, 200) - data = json.loads(output.data) - self.assertEqual(data['groups'], ['rel-eng']) - self.assertEqual(sorted(data.keys()), ['groups', 'total_groups']) - self.assertEqual(data['total_groups'], 1) - if __name__ == '__main__': SUITE = unittest.TestLoader().loadTestsFromTestCase(PagureFlaskApitests) diff --git a/tests/test_pagure_flask_api_group.py b/tests/test_pagure_flask_api_group.py index 1041372..896e780 100644 --- a/tests/test_pagure_flask_api_group.py +++ b/tests/test_pagure_flask_api_group.py @@ -52,6 +52,41 @@ class PagureFlaskApiGroupTests(tests.Modeltests): self.app = pagure.APP.test_client() + def test_api_groups(self): + """ Test the api_groups function. """ + + # Add a couple of groups so that we can list them + item = pagure.lib.model.PagureGroup( + group_name='group1', + group_type='user', + display_name='User group', + user_id=1, # pingou + ) + self.session.add(item) + + item = pagure.lib.model.PagureGroup( + group_name='rel-eng', + group_type='user', + display_name='Release engineering group', + user_id=1, # pingou + ) + self.session.add(item) + self.session.commit() + + output = self.app.get('/api/0/groups') + self.assertEqual(output.status_code, 200) + data = json.loads(output.data) + self.assertEqual(data['groups'], ['some_group', 'group1', 'rel-eng']) + self.assertEqual(sorted(data.keys()), ['groups', 'total_groups']) + self.assertEqual(data['total_groups'], 3) + + output = self.app.get('/api/0/groups?pattern=re') + self.assertEqual(output.status_code, 200) + data = json.loads(output.data) + self.assertEqual(data['groups'], ['rel-eng']) + self.assertEqual(sorted(data.keys()), ['groups', 'total_groups']) + self.assertEqual(data['total_groups'], 1) + def test_api_view_group(self): """ Test the api_view_group method of the flask api