diff --git a/searx/webapp.py b/searx/webapp.py index d68ae349..9aa80906 100755 --- a/searx/webapp.py +++ b/searx/webapp.py @@ -547,10 +547,12 @@ def index(): # redirect to search if there's a query in the request if request.form.get('q'): - return redirect(url_for('search'), 308) + query = ('?' + request.query_string.decode()) if request.query_string else '' + return redirect(url_for('search') + query, 308) return render( 'index.html', + selected_categories=get_selected_categories(request.preferences, request.form), ) @@ -566,8 +568,8 @@ def search(): if output_format not in ['html', 'csv', 'json', 'rss']: output_format = 'html' - # check if there is query - if request.form.get('q') is None: + # check if there is query (not None and not an empty string) + if not request.form.get('q'): if output_format == 'html': return render( 'index.html', diff --git a/tests/unit/test_webapp.py b/tests/unit/test_webapp.py index 08a26693..75a968ad 100644 --- a/tests/unit/test_webapp.py +++ b/tests/unit/test_webapp.py @@ -75,9 +75,32 @@ class ViewsTestCase(SearxTestCase): self.assertEqual(result.status_code, 200) self.assertIn(b'

searx

', result.data) - def test_index_html(self): + def test_index_html_post(self): result = self.app.post('/', data={'q': 'test'}) self.assertEqual(result.status_code, 308) + self.assertEqual(result.location, 'http://localhost/search') + + def test_index_html_get(self): + result = self.app.post('/?q=test') + self.assertEqual(result.status_code, 308) + self.assertEqual(result.location, 'http://localhost/search?q=test') + + def test_search_empty_html(self): + result = self.app.post('/search', data={'q': ''}) + self.assertEqual(result.status_code, 200) + self.assertIn(b'

searx

', result.data) + + def test_search_empty_json(self): + result = self.app.post('/search', data={'q': '', 'format': 'json'}) + self.assertEqual(result.status_code, 400) + + def test_search_empty_csv(self): + result = self.app.post('/search', data={'q': '', 'format': 'csv'}) + self.assertEqual(result.status_code, 400) + + def test_search_empty_rss(self): + result = self.app.post('/search', data={'q': '', 'format': 'rss'}) + self.assertEqual(result.status_code, 400) def test_search_html(self): result = self.app.post('/search', data={'q': 'test'})