mirror of
				https://github.com/searxng/searxng
				synced 2024-01-01 19:24:07 +01:00 
			
		
		
		
	
						commit
						147d019bba
					
				
					 5 changed files with 182 additions and 11 deletions
				
			
		
							
								
								
									
										2
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							|  | @ -12,7 +12,7 @@ setup.cfg | |||
| 
 | ||||
| bin/ | ||||
| build/ | ||||
| covearge/ | ||||
| coverage/ | ||||
| develop-eggs/ | ||||
| dist/ | ||||
| eggs/ | ||||
|  |  | |||
|  | @ -1,10 +0,0 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| 
 | ||||
| from searx.testing import SearxTestCase | ||||
| 
 | ||||
| 
 | ||||
| class UnitTestCase(SearxTestCase): | ||||
| 
 | ||||
|     def test_flask(self): | ||||
|         import flask | ||||
|         self.assertIn('Flask', dir(flask)) | ||||
							
								
								
									
										167
									
								
								searx/tests/test_webapp.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										167
									
								
								searx/tests/test_webapp.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,167 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| 
 | ||||
| from mock import patch | ||||
| from searx import webapp | ||||
| from searx.testing import SearxTestCase | ||||
| from urlparse import ParseResult | ||||
| 
 | ||||
| 
 | ||||
| import json | ||||
| 
 | ||||
| 
 | ||||
| class ViewsTestCase(SearxTestCase): | ||||
| 
 | ||||
|     def setUp(self): | ||||
|         webapp.app.config['TESTING'] = True  # to get better error messages | ||||
|         self.app = webapp.app.test_client() | ||||
| 
 | ||||
|         # set some defaults | ||||
|         self.test_results = [ | ||||
|             { | ||||
|                 'content': 'first test content', | ||||
|                 'title': 'First Test', | ||||
|                 'url': 'http://first.test.xyz', | ||||
|                 'engines': ['youtube', 'startpage'], | ||||
|                 'engine': 'startpage', | ||||
|                 'parsed_url': ParseResult(scheme='http', netloc='first.test.xyz', path='/', params='', query='', fragment=''),  # noqa | ||||
|             }, { | ||||
|                 'content': 'second test content', | ||||
|                 'title': 'Second Test', | ||||
|                 'url': 'http://second.test.xyz', | ||||
|                 'engines': ['youtube', 'startpage'], | ||||
|                 'engine': 'youtube', | ||||
|                 'parsed_url': ParseResult(scheme='http', netloc='second.test.xyz', path='/', params='', query='', fragment=''),  # noqa | ||||
|             }, | ||||
|         ] | ||||
| 
 | ||||
|         self.maxDiff = None  # to see full diffs | ||||
| 
 | ||||
|     def test_index_empty(self): | ||||
|         result = self.app.post('/') | ||||
|         self.assertEqual(result.status_code, 200) | ||||
|         self.assertIn('<div class="title"><h1>searx</h1></div>', result.data) | ||||
| 
 | ||||
|     @patch('searx.webapp.search') | ||||
|     def test_index_html(self, search): | ||||
|         search.return_value = ( | ||||
|             self.test_results, | ||||
|             set() | ||||
|         ) | ||||
|         result = self.app.post('/', data={'q': 'test'}) | ||||
|         self.assertIn( | ||||
|             '<h3 class="result_title"><a href="http://first.test.xyz">First <b>Test</b></a></h3>',  # noqa | ||||
|             result.data | ||||
|         ) | ||||
|         self.assertIn( | ||||
|             '<p class="content">first <b>test</b> content<br /></p>', | ||||
|             result.data | ||||
|         ) | ||||
| 
 | ||||
|     @patch('searx.webapp.search') | ||||
|     def test_index_json(self, search): | ||||
|         search.return_value = ( | ||||
|             self.test_results, | ||||
|             set() | ||||
|         ) | ||||
|         result = self.app.post('/', data={'q': 'test', 'format': 'json'}) | ||||
| 
 | ||||
|         result_dict = json.loads(result.data) | ||||
| 
 | ||||
|         self.assertEqual('test', result_dict['query']) | ||||
|         self.assertEqual( | ||||
|             result_dict['results'][0]['content'], 'first test content') | ||||
|         self.assertEqual( | ||||
|             result_dict['results'][0]['url'], 'http://first.test.xyz') | ||||
| 
 | ||||
|     @patch('searx.webapp.search') | ||||
|     def test_index_csv(self, search): | ||||
|         search.return_value = ( | ||||
|             self.test_results, | ||||
|             set() | ||||
|         ) | ||||
|         result = self.app.post('/', data={'q': 'test', 'format': 'csv'}) | ||||
| 
 | ||||
|         self.assertEqual( | ||||
|             'title,url,content,host,engine,score\r\n' | ||||
|             'First Test,http://first.test.xyz,first test content,first.test.xyz,startpage,\r\n' | ||||
|             'Second Test,http://second.test.xyz,second test content,second.test.xyz,youtube,\r\n', | ||||
|             result.data | ||||
|         ) | ||||
| 
 | ||||
|     @patch('searx.webapp.search') | ||||
|     def test_index_rss(self, search): | ||||
|         search.return_value = ( | ||||
|             self.test_results, | ||||
|             set() | ||||
|         ) | ||||
|         result = self.app.post('/', data={'q': 'test', 'format': 'rss'}) | ||||
| 
 | ||||
