Merge pull request #1 from asciimoo/master

-
This commit is contained in:
Apply55gx 2017-10-25 10:44:28 +02:00 committed by GitHub
commit d800e3fcfa
49 changed files with 754 additions and 1473 deletions

View file

@ -0,0 +1,91 @@
# -*- coding: utf-8 -*-
from collections import defaultdict
import mock
from searx.engines import base
from searx.testing import SearxTestCase
class TestBaseEngine(SearxTestCase):
def test_request(self):
query = 'test_query'
dicto = defaultdict(dict)
dicto['pageno'] = 1
params = base.request(query, dicto)
self.assertIn('url', params)
self.assertIn('base-search.net', params['url'])
def test_response(self):
self.assertRaises(AttributeError, base.response, None)
self.assertRaises(AttributeError, base.response, [])
self.assertRaises(AttributeError, base.response, '')
self.assertRaises(AttributeError, base.response, '[]')
response = mock.Mock(text='<response></response>')
self.assertEqual(base.response(response), [])
xml_mock = """<?xml version="1.0"?>
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">1</int>
</lst>
<result name="response" numFound="1" start="0">
<doc>
<date name="dchdate">2000-01-01T01:01:01Z</date>
<str name="dcdocid">1</str>
<str name="dccontinent">cna</str>
<str name="dccountry">us</str>
<str name="dccollection">ftciteseerx</str>
<str name="dcprovider">CiteSeerX</str>
<str name="dctitle">Science and more</str>
<arr name="dccreator">
<str>Someone</str>
</arr>
<arr name="dcperson">
<str>Someone</str>
</arr>
<arr name="dcsubject">
<str>Science and more</str>
</arr>
<str name="dcdescription">Science, and even more.</str>
<arr name="dccontributor">
<str>The neighbour</str>
</arr>
<str name="dcdate">2001</str>
<int name="dcyear">2001</int>
<arr name="dctype">
<str>text</str>
</arr>
<arr name="dctypenorm">
<str>1</str>
</arr>
<arr name="dcformat">
<str>application/pdf</str>
</arr>
<arr name="dccontenttype">
<str>application/pdf</str>
</arr>
<arr name="dcidentifier">
<str>http://example.org/</str>
</arr>
<str name="dclink">http://example.org</str>
<str name="dcsource">http://example.org</str>
<arr name="dclanguage">
<str>en</str>
</arr>
<str name="dcrights">Under the example.org licence</str>
<int name="dcoa">1</int>
<arr name="dclang">
<str>eng</str>
</arr>
</doc>
</result>
</response>"""
response = mock.Mock(text=xml_mock.encode('utf-8'))
results = base.response(response)
self.assertEqual(type(results), list)
self.assertEqual(len(results), 1)
self.assertEqual(results[0]['title'], 'Science and more')
self.assertEqual(results[0]['content'], 'Science, and even more.')

View file

