From 291cfae48fd1d20bfd2355767dcbaf4f14739110 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Sep 07 2017 09:14:24 +0000 Subject: Fix search issues with a unicode character Fixes https://pagure.io/pagure/issue/2551 Signed-off-by: Pierre-Yves Chibon --- diff --git a/pagure/lib/__init__.py b/pagure/lib/__init__.py index 9ade9b1..0014a6d 100644 --- a/pagure/lib/__init__.py +++ b/pagure/lib/__init__.py @@ -2327,7 +2327,7 @@ def search_issues( if search_pattern is not None: query = query.filter( - model.Issue.title.ilike('%' + str(search_pattern) + '%') + model.Issue.title.ilike('%%%s%%' % search_pattern) ) if order == 'asc': diff --git a/tests/test_pagure_flask_ui_issues.py b/tests/test_pagure_flask_ui_issues.py index 90109db..860b3a8 100644 --- a/tests/test_pagure_flask_ui_issues.py +++ b/tests/test_pagure_flask_ui_issues.py @@ -549,6 +549,13 @@ class PagureFlaskIssuestests(tests.Modeltests): self.assertTrue( '

\n 3 Issues' in output.data) + # Unicode search pattern + output = self.app.get( + '/test/issues?status=all&search_pattern=گروه') + self.assertEqual(output.status_code, 200) + self.assertIn('Issues - test - Pagure', output.data) + self.assertIn('0 Issues', output.data) + # Custom key searching output = self.app.get( '/test/issues?status=all&search_pattern=test1:firstissue') @@ -626,6 +633,57 @@ class PagureFlaskIssuestests(tests.Modeltests): @patch('pagure.lib.git.update_git') @patch('pagure.lib.notify.send_email') + def test_search_issues_unicode(self, p_send_email, p_ugt): + """ Test the view_issues endpoint filtering for an unicode char. """ + p_send_email.return_value = True + p_ugt.return_value = True + + tests.create_projects(self.session) + tests.create_projects_git( + os.path.join(self.path, 'repos'), bare=True) + + repo = pagure.get_authorized_project(self.session, 'test') + + # Create 2 issues to play with + msg = pagure.lib.new_issue( + session=self.session, + repo=repo, + title=u'Test issue ☃', + content=u'We should work on this ❤', + user='pingou', + ticketfolder=None + ) + self.session.commit() + self.assertEqual(msg.title, u'Test issue ☃') + + msg = pagure.lib.new_issue( + session=self.session, + repo=repo, + title='Test issue with milestone', + content='Testing search', + user='pingou', + milestone='1.1', + ticketfolder=None + ) + self.session.commit() + self.assertEqual(msg.title, 'Test issue with milestone') + + # Whole list + output = self.app.get('/test/issues') + self.assertEqual(output.status_code, 200) + self.assertIn('Issues - test - Pagure', output.data) + self.assertTrue( + '

\n 2 Open Issues' in output.data) + + # Unicode search pattern + output = self.app.get( + '/test/issues?status=all&search_pattern=☃') + self.assertEqual(output.status_code, 200) + self.assertIn('Issues - test - Pagure', output.data) + self.assertIn('1 Issues', output.data) + + @patch('pagure.lib.git.update_git') + @patch('pagure.lib.notify.send_email') def test_view_issue(self, p_send_email, p_ugt): """ Test the view_issue endpoint. """ p_send_email.return_value = True