diff --git a/pagure/api/issue.py b/pagure/api/issue.py index 1ef6edf..41ed130 100644 --- a/pagure/api/issue.py +++ b/pagure/api/issue.py @@ -825,7 +825,7 @@ def api_assign_issue(repo, issueid, username=None, namespace=None): form = pagure.forms.AssignIssueForm(csrf_enabled=False) if form.validate_on_submit(): - assignee = form.assignee.data + assignee = form.assignee.data or None try: # New comment message = pagure.lib.add_issue_assignee( diff --git a/tests/test_pagure_flask_api_issue.py b/tests/test_pagure_flask_api_issue.py index dec2bb1..da78b94 100644 --- a/tests/test_pagure_flask_api_issue.py +++ b/tests/test_pagure_flask_api_issue.py @@ -1443,34 +1443,76 @@ class PagureFlaskApiIssuetests(tests.Modeltests): issue = pagure.lib.search_issues(self.session, repo, issueid=1) self.assertEqual(len(issue.comments), 0) + # No change + repo = pagure.lib.get_project(self.session, 'test') + issue = pagure.lib.search_issues(self.session, repo, issueid=1) + self.assertEqual(issue.status, 'Open') + data = { - 'title': 'test issue', + 'assignee': 'pingou', } - # Incomplete request + # Valid request output = self.app.post( '/api/0/test/issue/1/assign', data=data, headers=headers) - self.assertEqual(output.status_code, 400) + self.assertEqual(output.status_code, 200) data = json.loads(output.data) self.assertDictEqual( data, - { - "error": "Invalid or incomplete input submited", - "error_code": "EINVALIDREQ", - "errors": {"assignee": ["This field is required."]} - } + {'message': 'Issue assigned'} ) - # No change + # Un-assign + output = self.app.post( + '/api/0/test/issue/1/assign', data=data, headers=headers) + self.assertEqual(output.status_code, 200) + data = json.loads(output.data) + self.assertDictEqual( + data, + {'message': 'Assignee reset'} + ) repo = pagure.lib.get_project(self.session, 'test') issue = pagure.lib.search_issues(self.session, repo, issueid=1) - self.assertEqual(issue.status, 'Open') + self.assertEqual(issue.assignee, None) - data = { - 'assignee': 'pingou', - } + # Un-assign + data = {'assignee': None} + output = self.app.post( + '/api/0/test/issue/1/assign', data=data, headers=headers) + self.assertEqual(output.status_code, 200) + data = json.loads(output.data) + self.assertDictEqual( + data, + {'message': 'Nothing to change'} + ) + repo = pagure.lib.get_project(self.session, 'test') + issue = pagure.lib.search_issues(self.session, repo, issueid=1) + self.assertEqual(issue.assignee, None) - # Valid request + # Re-assign for the rest of the tests + data = {'assignee': 'pingou'} + output = self.app.post( + '/api/0/test/issue/1/assign', data=data, headers=headers) + self.assertEqual(output.status_code, 200) + data = json.loads(output.data) + self.assertDictEqual( + data, + {'message': 'Issue assigned'} + ) + + # Un-assign + data = {'assignee': ''} + output = self.app.post( + '/api/0/test/issue/1/assign', data=data, headers=headers) + self.assertEqual(output.status_code, 200) + data = json.loads(output.data) + self.assertDictEqual( + data, + {'message': 'Assignee reset'} + ) + + # Re-assign for the rest of the tests + data = {'assignee': 'pingou'} output = self.app.post( '/api/0/test/issue/1/assign', data=data, headers=headers) self.assertEqual(output.status_code, 200)