@ -8,10 +8,12 @@ from searx.testing import SearxTestCase
class TestBingImagesEngine(SearxTestCase):
def test_request(self):
bing_images.supported_languages = ['fr-FR', 'en-US']
query = 'test_query'
dicto = defaultdict(dict)
dicto['pageno'] = 1
dicto['language'] = 'fr_FR'
dicto['language'] = 'fr-FR'
dicto['safesearch'] = 1
dicto['time_range'] = ''
params = bing_images.request(query, dicto)
@ -19,12 +21,19 @@ class TestBingImagesEngine(SearxTestCase):
self.assertTrue(query in params['url'])
self.assertTrue('bing.com' in params['url'])
self.assertTrue('SRCHHPGUSR' in params['cookies'])
self.assertTrue('fr' in params['cookies']['SRCHHPGUSR'])
self.assertTrue('DEMOTE' in params['cookies']['SRCHHPGUSR'])
self.assertTrue('_EDGE_S' in params['cookies'])
self.assertTrue('fr-fr' in params['cookies']['_EDGE_S'])
dicto['language'] = 'fr'
params = bing_images.request(query, dicto)
self.assertTrue('_EDGE_S' in params['cookies'])
self.assertTrue('fr-fr' in params['cookies']['_EDGE_S'])
dicto['language'] = 'all'
params = bing_images.request(query, dicto)
self.assertIn('SRCHHPGUSR', params['cookies'])
self.assertIn('en', params['cookies']['SRCHHPGUSR'])
self.assertTrue('_EDGE_S' in params['cookies'])
self.assertTrue('en-us' in params['cookies']['_EDGE_S'])
def test_response(self):
self.assertRaises(AttributeError, bing_images.response, None)
@ -82,3 +91,28 @@ class TestBingImagesEngine(SearxTestCase):
self.assertEqual(results[0]['content'], '')
self.assertEqual(results[0]['thumbnail_src'], 'thumb_url')
self.assertEqual(results[0]['img_src'], 'img_url')
def test_fetch_supported_languages(self):
html = """
<div>
<div id="region-section-content">
<ul class="b_vList">
<li>
<a href="https://bing...&setmkt=de-DE&s...">Germany</a>
<a href="https://bing...&setmkt=nb-NO&s...">Norway</a>
</li>
</ul>
<ul class="b_vList">
<li>
<a href="https://bing...&setmkt=es-AR&s...">Argentina</a>
</li>
</ul>
</div>
</div>
"""
response = mock.Mock(text=html)
languages = list(bing_images._fetch_supported_languages(response))
self.assertEqual(len(languages), 3)
self.assertIn('de-DE', languages)
self.assertIn('no-NO', languages)
self.assertIn('es-AR', languages)

View file

@ -8,6 +8,8 @@ from searx.testing import SearxTestCase
class TestBingVideosEngine(SearxTestCase):
def test_request(self):
bing_videos.supported_languages = ['fr-FR', 'en-US']
query = 'test_query'
dicto = defaultdict(dict)
dicto['pageno'] = 1

View file

@ -1,71 +0,0 @@
from collections import defaultdict
import mock
from searx.engines import blekko_images
from searx.testing import SearxTestCase
class TestBlekkoImagesEngine(SearxTestCase):
def test_request(self):
query = 'test_query'
dicto = defaultdict(dict)
dicto['pageno'] = 0
dicto['safesearch'] = 1
params = blekko_images.request(query, dicto)
self.assertIn('url', params)
self.assertIn(query, params['url'])
self.assertIn('blekko.com', params['url'])
self.assertIn('page', params['url'])
dicto['pageno'] = 1
params = blekko_images.request(query, dicto)
self.assertNotIn('page', params['url'])
def test_response(self):
self.assertRaises(AttributeError, blekko_images.response, None)
self.assertRaises(AttributeError, blekko_images.response, [])
self.assertRaises(AttributeError, blekko_images.response, '')
self.assertRaises(AttributeError, blekko_images.response, '[]')
response = mock.Mock(text='[]')
self.assertEqual(blekko_images.response(response), [])
json = """
[
{
"c": 1,
"page_url": "http://result_url.html",
"title": "Photo title",
"tn_url": "http://ts1.mm.bing.net/th?id=HN.608050619474382748&pid=15.1",
"url": "http://result_image.jpg"
},
{
"c": 2,
"page_url": "http://companyorange.simpsite.nl/OSM",
"title": "OSM",
"tn_url": "http://ts2.mm.bing.net/th?id=HN.608048068264919461&pid=15.1",
"url": "http://simpsite.nl/userdata2/58985/Home/OSM.bmp"
},
{
"c": 3,
"page_url": "http://invincible.webklik.nl/page/osm",
"title": "OSM",
"tn_url": "http://ts1.mm.bing.net/th?id=HN.608024514657649476&pid=15.1",
"url": "http://www.webklik.nl/user_files/2009_09/65324/osm.gif"
},
{
"c": 4,
"page_url": "http://www.offshorenorway.no/event/companyDetail/id/12492",
"title": "Go to OSM Offshore AS homepage",
"tn_url": "http://ts2.mm.bing.net/th?id=HN.608054265899847285&pid=15.1",
"url": "http://www.offshorenorway.no/firmalogo/OSM-logo.png"
}
]
"""
response = mock.Mock(text=json)
results = blekko_images.response(response)
self.assertEqual(type(results), list)
self.assertEqual(len(results), 4)
self.assertEqual(results[0]['title'], 'Photo title')
self.assertEqual(results[0]['url'], 'http://result_url.html')
self.assertEqual(results[0]['img_src'], 'http://result_image.jpg')

