112 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			112 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | from collections import defaultdict | ||
|  | import mock | ||
|  | from searx.engines import youtube_api | ||
|  | from searx.testing import SearxTestCase | ||
|  | 
 | ||
|  | 
 | ||
|  | class TestYoutubeAPIEngine(SearxTestCase): | ||
|  | 
 | ||
|  |     def test_request(self): | ||
|  |         query = 'test_query' | ||
|  |         dicto = defaultdict(dict) | ||
|  |         dicto['pageno'] = 0 | ||
|  |         dicto['language'] = 'fr_FR' | ||
|  |         params = youtube_api.request(query, dicto) | ||
|  |         self.assertTrue('url' in params) | ||
|  |         self.assertTrue(query in params['url']) | ||
|  |         self.assertIn('googleapis.com', params['url']) | ||
|  |         self.assertIn('youtube', params['url']) | ||
|  |         self.assertIn('fr', params['url']) | ||
|  | 
 | ||
|  |         dicto['language'] = 'all' | ||
|  |         params = youtube_api.request(query, dicto) | ||
|  |         self.assertFalse('fr' in params['url']) | ||
|  | 
 | ||
|  |     def test_response(self): | ||
|  |         self.assertRaises(AttributeError, youtube_api.response, None) | ||
|  |         self.assertRaises(AttributeError, youtube_api.response, []) | ||
|  |         self.assertRaises(AttributeError, youtube_api.response, '') | ||
|  |         self.assertRaises(AttributeError, youtube_api.response, '[]') | ||
|  | 
 | ||
|  |         response = mock.Mock(text='{}') | ||
|  |         self.assertEqual(youtube_api.response(response), []) | ||
|  | 
 | ||
|  |         response = mock.Mock(text='{"data": []}') | ||
|  |         self.assertEqual(youtube_api.response(response), []) | ||
|  | 
 | ||
|  |         json = """
 | ||
|  |         { | ||
|  |          "kind": "youtube#searchListResponse", | ||
|  |          "etag": "xmg9xJZuZD438sF4hb-VcBBREXc/YJQDcTBCDcaBvl-sRZJoXdvy1ME", | ||
|  |          "nextPageToken": "CAUQAA", | ||
|  |          "pageInfo": { | ||
|  |           "totalResults": 1000000, | ||
|  |           "resultsPerPage": 20 | ||
|  |          }, | ||
|  |          "items": [ | ||
|  |           { | ||
|  |            "kind": "youtube#searchResult", | ||
|  |            "etag": "xmg9xJZuZD438sF4hb-VcBBREXc/IbLO64BMhbHIgWLwLw7MDYe7Hs4", | ||
|  |            "id": { | ||
|  |             "kind": "youtube#video", | ||
|  |             "videoId": "DIVZCPfAOeM" | ||
|  |            }, | ||
|  |            "snippet": { | ||
|  |             "publishedAt": "2015-05-29T22:41:04.000Z", | ||
|  |             "channelId": "UCNodmx1ERIjKqvcJLtdzH5Q", | ||
|  |             "title": "Title", | ||
|  |             "description": "Description", | ||
|  |             "thumbnails": { | ||
|  |              "default": { | ||
|  |               "url": "https://i.ytimg.com/vi/DIVZCPfAOeM/default.jpg" | ||
|  |              }, | ||
|  |              "medium": { | ||
|  |               "url": "https://i.ytimg.com/vi/DIVZCPfAOeM/mqdefault.jpg" | ||
|  |              }, | ||
|  |              "high": { | ||
|  |               "url": "https://i.ytimg.com/vi/DIVZCPfAOeM/hqdefault.jpg" | ||
|  |              } | ||
|  |             }, | ||
|  |             "channelTitle": "MinecraftUniverse", | ||
|  |             "liveBroadcastContent": "none" | ||
|  |            } | ||
|  |           } | ||
|  |           ] | ||
|  |         } | ||
|  |         """
 | ||
|  |         response = mock.Mock(text=json) | ||
|  |         results = youtube_api.response(response) | ||
|  |         self.assertEqual(type(results), list) | ||
|  |         self.assertEqual(len(results), 1) | ||
|  |         self.assertEqual(results[0]['title'], 'Title') | ||
|  |         self.assertEqual(results[0]['url'], 'https://www.youtube.com/watch?v=DIVZCPfAOeM') | ||
|  |         self.assertEqual(results[0]['content'], 'Description') | ||
|  |         self.assertEqual(results[0]['thumbnail'], 'https://i.ytimg.com/vi/DIVZCPfAOeM/hqdefault.jpg') | ||
|  |         self.assertTrue('DIVZCPfAOeM' in results[0]['embedded']) | ||
|  | 
 | ||
|  |         json = """
 | ||
|  |         { | ||
|  |          "kind": "youtube#searchListResponse", | ||
|  |          "etag": "xmg9xJZuZD438sF4hb-VcBBREXc/YJQDcTBCDcaBvl-sRZJoXdvy1ME", | ||
|  |          "nextPageToken": "CAUQAA", | ||
|  |          "pageInfo": { | ||
|  |           "totalResults": 1000000, | ||
|  |           "resultsPerPage": 20 | ||
|  |          } | ||
|  |         } | ||
|  |         """
 | ||
|  |         response = mock.Mock(text=json) | ||
|  |         results = youtube_api.response(response) | ||
|  |         self.assertEqual(type(results), list) | ||
|  |         self.assertEqual(len(results), 0) | ||
|  | 
 | ||
|  |         json = """
 | ||
|  |         {"toto":{"entry":[] | ||
|  |         } | ||
|  |         } | ||
|  |         """
 | ||
|  |         response = mock.Mock(text=json) | ||
|  |         results = youtube_api.response(response) | ||
|  |         self.assertEqual(type(results), list) | ||
|  |         self.assertEqual(len(results), 0) |