|         self.assertIn( | ||||
|             '<description>Search results for "test" - searx</description>', | ||||
|             result.data | ||||
|         ) | ||||
| 
 | ||||
|         self.assertIn( | ||||
|             '<opensearch:totalResults>2</opensearch:totalResults>', | ||||
|             result.data | ||||
|         ) | ||||
| 
 | ||||
|         self.assertIn( | ||||
|             '<title>First Test</title>', | ||||
|             result.data | ||||
|         ) | ||||
| 
 | ||||
|         self.assertIn( | ||||
|             '<link>http://first.test.xyz</link>', | ||||
|             result.data | ||||
|         ) | ||||
| 
 | ||||
|         self.assertIn( | ||||
|             '<description>first test content</description>', | ||||
|             result.data | ||||
|         ) | ||||
| 
 | ||||
|     def test_about(self): | ||||
|         result = self.app.get('/about') | ||||
|         self.assertEqual(result.status_code, 200) | ||||
|         self.assertIn('<h1>About <a href="/">searx</a></h1>', result.data) | ||||
| 
 | ||||
|     def test_engines(self): | ||||
|         result = self.app.get('/engines') | ||||
|         self.assertEqual(result.status_code, 200) | ||||
|         self.assertIn('<h2>Currently used search engines</h2>', result.data) | ||||
| 
 | ||||
|     def test_preferences(self): | ||||
|         result = self.app.get('/preferences') | ||||
|         self.assertEqual(result.status_code, 200) | ||||
|         self.assertIn( | ||||
|             '<form method="post" action="/preferences" id="search_form">', | ||||
|             result.data | ||||
|         ) | ||||
|         self.assertIn( | ||||
|             '<legend>Default categories</legend>', | ||||
|             result.data | ||||
|         ) | ||||
|         self.assertIn( | ||||
|             '<legend>Interface language</legend>', | ||||
|             result.data | ||||
|         ) | ||||
| 
 | ||||
|     def test_stats(self): | ||||
|         result = self.app.get('/stats') | ||||
|         self.assertEqual(result.status_code, 200) | ||||
|         self.assertIn('<h2>Engine stats</h2>', result.data) | ||||
| 
 | ||||
|     def test_robots_txt(self): | ||||
|         result = self.app.get('/robots.txt') | ||||
|         self.assertEqual(result.status_code, 200) | ||||
|         self.assertIn('Allow: /', result.data) | ||||
| 
 | ||||
|     def test_opensearch_xml(self): | ||||
|         result = self.app.get('/opensearch.xml') | ||||
|         self.assertEqual(result.status_code, 200) | ||||
|         self.assertIn('<Description>Search searx</Description>', result.data) | ||||
| 
 | ||||
|     def test_favicon(self): | ||||
|         result = self.app.get('/favicon.ico') | ||||
|         self.assertEqual(result.status_code, 200) | ||||
|  | @ -117,6 +117,10 @@ def parse_query(query): | |||
| 
 | ||||
| @app.route('/', methods=['GET', 'POST']) | ||||
| def index(): | ||||
|     """Render index page. | ||||
| 
 | ||||
|     Supported outputs: html, json, csv, rss. | ||||
|     """ | ||||
|     paging = False | ||||
|     lang = 'all' | ||||
| 
 | ||||
|  | @ -231,17 +235,25 @@ def index(): | |||
| 
 | ||||
| @app.route('/about', methods=['GET']) | ||||
| def about(): | ||||
|     """Render about page""" | ||||
|     return render('about.html') | ||||
| 
 | ||||
| 
 | ||||
| @app.route('/engines', methods=['GET']) | ||||
| def list_engines(): | ||||
|     """Render engines page. | ||||
| 
 | ||||
|     List of all supported engines. | ||||
|     """ | ||||
|     global categories | ||||
|     return render('engines.html', categs=categories.items()) | ||||
| 
 | ||||
| 
 | ||||
| @app.route('/preferences', methods=['GET', 'POST']) | ||||
| def preferences(): | ||||
|     """Render preferences page. | ||||
| 
 | ||||
|     Settings that are going to be saved as cookies.""" | ||||
|     lang = None | ||||
| 
 | ||||
|     if request.cookies.get('language')\ | ||||
|  | @ -296,6 +308,7 @@ def preferences(): | |||
| 
 | ||||
| @app.route('/stats', methods=['GET']) | ||||
| def stats(): | ||||
|     """Render engine statistics page.""" | ||||
|     global categories | ||||
|     stats = get_engines_stats() | ||||
|     return render('stats.html', stats=stats) | ||||
|  |  | |||
							
								
								
									
										1
									
								
								setup.py
									
										
									
									
									
								
							
							
						
						
									
										1
									
								
								setup.py
									
										
									
									
									
								
							|  | @ -40,6 +40,7 @@ setup( | |||
|         'test': [ | ||||
|             'coverage', | ||||
|             'flake8', | ||||
|             'mock', | ||||
|             'plone.testing', | ||||
|             'robotframework', | ||||
|             'robotframework-debuglibrary', | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Adam Tauber
						Adam Tauber