Deviant Art's unit test
This commit is contained in:
		
							parent
							
								
									1d255061c7
								
							
						
					
					
						commit
						d495704551
					
				| @ -14,6 +14,7 @@ from urllib import urlencode | |||||||
| from urlparse import urljoin | from urlparse import urljoin | ||||||
| from lxml import html | from lxml import html | ||||||
| import re | import re | ||||||
|  | from searx.engines.xpath import extract_text | ||||||
| 
 | 
 | ||||||
| # engine dependent config | # engine dependent config | ||||||
| categories = ['images'] | categories = ['images'] | ||||||
| @ -50,9 +51,9 @@ def response(resp): | |||||||
|     for result in dom.xpath('//div[contains(@class, "tt-a tt-fh")]'): |     for result in dom.xpath('//div[contains(@class, "tt-a tt-fh")]'): | ||||||
|         link = result.xpath('.//a[contains(@class, "thumb")]')[0] |         link = result.xpath('.//a[contains(@class, "thumb")]')[0] | ||||||
|         url = urljoin(base_url, link.attrib.get('href')) |         url = urljoin(base_url, link.attrib.get('href')) | ||||||
|         title_links = result.xpath('.//span[@class="details"]//a[contains(@class, "t")]')  # noqa |         title_links = result.xpath('.//span[@class="details"]//a[contains(@class, "t")]') | ||||||
|         title = ''.join(title_links[0].xpath('.//text()')) |         title = extract_text(title_links[0]) | ||||||
|         thumbnail_src = link.xpath('.//img')[0].attrib['src'] |         thumbnail_src = link.xpath('.//img')[0].attrib.get('src') | ||||||
|         img_src = regex.sub('/', thumbnail_src) |         img_src = regex.sub('/', thumbnail_src) | ||||||
| 
 | 
 | ||||||
|         # append result |         # append result | ||||||
|  | |||||||
							
								
								
									
										118
									
								
								searx/tests/engines/test_deviantart.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										118
									
								
								searx/tests/engines/test_deviantart.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,118 @@ | |||||||
|  | from collections import defaultdict | ||||||
|  | import mock | ||||||
|  | from searx.engines import deviantart | ||||||
|  | from searx.testing import SearxTestCase | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class TestDeviantartEngine(SearxTestCase): | ||||||
|  | 
 | ||||||
|  |     def test_request(self): | ||||||
|  |         query = 'test_query' | ||||||
|  |         dicto = defaultdict(dict) | ||||||
|  |         dicto['pageno'] = 0 | ||||||
|  |         params = deviantart.request(query, dicto) | ||||||
|  |         self.assertTrue('url' in params) | ||||||
|  |         self.assertTrue(query in params['url']) | ||||||
|  |         self.assertTrue('deviantart.com' in params['url']) | ||||||
|  | 
 | ||||||
|  |     def test_response(self): | ||||||
|  |         self.assertRaises(AttributeError, deviantart.response, None) | ||||||
|  |         self.assertRaises(AttributeError, deviantart.response, []) | ||||||
|  |         self.assertRaises(AttributeError, deviantart.response, '') | ||||||
|  |         self.assertRaises(AttributeError, deviantart.response, '[]') | ||||||
|  | 
 | ||||||
|  |         response = mock.Mock(text='<html></html>') | ||||||
|  |         self.assertEqual(deviantart.response(response), []) | ||||||
|  | 
 | ||||||
|  |         response = mock.Mock(status_code=302) | ||||||
|  |         self.assertEqual(deviantart.response(response), []) | ||||||
|  | 
 | ||||||
