on master help sign in
BTDigg's unit test
commita3d444ab85dbb85dc3200c686ec3323dbb7008cb authorCqoicebordel <Cqoicebordel@users.noreply.github.com> dateFri 30 Jan 2015, 19:52 (12 years ago) parent5761d6f
3 files changed+388−8
searx/engines/btdigg.py+3−8 searx/tests/engines/test_btdigg.py+384 searx/tests/test_engines.py+1
searx/engines/btdigg.py+3−8
@@ -23,11 +23,6 @@ paging = True
2323url = 'https://btdigg.org'
2424search_url = url + '/search?q={search_term}&p={pageno}'
2525
26−# specific xpath variables
27−magnet_xpath = './/a[@title="Torrent magnet link"]'
28−torrent_xpath = './/a[@title="Download torrent file"]'
29−content_xpath = './/span[@class="font11px lightgrey block"]'
30−
3126
3227# do search-request
3328def request(query, params):
@@ -52,8 +47,8 @@ def response(resp):
5247 # parse results
5348 for result in search_res:
5449 link = result.xpath('.//td[@class="torrent_name"]//a')[0]
55− href = urljoin(url, link.attrib['href'])
56− title = escape(extract_text(link.xpath('.//text()')))
50+ href = urljoin(url, link.attrib.get('href'))
51+ title = escape(extract_text(link))
5752 content = escape(extract_text(result.xpath('.//pre[@class="snippet"]')[0]))
5853 content = "<br />".join(content.split("\n"))
5954
@@ -81,7 +76,7 @@ def response(resp):
8176 filesize = int(filesize * 1024 * 1024 * 1024)
8277 elif filesize_multiplier == 'MB':
8378 filesize = int(filesize * 1024 * 1024)
84− elif filesize_multiplier == 'kb':
79+ elif filesize_multiplier == 'KB':
8580 filesize = int(filesize * 1024)
8681 except:
8782 filesize = None
searx/tests/engines/test_btdigg.pynew file+384
@@ -0,0 +1,384 @@
1+# -*- coding: utf-8 -*-
2+from collections import defaultdict
3+import mock
4+from searx.engines import btdigg
5+from searx.testing import SearxTestCase
6+
7+
8+class TestBtdiggEngine(SearxTestCase):
9+
10+ def test_request(self):
11+ query = 'test_query'
12+ dicto = defaultdict(dict)
13+ dicto['pageno'] = 0
14+ params = btdigg.request(query, dicto)
15+ self.assertIn('url', params)
16+ self.assertIn(query, params['url'])
17+ self.assertIn('btdigg.org', params['url'])
18+
19+ def test_response(self):
20+ self.assertRaises(AttributeError, btdigg.response, None)
21+ self.assertRaises(AttributeError, btdigg.response, [])
22+ self.assertRaises(AttributeError, btdigg.response, '')
23+ self.assertRaises(AttributeError, btdigg.response, '[]')
24+
25+ response = mock.Mock(text='<html></html>')
26+ self.assertEqual(btdigg.response(response), [])
27+
28+ html = """
29+ <div id="search_res">
30+ <table>
31+ <tr>
32+ <td class="idx">1</td>
33+ <td>
34+ <table class="torrent_name_tbl">
35+ <tr>
36+ <td class="torrent_name">
37+ <a href="/url">Should be the title</a>
38+ </td>
39+ </tr>
40+ </table>
41+ <table class="torrent_name_tbl">
42+ <tr>
43+ <td class="ttth">
44+ <a onclick="fclck(this.href)" href="magnet:?xt=urn:btih:magnet&amp;dn=Test"
45+ title="Télécharger des liens Magnet">[magnet]</a>
46+ </td>
47+ <td class="ttth">
48+ <a href="https://btcloud.io/manager?cmd=add&amp;info_hash=hash"
49+ target="_blank" title="Ajouter à BTCloud">[cloud]</a>
50+ </td>
51+ <td>
52+ <span class="attr_name">Taille:</span>
53+ <span class="attr_val">8 B</span>
54+ </td>
55+ <td>
56+ <span class="attr_name">Fichiers:</span>
57+ <span class="attr_val">710</span>
58+ </td>
59+ <td>
60+ <span class="attr_name">Téléchargements:</span>
61+ <span class="attr_val">5</span>
62+ </td>
63+ <td>
64+ <span class="attr_name">Temps:</span>
65+ <span class="attr_val">417.8&nbsp;jours</span>
66+ </td>
67+ <td>
68+ <span class="attr_name">Dernière&nbsp;mise&nbsp;à&nbsp;jour:</span>
69+ <span class="attr_val">5.3&nbsp;jours</span>
70+ </td>
71+ <td>
72+ <span class="attr_name">Faux:</span>
73+ <span class="attr_val">Aucun</span>
74+ </td>
75+ </tr>
76+ </table>
77+ <pre class="snippet">
78+ Content
79+ </pre>
80+ </td>
81+ </tr>
82+ </table>
83+ </div>
84+ """
85+ response = mock.Mock(text=html)
86+ results = btdigg.response(response)
87+ self.assertEqual(type(results), list)
88+ self.assertEqual(len(results), 1)
89+ self.assertEqual(results[0]['title'], 'Should be the title')
90+ self.assertEqual(results[0]['url'], 'https://btdigg.org/url')
91+ self.assertEqual(results[0]['content'], 'Content')
92+ self.assertEqual(results[0]['seed'], 5)
93+ self.assertEqual(results[0]['leech'], 0)
94+ self.assertEqual(results[0]['filesize'], 8)
95+ self.assertEqual(results[0]['files'], 710)
96+ self.assertEqual(results[0]['magnetlink'], 'magnet:?xt=urn:btih:magnet&dn=Test')
97+
98+ html = """
99+ <div id="search_res">
100+ <table>
101+ </table>
102+ </div>
103+ """
104+ response = mock.Mock(text=html)
105+ results = btdigg.response(response)
106+ self.assertEqual(type(results), list)
107+ self.assertEqual(len(results), 0)
108+
109+ html = """
110+ <div id="search_res">
111+ <table>
112+ <tr>
113+ <td class="idx">1</td>
114+ <td>
115+ <table class="torrent_name_tbl">
116+ <tr>
117+ <td class="torrent_name">
118+ <a href="/url">Should be the title</a>
119+ </td>
120+ </tr>
121+ </table>
122+ <table class="torrent_name_tbl">
123+ <tr>
124+ <td class="ttth">
125+ <a onclick="fclck(this.href)" href="magnet:?xt=urn:btih:magnet&amp;dn=Test"
126+ title="Télécharger des liens Magnet">[magnet]</a>
127+ </td>
128+ <td class="ttth">
129+ <a href="https://btcloud.io/manager?cmd=add&amp;info_hash=hash"
130+ target="_blank" title="Ajouter à BTCloud">[cloud]</a>
131+ </td>
132+ <td>
133+ <span class="attr_name">Taille:</span>
134+ <span class="attr_val">1 KB</span>
135+ </td>
136+ <td>
137+ <span class="attr_name">Fichiers:</span>
138+ <span class="attr_val">710</span>
139+ </td>
140+ <td>
141+ <span class="attr_name">Téléchargements:</span>
142+ <span class="attr_val">5</span>
143+ </td>
144+ <td>
145+ <span class="attr_name">Temps:</span>
146+ <span class="attr_val">417.8&nbsp;jours</span>
147+ </td>
148+ <td>
149+ <span class="attr_name">Dernière&nbsp;mise&nbsp;à&nbsp;jour:</span>
150+ <span class="attr_val">5.3&nbsp;jours</span>
151+ </td>
152+ <td>
153+ <span class="attr_name">Faux:</span>
154+ <span class="attr_val">Aucun</span>
155+ </td>
156+ </tr>
157+ </table>
158+ <pre class="snippet">
159+ Content
160+ </pre>
161+ </td>
162+ </tr>
163+ <tr>
164+ <td class="idx">1</td>
165+ <td>
166+ <table class="torrent_name_tbl">
167+ <tr>
168+ <td class="torrent_name">
169+ <a href="/url">Should be the title</a>
170+ </td>
171+ </tr>
172+ </table>
173+ <table class="torrent_name_tbl">
174+ <tr>
175+ <td class="ttth">
176+ <a onclick="fclck(this.href)" href="magnet:?xt=urn:btih:magnet&amp;dn=Test"
177+ title="Télécharger des liens Magnet">[magnet]</a>
178+ </td>
179+ <td class="ttth">
180+ <a href="https://btcloud.io/manager?cmd=add&amp;info_hash=hash"
181+ target="_blank" title="Ajouter à BTCloud">[cloud]</a>
182+ </td>
183+ <td>
184+ <span class="attr_name">Taille:</span>
185+ <span class="attr_val">1 MB</span>
186+ </td>
187+ <td>
188+ <span class="attr_name">Fichiers:</span>
189+ <span class="attr_val">a</span>
190+ </td>
191+ <td>
192+ <span class="attr_name">Téléchargements:</span>
193+ <span class="attr_val">4</span>
194+ </td>
195+ <td>
196+ <span class="attr_name">Temps:</span>
197+ <span class="attr_val">417.8&nbsp;jours</span>
198+ </td>
199+ <td>
200+ <span class="attr_name">Dernière&nbsp;mise&nbsp;à&nbsp;jour:</span>
201+ <span class="attr_val">5.3&nbsp;jours</span>
202+ </td>
203+ <td>
204+ <span class="attr_name">Faux:</span>
205+ <span class="attr_val">Aucun</span>
206+ </td>
207+ </tr>
208+ </table>
209+ <pre class="snippet">
210+ Content
211+ </pre>
212+ </td>
213+ </tr>
214+ <tr>
215+ <td class="idx">1</td>
216+ <td>
217+ <table class="torrent_name_tbl">
218+ <tr>
219+ <td class="torrent_name">
220+ <a href="/url">Should be the title</a>
221+ </td>
222+ </tr>
223+ </table>
224+ <table class="torrent_name_tbl">
225+ <tr>
226+ <td class="ttth">
227+ <a onclick="fclck(this.href)" href="magnet:?xt=urn:btih:magnet&amp;dn=Test"
228+ title="Télécharger des liens Magnet">[magnet]</a>
229+ </td>
230+ <td class="ttth">
231+ <a href="https://btcloud.io/manager?cmd=add&amp;info_hash=hash"
232+ target="_blank" title="Ajouter à BTCloud">[cloud]</a>
233+ </td>
234+ <td>
235+ <span class="attr_name">Taille:</span>
236+ <span class="attr_val">1 GB</span>
237+ </td>
238+ <td>
239+ <span class="attr_name">Fichiers:</span>
240+ <span class="attr_val">710</span>
241+ </td>
242+ <td>
243+ <span class="attr_name">Téléchargements:</span>
244+ <span class="attr_val">3</span>
245+ </td>
246+ <td>
247+ <span class="attr_name">Temps:</span>
248+ <span class="attr_val">417.8&nbsp;jours</span>
249+ </td>
250+ <td>
251+ <span class="attr_name">Dernière&nbsp;mise&nbsp;à&nbsp;jour:</span>
252+ <span class="attr_val">5.3&nbsp;jours</span>
253+ </td>
254+ <td>
255+ <span class="attr_name">Faux:</span>
256+ <span class="attr_val">Aucun</span>
257+ </td>
258+ </tr>
259+ </table>
260+ <pre class="snippet">
261+ Content
262+ </pre>
263+ </td>
264+ </tr>
265+ <tr>
266+ <td class="idx">1</td>
267+ <td>
268+ <table class="torrent_name_tbl">
269+ <tr>
270+ <td class="torrent_name">
271+ <a href="/url">Should be the title</a>
272+ </td>
273+ </tr>
274+ </table>
275+ <table class="torrent_name_tbl">
276+ <tr>
277+ <td class="ttth">
278+ <a onclick="fclck(this.href)" href="magnet:?xt=urn:btih:magnet&amp;dn=Test"
279+ title="Télécharger des liens Magnet">[magnet]</a>
280+ </td>
281+ <td class="ttth">
282+ <a href="https://btcloud.io/manager?cmd=add&amp;info_hash=hash"
283+ target="_blank" title="Ajouter à BTCloud">[cloud]</a>
284+ </td>
285+ <td>
286+ <span class="attr_name">Taille:</span>
287+ <span class="attr_val">1 TB</span>
288+ </td>
289+ <td>
290+ <span class="attr_name">Fichiers:</span>
291+ <span class="attr_val">710</span>
292+ </td>
293+ <td>
294+ <span class="attr_name">Téléchargements:</span>
295+ <span class="attr_val">2</span>
296+ </td>
297+ <td>
298+ <span class="attr_name">Temps:</span>
299+ <span class="attr_val">417.8&nbsp;jours</span>
300+ </td>
301+ <td>
302+ <span class="attr_name">Dernière&nbsp;mise&nbsp;à&nbsp;jour:</span>
303+ <span class="attr_val">5.3&nbsp;jours</span>
304+ </td>
305+ <td>
306+ <span class="attr_name">Faux:</span>
307+ <span class="attr_val">Aucun</span>
308+ </td>
309+ </tr>
310+ </table>
311+ <pre class="snippet">
312+ Content
313+ </pre>
314+ </td>
315+ </tr>
316+ <tr>
317+ <td class="idx">1</td>
318+ <td>
319+ <table class="torrent_name_tbl">
320+ <tr>
321+ <td class="torrent_name">
322+ <a href="/url">Should be the title</a>
323+ </td>
324+ </tr>
325+ </table>
326+ <table class="torrent_name_tbl">
327+ <tr>
328+ <td class="ttth">
329+ <a onclick="fclck(this.href)" href="magnet:?xt=urn:btih:magnet&amp;dn=Test"
330+ title="Télécharger des liens Magnet">[magnet]</a>
331+ </td>
332+ <td class="ttth">
333+ <a href="https://btcloud.io/manager?cmd=add&amp;info_hash=hash"
334+ target="_blank" title="Ajouter à BTCloud">[cloud]</a>
335+ </td>
336+ <td>
337+ <span class="attr_name">Taille:</span>
338+ <span class="attr_val">a TB</span>
339+ </td>
340+ <td>
341+ <span class="attr_name">Fichiers:</span>
342+ <span class="attr_val">710</span>
343+ </td>
344+ <td>
345+ <span class="attr_name">Téléchargements:</span>
346+ <span class="attr_val">z</span>
347+ </td>
348+ <td>
349+ <span class="attr_name">Temps:</span>
350+ <span class="attr_val">417.8&nbsp;jours</span>
351+ </td>
352+ <td>
353+ <span class="attr_name">Dernière&nbsp;mise&nbsp;à&nbsp;jour:</span>
354+ <span class="attr_val">5.3&nbsp;jours</span>
355+ </td>
356+ <td>
357+ <span class="attr_name">Faux:</span>
358+ <span class="attr_val">Aucun</span>
359+ </td>
360+ </tr>
361+ </table>
362+ <pre class="snippet">
363+ Content
364+ </pre>
365+ </td>
366+ </tr>
367+ </table>
368+ </div>
369+ """
370+ response = mock.Mock(text=html)
371+ results = btdigg.response(response)
372+ self.assertEqual(type(results), list)
373+ self.assertEqual(len(results), 5)
374+ self.assertEqual(results[0]['title'], 'Should be the title')
375+ self.assertEqual(results[0]['url'], 'https://btdigg.org/url')
376+ self.assertEqual(results[0]['content'], 'Content')
377+ self.assertEqual(results[0]['seed'], 5)
378+ self.assertEqual(results[0]['leech'], 0)
379+ self.assertEqual(results[0]['files'], 710)
380+ self.assertEqual(results[0]['magnetlink'], 'magnet:?xt=urn:btih:magnet&dn=Test')
381+ self.assertEqual(results[0]['filesize'], 1024)
382+ self.assertEqual(results[1]['filesize'], 1048576)
383+ self.assertEqual(results[2]['filesize'], 1073741824)
384+ self.assertEqual(results[3]['filesize'], 1099511627776)
searx/tests/test_engines.py+1
@@ -1,6 +1,7 @@
11from searx.tests.engines.test_bing import * # noqa
22from searx.tests.engines.test_bing_images import * # noqa
33from searx.tests.engines.test_bing_news import * # noqa
4+from searx.tests.engines.test_btdigg import * # noqa
45from searx.tests.engines.test_dailymotion import * # noqa
56from searx.tests.engines.test_deezer import * # noqa
67from searx.tests.engines.test_deviantart import * # noqa