From 38ee63a9e47de4b917b2f285f42cdf607b7b2cfa Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Oct 05 2017 07:12:14 +0000 Subject: Fix the edit issue endpoint when the user does not actually edit anything Fixes https://pagure.io/fedora-infrastructure/issue/6389 Signed-off-by: Pierre-Yves Chibon --- diff --git a/pagure/ui/issues.py b/pagure/ui/issues.py index 6259d75..ef1f0e8 100644 --- a/pagure/ui/issues.py +++ b/pagure/ui/issues.py @@ -1190,8 +1190,9 @@ def edit_issue(repo, issueid, username=None, namespace=None): issue.content = issue.content.replace('', url) SESSION.add(issue) SESSION.commit() - for message in messages: - flask.flash(message) + if messages: + for message in messages: + flask.flash(message) url = flask.url_for( 'view_issue', username=username, namespace=namespace, repo=repo.name, issueid=issueid) diff --git a/tests/test_pagure_flask_ui_issues.py b/tests/test_pagure_flask_ui_issues.py index 1a4562b..d88cc79 100644 --- a/tests/test_pagure_flask_ui_issues.py +++ b/tests/test_pagure_flask_ui_issues.py @@ -24,7 +24,7 @@ except ImportError: import tempfile import pygit2 -from mock import patch +from mock import patch, MagicMock sys.path.insert(0, os.path.join(os.path.dirname( os.path.abspath(__file__)), '..')) @@ -2170,6 +2170,59 @@ class PagureFlaskIssuestests(tests.Modeltests): output = self.app.post('/test/issue/1/edit', data=data) self.assertEqual(output.status_code, 404) + @patch('pagure.lib.git.update_git', MagicMock(return_value=True)) + @patch('pagure.lib.notify.send_email', MagicMock(return_value=True)) + def test_edit_issue_no_change(self): + """ Test the edit_issue endpoint. """ + + tests.create_projects(self.session) + tests.create_projects_git( + os.path.join(self.path, 'repos'), bare=True) + + # Create an issue to play with + 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 + ) + self.session.commit() + self.assertEqual(msg.title, 'Test issue') + + user = tests.FakeUser(username = 'pingou') + with tests.user_set(pagure.APP, user): + output = self.app.get('/test/issue/1/edit') + self.assertEqual(output.status_code, 200) + self.assertTrue( + '
\n Edit ' + 'issue #1\n
' in output.data) + + csrf_token = self.get_csrf(output=output) + + # Change nothing in the issue + data = { + 'issue_content': 'We should work on this', + 'status': 'Open', + 'title': 'Test issue', + 'csrf_token': csrf_token + } + + output = self.app.post( + '/test/issue/1/edit', data=data, follow_redirects=True) + self.assertEqual(output.status_code, 200) + self.assertIn( + '#1\n' + ' Test issue', + output.data) + self.assertEqual(output.data.count( + ''), 1) + self.assertEqual(output.data.count('comment_body">'), 1) + self.assertEqual(output.data.count( + '

We should work on this

'), 1) + @patch('pagure.lib.git.update_git') @patch('pagure.lib.notify.send_email') def test_edit_tag(self, p_send_email, p_ugt):