View file

@ -40,9 +40,6 @@ class TestFarooEngine(SearxTestCase):
response = mock.Mock(text='{"data": []}')
self.assertEqual(faroo.response(response), [])
response = mock.Mock(text='{"data": []}', status_code=401)
self.assertRaises(Exception, faroo.response, response)
response = mock.Mock(text='{"data": []}', status_code=429)
self.assertRaises(Exception, faroo.response, response)
@ -98,14 +95,14 @@ class TestFarooEngine(SearxTestCase):
response = mock.Mock(text=json)
results = faroo.response(response)
self.assertEqual(type(results), list)
self.assertEqual(len(results), 4)
self.assertEqual(len(results), 3)
self.assertEqual(results[0]['title'], 'This is the title')
self.assertEqual(results[0]['url'], 'http://this.is.the.url/')
self.assertEqual(results[0]['content'], 'This is the content')
self.assertEqual(results[1]['title'], 'This is the title2')
self.assertEqual(results[1]['url'], 'http://this.is.the.url2/')
self.assertEqual(results[1]['content'], 'This is the content2')
self.assertEqual(results[3]['img_src'], 'http://upload.wikimedia.org/optimized.jpg')
self.assertEqual(results[2]['thumbnail'], 'http://upload.wikimedia.org/optimized.jpg')
json = """
{}

File diff suppressed because one or more lines are too long

View file

@ -13,38 +13,92 @@ class TestNyaaEngine(SearxTestCase):
params = nyaa.request(query, dic)
self.assertTrue('url' in params)
self.assertTrue(query in params['url'])
self.assertTrue('nyaa.se' in params['url'])
self.assertTrue('nyaa.si' in params['url'])
def test_response(self):
resp = mock.Mock(text='<html></html>')
self.assertEqual(nyaa.response(resp), [])
html = """
<table class="tlist">
<tbody>
<tr class="trusted tlistrow">
<td class="tlisticon">
<a href="//www.nyaa.se" title="English-translated Anime">
<img src="//files.nyaa.se" alt="English-translated Anime">
</a>
</td>
<td class="tlistname">
<a href="//www.nyaa.se/?page3">
Sample torrent title
</a>
</td>
<td class="tlistdownload">
<a href="//www.nyaa.se/?page_dl" title="Download">
<img src="//files.nyaa.se/www-dl.png" alt="DL">
</a>
</td>
<td class="tlistsize">10 MiB</td>
<td class="tlistsn">1</td>
<td class="tlistln">3</td>
<td class="tlistdn">666</td>
<td class="tlistmn">0</td>
</tr>
</tbody>
<table class="table table-bordered table-hover table-striped torrent-list">
<thead>
<tr>
<th class="hdr-category text-center" style="width:80px;">
<div>Category</div>
</th>
<th class="hdr-name" style="width:auto;">
<div>Name</div>
</th>
<th class="hdr-comments sorting text-center" title="Comments" style="width:50px;">
<a href="/?f=0&amp;c=0_0&amp;q=Death+Parade&amp;s=comments&amp;o=desc"></a>
<i class="fa fa-comments-o"></i>
</th>
<th class="hdr-link text-center" style="width:70px;">
<div>Link</div>
</th>
<th class="hdr-size sorting text-center" style="width:100px;">
<a href="/?f=0&amp;c=0_0&amp;q=Death+Parade&amp;s=size&amp;o=desc"></a>
<div>Size</div>
</th>
<th class="hdr-date sorting_desc text-center" title="In local time" style="width:140px;">
<a href="/?f=0&amp;c=0_0&amp;q=Death+Parade&amp;s=id&amp;o=asc"></a>
<div>Date</div>
</th>
<th class="hdr-seeders sorting text-center" title="Seeders" style="width:50px;">
<a href="/?f=0&amp;c=0_0&amp;q=Death+Parade&amp;s=seeders&amp;o=desc"></a>
<i class="fa fa-arrow-up" aria-hidden="true"></i>
</th>
<th class="hdr-leechers sorting text-center" title="Leechers" style="width:50px;">
<a href="/?f=0&amp;c=0_0&amp;q=Death+Parade&amp;s=leechers&amp;o=desc"></a>
<i class="fa fa-arrow-down" aria-hidden="true"></i>
</th>
<th class="hdr-downloads sorting text-center" title="Completed downloads" style="width:50px;">
<a href="/?f=0&amp;c=0_0&amp;q=Death+Parade&amp;s=downloads&amp;o=desc"></a>
<i class="fa fa-check" aria-hidden="true"></i>
</th>
</tr>
</thead>
<tbody>
<tr class="default">
<td style="padding:0 4px;">
<a href="/?c=1_2" title="Anime - English-translated">
<img src="/static/img/icons/nyaa/1_2.png" alt="Anime - English-translated">
</a>
</td>
<td colspan="2">
<a href="/view/1" title="Sample title 1">Sample title 1</a>
</td>
<td class="text-center" style="white-space: nowrap;">
<a href="/download/1.torrent"><i class="fa fa-fw fa-download"></i></a>
<a href="magnet:?xt=urn:btih:2"><i class="fa fa-fw fa-magnet"></i></a>
</td>
<td class="text-center">723.7 MiB</td>
<td class="text-center" data-timestamp="1503307456" title="1 week 3
days 9 hours 44 minutes 39 seconds ago">2017-08-21 11:24</td>
<td class="text-center" style="color: green;">1</td>
<td class="text-center" style="color: red;">3</td>
<td class="text-center">12</td>
</tr>
<tr class="default">
<td style="padding:0 4px;">
<a href="/?c=1_2" title="Anime - English-translated">
<img src="/static/img/icons/nyaa/1_2.png" alt="Anime - English-translated">
</a>
</td>
<td colspan="2">
<a href="/view/2" title="Sample title 2">Sample title 2</a>
</td>
<td class="text-center" style="white-space: nowrap;">
<a href="magnet:?xt=urn:btih:2"><i class="fa fa-fw fa-magnet"></i></a>
</td>
<td class="text-center">8.2 GiB</td>
<td class="text-center" data-timestamp="1491608400" title="4 months 3
weeks 4 days 19 hours 28 minutes 55 seconds ago">2017-04-08 01:40</td>
<td class="text-center" style="color: green;">10</td>
<td class="text-center" style="color: red;">1</td>
<td class="text-center">206</td>
</tr>
</tbody>
</table>
"""
@ -52,15 +106,19 @@ class TestNyaaEngine(SearxTestCase):
results = nyaa.response(resp)
self.assertEqual(type(results), list)
self.assertEqual(len(results), 1)
self.assertEqual(len(results), 2)
r = results[0]
self.assertTrue(r['url'].find('www.nyaa.se/?page3') >= 0)
self.assertTrue(r['torrentfile'].find('www.nyaa.se/?page_dl') >= 0)
self.assertTrue(r['content'].find('English-translated Anime') >= 0)
self.assertTrue(r['content'].find('Downloaded 666 times.') >= 0)
self.assertTrue(r['url'].find('1') >= 0)
self.assertTrue(r['torrentfile'].find('1.torrent') >= 0)
self.assertTrue(r['content'].find('Anime - English-translated') >= 0)
self.assertTrue(r['content'].find('Downloaded 12 times.') >= 0)
self.assertEqual(r['title'], 'Sample torrent title')
self.assertEqual(r['title'], 'Sample title 1')
self.assertEqual(r['seed'], 1)
self.assertEqual(r['leech'], 3)
self.assertEqual(r['filesize'], 10 * 1024 * 1024)
self.assertEqual(r['filesize'], 723700000)
r = results[1]
self.assertTrue(r['url'].find('2') >= 0)
self.assertTrue(r['magnetlink'].find('magnet:') >= 0)

View file

@ -139,9 +139,9 @@ class TestSwisscowsEngine(SearxTestCase):
<div id="regions-popup">
<div>
<ul>
<li><a data-val="browser"></a></li>
<li><a data-val="de-CH"></a></li>
<li><a data-val="fr-CH"></a></li>
<li><a data-search-language="browser"></a></li>
<li><a data-search-language="de-CH"></a></li>
<li><a data-search-language="fr-CH"></a></li>
</ul>
</div>
</div>

View file

@ -14,7 +14,7 @@ class TestTorrentzEngine(SearxTestCase):
params = torrentz.request(query, dic)
self.assertTrue('url' in params)
self.assertTrue(query in params['url'])
self.assertTrue('torrentz.eu' in params['url'])
self.assertTrue('torrentz2.eu' in params['url'])
def test_response(self):
resp = mock.Mock(text='<html></html>')
@ -30,13 +30,11 @@ class TestTorrentzEngine(SearxTestCase):
books ebooks
</dt>
<dd>
<span class="v">1</span>
<span class="a">
<span title="Sun, 22 Nov 2015 03:01:42">4 months</span>
</span>
<span class="s">30 MB</span>
<span class="u">14</span>
<span class="d">1</span>
<span>1</span>
<span title="1503595924">5 hours</span>
<span>30 MB</span>
<span>14</span>
<span>1</span>
</dd>
</dl>
@ -48,13 +46,11 @@ class TestTorrentzEngine(SearxTestCase):
books ebooks
</dt>
<dd>
<span class="v">1</span>
<span class="a">
<span title="Sun, 2124091j0j190gm42">4 months</span>
</span>
<span class="s">30MB</span>
<span class="u">5,555</span>
<span class="d">1,234,567</span>
<span>1</span>
<span title="1503595924 aaa">5 hours</span>
<span>30MB</span>
<span>5,555</span>
<span>1,234,567</span>
</dd>
</dl>
</div>
@ -68,10 +64,10 @@ class TestTorrentzEngine(SearxTestCase):
# testing against the first result
r = results[0]
self.assertEqual(r['url'], 'https://torrentz.eu/4362e08b1d80e1820fb2550b752f9f3126fe76d6')
self.assertEqual(r['url'], 'https://torrentz2.eu/4362e08b1d80e1820fb2550b752f9f3126fe76d6')
self.assertEqual(r['title'], 'Completely valid info books ebooks')
# 22 Nov 2015 03:01:42
self.assertEqual(r['publishedDate'], datetime(2015, 11, 22, 3, 1, 42))
self.assertEqual(r['publishedDate'], datetime.fromtimestamp(1503595924))
self.assertEqual(r['seed'], 14)
self.assertEqual(r['leech'], 1)
self.assertEqual(r['filesize'], 30 * 1024 * 1024)
@ -79,7 +75,7 @@ class TestTorrentzEngine(SearxTestCase):
# testing against the second result
r = results[1]
self.assertEqual(r['url'], 'https://torrentz.eu/poaskdpokaspod')
self.assertEqual(r['url'], 'https://torrentz2.eu/poaskdpokaspod')
self.assertEqual(r['title'], 'Invalid hash and date and filesize books ebooks')
self.assertEqual(r['seed'], 5555)
self.assertEqual(r['leech'], 1234567)