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