@@ -0,0 +1,130 @@
1+# -*- coding: utf-8 -*-
2+from collections import defaultdict
3+import mock
4+from searx.engines import mediawiki
5+from searx.testing import SearxTestCase
6+
7+
8+class TestMediawikiEngine(SearxTestCase):
9+
10+ def test_request(self):
11+ query = 'test_query'
12+ dicto = defaultdict(dict)
13+ dicto['pageno'] = 1
14+ dicto['language'] = 'fr_FR'
15+ params = mediawiki.request(query, dicto)
16+ self.assertIn('url', params)
17+ self.assertIn(query, params['url'])
18+ self.assertIn('wikipedia.org', params['url'])
19+ self.assertIn('fr', params['url'])
20+
21+ dicto['language'] = 'all'
22+ params = mediawiki.request(query, dicto)
23+ self.assertIn('en', params['url'])
24+
25+ mediawiki.base_url = "http://test.url/"
26+ mediawiki.search_url = mediawiki.base_url +\
27+ 'w/api.php?action=query'\
28+ '&list=search'\
29+ '&{query}'\
30+ '&srprop=timestamp'\
31+ '&format=json'\
32+ '&sroffset={offset}'\
33+ '&srlimit={limit}' # noqa
34+ params = mediawiki.request(query, dicto)
35+ self.assertIn('test.url', params['url'])
36+
37+ def test_response(self):
38+ dicto = defaultdict(dict)
39+ dicto['language'] = 'fr'
40+ mediawiki.base_url = "https://{language}.wikipedia.org/"
41+
42+ self.assertRaises(AttributeError, mediawiki.response, None)
43+ self.assertRaises(AttributeError, mediawiki.response, [])
44+ self.assertRaises(AttributeError, mediawiki.response, '')
45+ self.assertRaises(AttributeError, mediawiki.response, '[]')
46+
47+ response = mock.Mock(text='{}', search_params=dicto)
48+ self.assertEqual(mediawiki.response(response), [])
49+
50+ response = mock.Mock(text='{"data": []}', search_params=dicto)
51+ self.assertEqual(mediawiki.response(response), [])
52+
53+ json = """
54+ {
55+ "query-continue": {
56+ "search": {
57+ "sroffset": 1
58+ }
59+ },
60+ "query": {
61+ "searchinfo": {
62+ "totalhits": 29721
63+ },
64+ "search": [
65+ {
66+ "ns": 0,
67+ "title": "This is the title étude",
68+ "timestamp": "2014-12-19T17:42:52Z"
69+ }
70+ ]
71+ }
72+ }
73+ """
74+ response = mock.Mock(text=json, search_params=dicto)
75+ results = mediawiki.response(response)
76+ self.assertEqual(type(results), list)
77+ self.assertEqual(len(results), 1)
78+ self.assertEqual(results[0]['title'], u'This is the title étude')
79+ self.assertIn('fr.wikipedia.org', results[0]['url'])
80+ self.assertIn('This_is_the_title', results[0]['url'])
81+ self.assertIn('%C3%A9tude', results[0]['url'])
82+ self.assertEqual(results[0]['content'], '')
83+
84+ json = """
85+ {
86+ "query-continue": {
87+ "search": {
88+ "sroffset": 1
89+ }
90+ },
91+ "query": {
92+ "searchinfo": {
93+ "totalhits": 29721
94+ },
95+ "search": [
96+ ]
97+ }
98+ }
99+ """
100+ response = mock.Mock(text=json, search_params=dicto)
101+ results = mediawiki.response(response)
102+ self.assertEqual(type(results), list)
103+ self.assertEqual(len(results), 0)
104+
105+ json = """
106+ {
107+ "query-continue": {
108+ "search": {
109+ "sroffset": 1
110+ }
111+ },
112+ "query": {
113+ }
114+ }
115+ """
116+ response = mock.Mock(text=json, search_params=dicto)
117+ results = mediawiki.response(response)
118+ self.assertEqual(type(results), list)
119+ self.assertEqual(len(results), 0)
120+
121+ json = """
122+ {"toto":[
123+ {"id":200,"name":"Artist Name",
124+ "link":"http:\/\/www.mediawiki.com\/artist\/1217","type":"artist"}
125+ ]}
126+ """
127+ response = mock.Mock(text=json, search_params=dicto)
128+ results = mediawiki.response(response)
129+ self.assertEqual(type(results), list)
130+ self.assertEqual(len(results), 0)