diff --git a/pagure/api/user.py b/pagure/api/user.py index 6416a9b..d3fce1e 100644 --- a/pagure/api/user.py +++ b/pagure/api/user.py @@ -322,12 +322,17 @@ def api_view_user_issues(username): 400, error_code=APIERROR.EDATETIME) params.update({'updated_after': updated_after}) + + # Issues authored by this user params_created = params.copy() - params_assigned = params - params.update({"author": username}) + params_created.update({"author": username}) issues_created = pagure.lib.search_issues(**params_created) + + # Issues assigned to this user + params_assigned = params.copy() params_assigned.update({"assignee": username}) issues_assigned = pagure.lib.search_issues(**params_assigned) + jsonout = flask.jsonify({ 'total_issues_created': len(issues_created), 'total_issues_assigned': len(issues_assigned), diff --git a/tests/test_pagure_flask_api_issue.py b/tests/test_pagure_flask_api_issue.py index 1a71fe1..9142544 100644 --- a/tests/test_pagure_flask_api_issue.py +++ b/tests/test_pagure_flask_api_issue.py @@ -297,6 +297,7 @@ class PagureFlaskApiIssuetests(tests.Modeltests): pagure.SESSION = self.session pagure.api.SESSION = self.session pagure.api.issue.SESSION = self.session + pagure.api.user.SESSION = self.session pagure.lib.SESSION = self.session pagure.APP.config['TICKETS_FOLDER'] = None @@ -3057,6 +3058,144 @@ class PagureFlaskApiIssuetests(tests.Modeltests): for k in sorted(data['stats'].keys())[:-1]: self.assertEqual(data['stats'][k], 0) + def test_api_view_user_issues_pingou(self): + """ Test the api_view_user_issues method of the flask api for pingou. + """ + self.test_api_new_issue() + + # Create private issue + repo = pagure.get_authorized_project(self.session, 'test') + msg = pagure.lib.new_issue( + session=self.session, + repo=repo, + title='Test issue', + content='We should work on this', + user='pingou', + ticketfolder=None, + private=True, + status="Closed" + ) + self.session.commit() + self.assertEqual(msg.title, 'Test issue') + + output = self.app.get('/api/0/user/pingou/issues') + self.assertEqual(output.status_code, 200) + data = json.loads(output.data) + args = { + "milestones": [], + "no_stones": None, + "order": None, + "order_key": None, + "since": None, + "status": None, + "tags": [] + } + + self.assertEqual(data['args'], args) + self.assertEqual(data['issues_assigned'], []) + self.assertEqual(len(data['issues_created']), 8) + self.assertEqual(data['total_issues_assigned'], 0) + self.assertEqual(data['total_issues_created'], 8) + + # Restrict to a certain, fake milestone + output = self.app.get('/api/0/user/pingou/issues?milestones=v1.0') + self.assertEqual(output.status_code, 200) + data = json.loads(output.data) + args = { + "milestones": ['v1.0'], + "no_stones": None, + "order": None, + "order_key": None, + "since": None, + "status": None, + "tags": [] + } + + self.assertEqual(data['args'], args) + self.assertEqual(data['issues_assigned'], []) + self.assertEqual(data['issues_created'], []) + self.assertEqual(data['total_issues_assigned'], 0) + self.assertEqual(data['total_issues_created'], 0) + + # Restrict to a certain status + output = self.app.get('/api/0/user/pingou/issues?status=closed') + self.assertEqual(output.status_code, 200) + data = json.loads(output.data) + args = { + "milestones": [], + "no_stones": None, + "order": None, + "order_key": None, + "since": None, + "status": 'closed', + "tags": [] + } + + self.assertEqual(data['args'], args) + self.assertEqual(data['issues_assigned'], []) + self.assertEqual(len(data['issues_created']), 1) + self.assertEqual(data['total_issues_assigned'], 0) + self.assertEqual(data['total_issues_created'], 1) + + # Restrict to a certain status + output = self.app.get('/api/0/user/pingou/issues?status=all') + self.assertEqual(output.status_code, 200) + data = json.loads(output.data) + args = { + "milestones": [], + "no_stones": None, + "order": None, + "order_key": None, + "since": None, + "status": 'all', + "tags": [] + } + + self.assertEqual(data['args'], args) + self.assertEqual(data['issues_assigned'], []) + self.assertEqual(len(data['issues_created']), 9) + self.assertEqual(data['total_issues_assigned'], 0) + self.assertEqual(data['total_issues_created'], 9) + + def test_api_view_user_issues_foo(self): + """ Test the api_view_user_issues method of the flask api for foo. + """ + self.test_api_new_issue() + + # Create private issue + repo = pagure.get_authorized_project(self.session, 'test') + msg = pagure.lib.new_issue( + session=self.session, + repo=repo, + title='Test issue', + content='We should work on this', + user='pingou', + ticketfolder=None, + private=True, + status="Closed" + ) + self.session.commit() + self.assertEqual(msg.title, 'Test issue') + + output = self.app.get('/api/0/user/foo/issues') + self.assertEqual(output.status_code, 200) + data = json.loads(output.data) + args = { + "milestones": [], + "no_stones": None, + "order": None, + "order_key": None, + "since": None, + "status": None, + "tags": [] + } + + self.assertEqual(data['args'], args) + self.assertEqual(len(data['issues_assigned']), 1) + self.assertEqual(data['issues_created'], []) + self.assertEqual(data['total_issues_assigned'], 1) + self.assertEqual(data['total_issues_created'], 0) + if __name__ == '__main__': unittest.main(verbosity=2)