|  |         html = """ | ||||||
|  |         <div class="tt-a tt-fh tt-boxed" collect_rid="1:149167425" | ||||||
|  |             usericon="http://a.deviantart.net/avatars/t/e/test-0.gif" userid="233301" | ||||||
|  |             username="test-0" symbol="~" category="digitalart/animation"> | ||||||
|  |             <span class="tt-w" style="width: auto; max-width: 277px;"> | ||||||
|  |                 <span class="tt-fh-tc" style="width: 202px;"> | ||||||
|  |                     <span class="tt-bb" style="width: 202px;"> | ||||||
|  |                     </span> | ||||||
|  |                     <span class="shadow"> | ||||||
|  |                         <a class="thumb" href="http://url.of.result/2nd.part.of.url" | ||||||
|  |                             title="Behoimi BE Animation Test by test-0, Jan 4, | ||||||
|  |                             2010 in Digital Art > Animation"> <i></i> | ||||||
|  |                             <img width="200" height="200" alt="Test" | ||||||
|  |                                 src="http://url.of.thumbnail" data-src="http://th08.deviantart.net/test.jpg"> | ||||||
|  |                         </a> | ||||||
|  |                     </span> | ||||||
|  |                     <!-- ^TTT --> | ||||||
|  |                 </span> | ||||||
|  |                 <span class="details"> | ||||||
|  |                     <a href="http://test-0.deviantart.com/art/Test" class="t" | ||||||
|  |                         title="Behoimi BE Animation Test by test-0, Jan 4, 2010"> | ||||||
|  |                         <span class="tt-fh-oe">Title of image</span> </a> | ||||||
|  |                     <small> | ||||||
|  |                     <span class="category"> | ||||||
|  |                         <span class="age"> | ||||||
|  |                             5 years ago | ||||||
|  |                         </span> | ||||||
|  |                         in <a title="Behoimi BE Animation Test by test-0, Jan 4, 2010" | ||||||
|  |                             href="http://www.deviantart.com/browse/all/digitalart/animation/">Animation</a> | ||||||
|  |                     </span> | ||||||
|  |                     <div class="commentcount"> | ||||||
|  |                         <a href="http://test-0.deviantart.com/art/Test#comments"> | ||||||
|  |                         <span class="iconcommentsstats"></span>9 Comments</a> | ||||||
|  |                     </div> | ||||||
|  |                     <a class="mlt-link" href="http://www.deviantart.com/morelikethis/149167425"> | ||||||
|  |                     <span class="mlt-icon"></span> <span class="mlt-text">More Like This</span> </a> | ||||||
|  |                 </span> | ||||||
|  |                 </small> <!-- TTT$ --> | ||||||
|  |             </span> | ||||||
|  |         </div> | ||||||
|  |         """ | ||||||
|  |         response = mock.Mock(text=html) | ||||||
|  |         results = deviantart.response(response) | ||||||
|  |         self.assertEqual(type(results), list) | ||||||
|  |         self.assertEqual(len(results), 1) | ||||||
|  |         self.assertEqual(results[0]['title'], 'Title of image') | ||||||
|  |         self.assertEqual(results[0]['url'], 'http://url.of.result/2nd.part.of.url') | ||||||
|  |         self.assertNotIn('content', results[0]) | ||||||
|  |         self.assertEqual(results[0]['thumbnail_src'], 'http://url.of.thumbnail') | ||||||
|  | 
 | ||||||
