Browse Source

BTDigg's unit test

Cqoicebordel 10 years ago
parent
commit
a3d444ab85
3 changed files with 388 additions and 8 deletions
  1. 3
    8
      searx/engines/btdigg.py
  2. 384
    0
      searx/tests/engines/test_btdigg.py
  3. 1
    0
      searx/tests/test_engines.py

+ 3
- 8
searx/engines/btdigg.py View File

@@ -23,11 +23,6 @@ paging = True
23 23
 url = 'https://btdigg.org'
24 24
 search_url = url + '/search?q={search_term}&p={pageno}'
25 25
 
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
-
31 26
 
32 27
 # do search-request
33 28
 def request(query, params):
@@ -52,8 +47,8 @@ def response(resp):
52 47
     # parse results
53 48
     for result in search_res:
54 49
         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))
57 52
         content = escape(extract_text(result.xpath('.//pre[@class="snippet"]')[0]))
58 53
         content = "<br />".join(content.split("\n"))
59 54
 
@@ -81,7 +76,7 @@ def response(resp):
81 76
                 filesize = int(filesize * 1024 * 1024 * 1024)
82 77
             elif filesize_multiplier == 'MB':
83 78
                 filesize = int(filesize * 1024 * 1024)
84
-            elif filesize_multiplier == 'kb':
79
+            elif filesize_multiplier == 'KB':
85 80
                 filesize = int(filesize * 1024)
86 81
         except:
87 82
             filesize = None

+ 384
- 0
searx/tests/engines/test_btdigg.py View File

@@ -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)

+ 1
- 0
searx/tests/test_engines.py View File

@@ -1,6 +1,7 @@
1 1
 from searx.tests.engines.test_bing import *  # noqa
2 2
 from searx.tests.engines.test_bing_images import *  # noqa
3 3
 from searx.tests.engines.test_bing_news import *  # noqa
4
+from searx.tests.engines.test_btdigg import *  # noqa
4 5
 from searx.tests.engines.test_dailymotion import *  # noqa
5 6
 from searx.tests.engines.test_deezer import *  # noqa
6 7
 from searx.tests.engines.test_deviantart import *  # noqa