#2362 Let acting on the status potentially set the close_status and vice versa
Merged 6 years ago by pingou. Opened 6 years ago by pingou.

file modified
+6 -1
@@ -1593,6 +1593,7 @@ 

              issue.closed_at = datetime.datetime.utcnow()

          elif issue.close_status:

              issue.close_status = None

+             close_status = -1

              edit.append('close_status')

          edit.append('status')

          messages.append(
@@ -1604,6 +1605,10 @@ 

          msg = 'Issue close_status updated to: %s' % close_status

          if old_status:

              msg += ' (was: %s)' % old_status

+         if issue.status.lower() == 'open' and close_status:

+             issue.status = 'Closed'

+             issue.closed_at = datetime.datetime.utcnow()

+             edit.append('status')

          messages.append(msg)

      if priority != -1:

          priorities = issue.project.priorities
@@ -1649,7 +1654,7 @@ 

          issue, repo=issue.project, repofolder=ticketfolder)

  

      if 'status' in edit:

-         log_action(session, status.lower(), issue, user_obj)

+         log_action(session, issue.status.lower(), issue, user_obj)

          pagure.lib.notify.notify_status_change_issue(issue, user_obj)

  

      if not issue.private and edit:

file modified
-2
@@ -170,8 +170,6 @@ 

          assignee = form.assignee.data.strip() or None

          new_status = form.status.data.strip() or None

          close_status = form.close_status.data or None

-         if new_status != 'Closed':

-             close_status = None

          if close_status not in repo.close_status:

              close_status = None

  

file modified
+58
@@ -616,6 +616,64 @@ 

  

      @patch('pagure.lib.git.update_git')

      @patch('pagure.lib.notify.send_email')

+     def test_edit_issue_close_status(self, p_send_email, p_ugt):

+         """ Test the edit_issue of pagure.lib. """

+         p_send_email.return_value = True

+         p_ugt.return_value = True

+ 

+         self.test_new_issue()

+ 

+         repo = pagure.lib._get_project(self.session, 'test')

+         issue = pagure.lib.search_issues(self.session, repo, issueid=2)

+         self.assertEqual(issue.status, 'Open')

+         self.assertEqual(issue.close_status, None)

+ 

+         repo = pagure.lib._get_project(self.session, 'test')

+         self.assertEqual(repo.open_tickets, 2)

+         self.assertEqual(repo.open_tickets_public, 2)

+ 

+         # Edit the issue, providing just a close_status should also close

+         # the ticket

+         msg = pagure.lib.edit_issue(

+             session=self.session,

+             issue=issue,

+             user='pingou',

+             close_status='Fixed',

+             ticketfolder=None)

+         self.session.commit()

+         self.assertEqual(msg, ['Issue close_status updated to: Fixed'])

+ 

+         issue = pagure.lib.search_issues(self.session, repo, issueid=2)

+         self.assertEqual(issue.status, 'Closed')

+         self.assertEqual(issue.close_status, 'Fixed')

+ 

+         repo = pagure.lib._get_project(self.session, 'test')

+         self.assertEqual(repo.open_tickets, 1)

+         self.assertEqual(repo.open_tickets_public, 1)

+ 

+         # Edit the issue, editing the status to open, should reset the

+         # close_status

+         msg = pagure.lib.edit_issue(

+             session=self.session,

+             issue=issue,

+             user='pingou',

+             ticketfolder=None,

+             status='Open',

+         )

+         self.session.commit()

+         self.assertEqual(

+             msg, ['Issue status updated to: Open (was: Closed)'])

+ 

+         issue = pagure.lib.search_issues(self.session, repo, issueid=2)

+         self.assertEqual(issue.status, 'Open')

+         self.assertEqual(issue.close_status, None)

+ 

+         repo = pagure.lib._get_project(self.session, 'test')

+         self.assertEqual(repo.open_tickets, 2)

+         self.assertEqual(repo.open_tickets_public, 2)

+ 

+     @patch('pagure.lib.git.update_git')

+     @patch('pagure.lib.notify.send_email')

      def test_edit_issue_priority(self, p_send_email, p_ugt):

          """ Test the edit_issue of pagure.lib when changing the priority.

          """

Let acting on the status potentially set the close_status and vice versa

This way, making a closed ticket 'Open' will reset its close_status and
giving a 'close_status' to an open ticket will close it.

Fixes https://pagure.io/pagure/issue/2358
Fixes https://pagure.io/pagure/issue/2192

Signed-off-by: Pierre-Yves Chibon pingou@pingoured.fr

rebased

6 years ago

Dropped the dependency on #2352

The Jenkins errors seem like problems with Jenkins itself and not this PR. LGTM.

rebased

6 years ago

Pull-Request has been merged by pingou

6 years ago