|  |         html = """ | ||||||
|  |         <span class="tt-fh-tc" style="width: 202px;"> | ||||||
|  |             <span class="tt-bb" style="width: 202px;"> | ||||||
|  |             </span> | ||||||
|  |             <span class="shadow"> | ||||||
|  |                 <a class="thumb" href="http://url.of.result/2nd.part.of.url" | ||||||
|  |                     title="Behoimi BE Animation Test by test-0, Jan 4, | ||||||
|  |                     2010 in Digital Art > Animation"> <i></i> | ||||||
|  |                     <img width="200" height="200" alt="Test" | ||||||
|  |                         src="http://url.of.thumbnail" data-src="http://th08.deviantart.net/test.jpg"> | ||||||
|  |                 </a> | ||||||
|  |             </span> | ||||||
|  |             <!-- ^TTT --> | ||||||
|  |         </span> | ||||||
|  |         <span class="details"> | ||||||
|  |             <a href="http://test-0.deviantart.com/art/Test" class="t" | ||||||
|  |                 title="Behoimi BE Animation Test by test-0, Jan 4, 2010"> | ||||||
|  |                 <span class="tt-fh-oe">Title of image</span> </a> | ||||||
|  |             <small> | ||||||
|  |             <span class="category"> | ||||||
|  |                 <span class="age"> | ||||||
|  |                     5 years ago | ||||||
|  |                 </span> | ||||||
|  |                 in <a title="Behoimi BE Animation Test by test-0, Jan 4, 2010" | ||||||
|  |                     href="http://www.deviantart.com/browse/all/digitalart/animation/">Animation</a> | ||||||
|  |             </span> | ||||||
|  |             <div class="commentcount"> | ||||||
|  |                 <a href="http://test-0.deviantart.com/art/Test#comments"> | ||||||
|  |                 <span class="iconcommentsstats"></span>9 Comments</a> | ||||||
|  |             </div> | ||||||
|  |             <a class="mlt-link" href="http://www.deviantart.com/morelikethis/149167425"> | ||||||
|  |             <span class="mlt-icon"></span> <span class="mlt-text">More Like This</span> </a> | ||||||
|  |         </span> | ||||||
|  |         </small> <!-- TTT$ --> | ||||||
|  |         """ | ||||||
|  |         response = mock.Mock(text=html) | ||||||
|  |         results = deviantart.response(response) | ||||||
|  |         self.assertEqual(type(results), list) | ||||||
|  |         self.assertEqual(len(results), 0) | ||||||
| @ -32,9 +32,53 @@ class TestDiggEngine(SearxTestCase): | |||||||
|         "status": "ok", |         "status": "ok", | ||||||
|         "num": 10, |         "num": 10, | ||||||
|         "next_position": 20, |         "next_position": 20, | ||||||
|         "html": "<article itemscope itemtype=\\"http://schema.org/Article\\" class=\\"story-container digg-story-el hentry entry story-1sRANah col-1\\" data-content-id=\\"1sRANah\\" data-contenturl=\\"http://url.of.link\\" data-position=\\"0\\" data-diggs=\\"24\\" data-tweets=\\"69\\" data-digg-score=\\"1190\\"> <div class=\\"story-image story-image-thumb\\"> <a data-position=\\"0\\" data-content-id=\\"1sRANah\\" class=\\"story-link\\" href=\\"http://www.thedailybeast.com/\\" target=\\"_blank\\"><img class=\\"story-image-img\\" src=\\"http://url.of.image.jpeg\\" width=\\"312\\" height=\\"170\\" alt=\\"\\" /> </a> </div> <div class=\\"story-content\\"><header class=\\"story-header\\"> <div itemprop=\\"alternativeHeadline\\" class=\\"story-kicker\\" >Kicker</div> <h2 itemprop=\\"headline\\" class=\\"story-title entry-title\\"><a class=\\"story-title-link story-link\\" rel=\\"bookmark\\" itemprop=\\"url\\" href=\\"http://www.thedailybeast.com/\\" target=\\"_blank\\">Title of article</h2> <div class=\\"story-meta\\"><div class=\\"story-score \\"> <div class=\\"story-score-diggscore diggscore-1sRANah\\">1190</div> <div class=\\"story-score-details\\"> <div class=\\"arrow\\"></div><ul class=\\"story-score-details-list\\"> <li class=\\"story-score-detail story-score-diggs\\"><span class=\\"label\\">Diggs:</span> <span class=\\"count diggs-1sRANah\\">24</span></li> <li class=\\"story-score-detail story-score-twitter\\"><span class=\\"label\\">Tweets:</span> <span class=\\"count tweets-1sRANah\\">69</span></li> <li class=\\"story-score-detail story-score-facebook\\"><span class=\\"label\\">Facebook Shares:</span> <span class=\\"count fb_shares-1sRANah\\">1097</span></li> </ul> </div> </div> <span class=\\"story-meta-item story-source\\"> <a itemprop=\\"publisher copyrightHolder sourceOrganization provider\\" class=\\"story-meta-item-link story-source-link\\" href=\\"/source/thedailybeast.com\\">The Daily Beast </a> </span> <span class=\\"story-meta-item story-tag first-tag\\"> <a itemprop=\\"keywords\\" rel=\\"tag\\" class=\\"story-meta-item-link story-tag-link\\" href=\\"/tag/news\\">News</a> </span> <abbr class=\\"published story-meta-item story-timestamp\\" title=\\"2014-10-18 14:53:45\\"> <time datetime=\\"2014-10-18 14:53:45\\">18 Oct 2014</time> </abbr> </div> </header> </div> <ul class=\\"story-actions\\"> <li class=\\"story-action story-action-digg btn-story-action-container\\"><a class=\\"target digg-1sRANah\\" href=\\"#\\">Digg</a></li> <li class=\\"story-action story-action-save btn-story-action-container\\"><a class=\\"target save-1sRANah\\" href=\\"#\\">Save</a></li> <li class=\\"story-action story-action-share\\"><a class=\\"target share-facebook\\" href=\\"https://www.facebook.com/\\">Facebook</a></li> <li class=\\"story-action story-action-share\\"><a class=\\"target share-twitter\\" href=\\"https://twitter.com/\\">Twitter</a></li> </ul> </article>" |         "html": "<article itemscope itemtype=\\"http://schema.org/Article\\" | ||||||
|  |         class=\\"story-container digg-story-el hentry entry story-1sRANah col-1\\" | ||||||
|  |         data-content-id=\\"1sRANah\\" data-contenturl=\\"http://url.of.link\\" | ||||||
|  |         data-position=\\"0\\" data-diggs=\\"24\\" data-tweets=\\"69\\" | ||||||
|  |         data-digg-score=\\"1190\\"> <div class=\\"story-image story-image-thumb\\"> | ||||||
|  |         <a data-position=\\"0\\" data-content-id=\\"1sRANah\\" | ||||||
|  |         class=\\"story-link\\" href=\\"http://www.thedailybeast.com/\\" | ||||||
|  |         target=\\"_blank\\"><img class=\\"story-image-img\\" | ||||||
|  |         src=\\"http://url.of.image.jpeg\\" width=\\"312\\" height=\\"170\\" | ||||||
|  |         alt=\\"\\" /> </a> </div> <div class=\\"story-content\\"><header | ||||||
|  |         class=\\"story-header\\"> <div itemprop=\\"alternativeHeadline\\" | ||||||
|  |         class=\\"story-kicker\\" >Kicker</div> <h2 itemprop=\\"headline\\" | ||||||
|  |         class=\\"story-title entry-title\\"><a class=\\"story-title-link story-link\\" | ||||||
|  |         rel=\\"bookmark\\" itemprop=\\"url\\" href=\\"http://www.thedailybeast.com/\\" | ||||||
|  |         target=\\"_blank\\">Title of article</h2> <div class=\\"story-meta\\"> | ||||||
|  |         <div class=\\"story-score \\"> | ||||||
|  |         <div class=\\"story-score-diggscore diggscore-1sRANah\\">1190</div> | ||||||
|  |         <div class=\\"story-score-details\\"> <div class=\\"arrow\\"></div> | ||||||
|  |         <ul class=\\"story-score-details-list\\"> <li | ||||||
|  |         class=\\"story-score-detail story-score-diggs\\"><span | ||||||
|  |         class=\\"label\\">Diggs:</span> <span class=\\"count diggs-1sRANah\\">24</span> | ||||||
|  |         </li> <li class=\\"story-score-detail story-score-twitter\\"><span | ||||||
|  |         class=\\"label\\">Tweets:</span> <span class=\\"count tweets-1sRANah\\">69</span> | ||||||
|  |         </li> <li class=\\"story-score-detail story-score-facebook\\"><span | ||||||
|  |         class=\\"label\\">Facebook Shares:</span> <span | ||||||
|  |         class=\\"count fb_shares-1sRANah\\">1097</span></li> </ul> </div> </div> | ||||||
|  |         <span class=\\"story-meta-item story-source\\"> <a | ||||||
|  |         itemprop=\\"publisher copyrightHolder sourceOrganization provider\\" | ||||||
|  |         class=\\"story-meta-item-link story-source-link\\" | ||||||
|  |         href=\\"/source/thedailybeast.com\\">The Daily Beast </a> </span> | ||||||
|  |         <span class=\\"story-meta-item story-tag first-tag\\"> <a | ||||||
|  |         itemprop=\\"keywords\\" rel=\\"tag\\" | ||||||
|  |         class=\\"story-meta-item-link story-tag-link\\" href=\\"/tag/news\\">News</a> | ||||||
|  |         </span> <abbr class=\\"published story-meta-item story-timestamp\\" | ||||||
|  |         title=\\"2014-10-18 14:53:45\\"> <time datetime=\\"2014-10-18 14:53:45\\">18 Oct 2014</time> | ||||||
|  |         </abbr> </div> </header> </div> <ul class=\\"story-actions\\"> <li | ||||||
|  |         class=\\"story-action story-action-digg btn-story-action-container\\"> | ||||||
|  |         <a class=\\"target digg-1sRANah\\" href=\\"#\\">Digg</a></li> <li | ||||||
|  |         class=\\"story-action story-action-save btn-story-action-container\\"> | ||||||
|  |         <a class=\\"target save-1sRANah\\" href=\\"#\\">Save</a></li> <li | ||||||
|  |         class=\\"story-action story-action-share\\"><a | ||||||
|  |         class=\\"target share-facebook\\" href=\\"https://www.facebook.com/\\">Facebook</a></li> | ||||||
|  |         <li class=\\"story-action story-action-share\\"><a class=\\"target share-twitter\\" | ||||||
|  |         href=\\"https://twitter.com/\\">Twitter</a></li> </ul> </article>" | ||||||
|         } |         } | ||||||
|         """ |         """ | ||||||
|  |         json = json.replace('\r\n', '').replace('\n', '').replace('\r', '') | ||||||
|         response = mock.Mock(text=json) |         response = mock.Mock(text=json) | ||||||
|         results = digg.response(response) |         results = digg.response(response) | ||||||
|         self.assertEqual(type(results), list) |         self.assertEqual(type(results), list) | ||||||
|  | |||||||
| @ -1,6 +1,7 @@ | |||||||
| from searx.tests.engines.test_bing import *  # noqa | from searx.tests.engines.test_bing import *  # noqa | ||||||
| from searx.tests.engines.test_dailymotion import *  # noqa | from searx.tests.engines.test_dailymotion import *  # noqa | ||||||
| from searx.tests.engines.test_deezer import *  # noqa | from searx.tests.engines.test_deezer import *  # noqa | ||||||
|  | from searx.tests.engines.test_deviantart import *  # noqa | ||||||
| from searx.tests.engines.test_digg import *  # noqa | from searx.tests.engines.test_digg import *  # noqa | ||||||
| from searx.tests.engines.test_dummy import *  # noqa | from searx.tests.engines.test_dummy import *  # noqa | ||||||
| from searx.tests.engines.test_flickr import *  # noqa | from searx.tests.engines.test_flickr import *  # noqa | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user