From d5262a34fec0a41f25694a1d502d9de349a832b8 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Jan 09 2017 11:20:47 +0000 Subject: Fix re-setting the close_status to None or reset it when re-opening a ticket This commit allows to re-set the close_status to nothing (its default value when the ticket is open), it also does so automatically when the status of a ticket is set to 'Open' (ie: the ticket is re-opened). Fixes : https://pagure.io/pagure/issue/1526 --- diff --git a/pagure/lib/__init__.py b/pagure/lib/__init__.py index f0bae8b..abcbb94 100644 --- a/pagure/lib/__init__.py +++ b/pagure/lib/__init__.py @@ -1381,7 +1381,7 @@ def new_tag(session, tag_name, tag_color, project_id): def edit_issue(session, issue, ticketfolder, user, - title=None, content=None, status=None, close_status=None, + title=None, content=None, status=None, close_status=-1, priority=None, milestone=None, private=False): ''' Edit the specified issue. ''' @@ -1405,8 +1405,11 @@ def edit_issue(session, issue, ticketfolder, user, issue.status = status if status.lower() != 'open': issue.closed_at = datetime.datetime.utcnow() + elif issue.close_status: + issue.close_status = None + edit.append('close_status') edit.append('status') - if close_status and close_status != issue.close_status: + if close_status != -1 and close_status != issue.close_status: issue.close_status = close_status edit.append('close_status') if priority: @@ -1424,6 +1427,8 @@ def edit_issue(session, issue, ticketfolder, user, issue.milestone = milestone edit.append('milestone') issue.last_updated = datetime.datetime.utcnow() + # uniquify the list of edited fields + edit = list(set(edit)) pagure.lib.git.update_git( issue, repo=issue.project, repofolder=ticketfolder) @@ -1448,7 +1453,7 @@ def edit_issue(session, issue, ticketfolder, user, msg=dict( issue=issue.to_json(public=True), project=issue.project.to_json(public=True), - fields=edit, + fields=list(set(edit)), agent=user_obj.username, ), redis=REDIS, diff --git a/tests/test_pagure_lib.py b/tests/test_pagure_lib.py index 3ea6706..6aa9fa4 100644 --- a/tests/test_pagure_lib.py +++ b/tests/test_pagure_lib.py @@ -266,8 +266,50 @@ class PagureLibtests(tests.Modeltests): self.session.commit() self.assertEqual(msg, 'Successfully edited issue #2') + repo = pagure.lib.get_project(self.session, 'test') + self.assertEqual(repo.open_tickets, 1) + self.assertEqual(repo.open_tickets_public, 1) + self.assertEqual(repo.issues[1].status, 'Closed') + self.assertEqual(repo.issues[1].close_status, 'Invalid') + + # Edit the status: re-open the ticket + msg = pagure.lib.edit_issue( + session=self.session, + issue=issue, + user='pingou', + status='Open', + ticketfolder=None, + private=True, + ) + self.session.commit() + self.assertEqual(msg, 'Successfully edited issue #2') + + repo = pagure.lib.get_project(self.session, 'test') + for issue in repo.issues: + self.assertEqual(issue.status, 'Open') + self.assertEqual(issue.close_status, None) + # 2 open but one of them is private + self.assertEqual(repo.open_tickets, 2) + self.assertEqual(repo.open_tickets_public, 1) + + # Edit the status: re-close the ticket + msg = pagure.lib.edit_issue( + session=self.session, + issue=issue, + user='pingou', + status='Closed', + close_status='Invalid', + ticketfolder=None, + private=True, + ) + self.session.commit() + self.assertEqual(msg, 'Successfully edited issue #2') + + repo = pagure.lib.get_project(self.session, 'test') self.assertEqual(repo.open_tickets, 1) self.assertEqual(repo.open_tickets_public, 1) + self.assertEqual(repo.issues[1].status, 'Closed') + self.assertEqual(repo.issues[1].close_status, 'Invalid') @patch('pagure.lib.git.update_git') @patch('pagure.lib.notify.send_email')