@@ -27,116 +27,132 @@ class TestFlickrNoapiEngine(SearxTestCase):
27 self.assertRaises(AttributeError, flickr_noapi.response, '')
27 self.assertRaises(AttributeError, flickr_noapi.response, '')
28 self.assertRaises(AttributeError, flickr_noapi.response, '[]')
28 self.assertRaises(AttributeError, flickr_noapi.response, '[]')
30− response = mock.Mock(text='"search-photos-lite-models","photos":{},"totalItems":')
30+ response = mock.Mock(text='"modelExport:{"legend":[],"main":{"search-photos-lite-models":[{"photos":{}}]}}')
31 self.assertEqual(flickr_noapi.response(response), [])
31 self.assertEqual(flickr_noapi.response(response), [])
33− response = mock.Mock(text='search-photos-lite-models","photos":{"data": []},"totalItems":')
34+ mock.Mock(text='"modelExport:{"legend":[],"main":{"search-photos-lite-models":[{"photos":{"_data":[]}}]}}')
34 self.assertEqual(flickr_noapi.response(response), [])
35 self.assertEqual(flickr_noapi.response(response), [])
36 # everthing is ok test
37 # everthing is ok test
37 json = """
38 json = """
38− "search-photos-lite-models","photos":
42+ "search-photos-lite-models",
50+ "search-photos-lite-models": [
40− "_data": [
53+ "_data": [
42− "_flickrModelRegistry": "photo-lite-models",
55+ "_flickrModelRegistry": "photo-lite-models",
43− "title": "This is the title",
56+ "title": "This%20is%20the%20title",
44− "username": "Owner",
57+ "username": "Owner",
45− "pathAlias": "klink692",
58+ "pathAlias": "klink692",
46− "realname": "Owner",
59+ "realname": "Owner",
47− "license": 0,
60+ "license": 0,
48− "ownerNsid": "59729010@N00",
61+ "ownerNsid": "59729010@N00",
49− "canComment": false,
62+ "canComment": false,
50− "commentCount": 14,
63+ "commentCount": 14,
51− "faveCount": 21,
64+ "faveCount": 21,
52− "id": "14001294434",
65+ "id": "14001294434",
53− "sizes": {
66+ "sizes": {
55− "displayUrl": "//farm8.staticflickr.com/7246/14001294434_410f653777_c.jpg",
68+ "displayUrl": "//farm8.staticflickr.com/7246/14001294434_410f653777_c.jpg",
56− "width": 541,
69+ "width": 541,
57− "height": 800,
70+ "height": 800,
58− "url": "//c4.staticflickr.com/8/7246/14001294434_410f653777_c.jpg",
71+ "url": "//c4.staticflickr.com/8/7246/14001294434_410f653777_c.jpg",
59− "key": "c"
72+ "key": "c"
62− "displayUrl": "//farm8.staticflickr.com/7246/14001294434_761d32237a_h.jpg",
75+ "displayUrl": "//farm8.staticflickr.com/7246/14001294434_761d32237a_h.jpg",
63− "width": 1081,
76+ "width": 1081,
64− "height": 1600,
77+ "height": 1600,
65− "url": "//c4.staticflickr.com/8/7246/14001294434_761d32237a_h.jpg",
78+ "url": "//c4.staticflickr.com/8/7246/14001294434_761d32237a_h.jpg",
66− "key": "h"
79+ "key": "h"
69− "displayUrl": "//farm8.staticflickr.com/7246/14001294434_f145a2c11a_k.jpg",
82+ "displayUrl": "//farm8.staticflickr.com/7246/14001294434_f145a2c11a_k.jpg",
70− "width": 1383,
83+ "width": 1383,
71− "height": 2048,
84+ "height": 2048,
72− "url": "//c4.staticflickr.com/8/7246/14001294434_f145a2c11a_k.jpg",
85+ "url": "//c4.staticflickr.com/8/7246/14001294434_f145a2c11a_k.jpg",
73− "key": "k"
86+ "key": "k"
76− "displayUrl": "//farm8.staticflickr.com/7246/14001294434_410f653777_b.jpg",
89+ "displayUrl": "//farm8.staticflickr.com/7246/14001294434_410f653777_b.jpg",
77− "width": 692,
90+ "width": 692,
78− "height": 1024,
91+ "height": 1024,
79− "url": "//c4.staticflickr.com/8/7246/14001294434_410f653777_b.jpg",
92+ "url": "//c4.staticflickr.com/8/7246/14001294434_410f653777_b.jpg",
80− "key": "l"
93+ "key": "l"
83− "displayUrl": "//farm8.staticflickr.com/7246/14001294434_410f653777.jpg",
96+ "displayUrl": "//farm8.staticflickr.com/7246/14001294434_410f653777.jpg",
84− "width": 338,
97+ "width": 338,
85− "height": 500,
98+ "height": 500,
86− "url": "//c4.staticflickr.com/8/7246/14001294434_410f653777.jpg",
99+ "url": "//c4.staticflickr.com/8/7246/14001294434_410f653777.jpg",
87− "key": "m"
100+ "key": "m"
90− "displayUrl": "//farm8.staticflickr.com/7246/14001294434_410f653777_n.jpg",
103+ "displayUrl": "//farm8.staticflickr.com/7246/14001294434_410f653777_n.jpg",
91− "width": 216,
104+ "width": 216,
92− "height": 320,
105+ "height": 320,
93− "url": "//c4.staticflickr.com/8/7246/14001294434_410f653777_n.jpg",
106+ "url": "//c4.staticflickr.com/8/7246/14001294434_410f653777_n.jpg",
94− "key": "n"
107+ "key": "n"
97− "displayUrl": "//farm8.staticflickr.com/7246/14001294434_410f653777_q.jpg",
110+ "displayUrl": "//farm8.staticflickr.com/7246/14001294434_410f653777_q.jpg",
98− "width": 150,
111+ "width": 150,
99− "height": 150,
112+ "height": 150,
100− "url": "//c4.staticflickr.com/8/7246/14001294434_410f653777_q.jpg",
113+ "url": "//c4.staticflickr.com/8/7246/14001294434_410f653777_q.jpg",
101− "key": "q"
114+ "key": "q"
104− "displayUrl": "//farm8.staticflickr.com/7246/14001294434_410f653777_m.jpg",
117+ "displayUrl": "//farm8.staticflickr.com/7246/14001294434_410f653777_m.jpg",
105− "width": 162,
118+ "width": 162,
106− "height": 240,
119+ "height": 240,
107− "url": "//c4.staticflickr.com/8/7246/14001294434_410f653777_m.jpg",
120+ "url": "//c4.staticflickr.com/8/7246/14001294434_410f653777_m.jpg",
108− "key": "s"
121+ "key": "s"
111− "displayUrl": "//farm8.staticflickr.com/7246/14001294434_410f653777_s.jpg",
124+ "displayUrl": "//farm8.staticflickr.com/7246/14001294434_410f653777_s.jpg",
112− "width": 75,
125+ "width": 75,
113− "height": 75,
126+ "height": 75,
114− "url": "//c4.staticflickr.com/8/7246/14001294434_410f653777_s.jpg",
127+ "url": "//c4.staticflickr.com/8/7246/14001294434_410f653777_s.jpg",
115− "key": "sq"
128+ "key": "sq"
118− "displayUrl": "//farm8.staticflickr.com/7246/14001294434_410f653777_t.jpg",
131+ "displayUrl": "//farm8.staticflickr.com/7246/14001294434_410f653777_t.jpg",
119− "width": 68,
132+ "width": 68,
120− "height": 100,
133+ "height": 100,
121− "url": "//c4.staticflickr.com/8/7246/14001294434_410f653777_t.jpg",
134+ "url": "//c4.staticflickr.com/8/7246/14001294434_410f653777_t.jpg",
122− "key": "t"
135+ "key": "t"
125− "displayUrl": "//farm8.staticflickr.com/7246/14001294434_410f653777_z.jpg",
138+ "displayUrl": "//farm8.staticflickr.com/7246/14001294434_410f653777_z.jpg",
126− "width": 433,
139+ "width": 433,
127− "height": 640,
140+ "height": 640,
128− "url": "//c4.staticflickr.com/8/7246/14001294434_410f653777_z.jpg",
141+ "url": "//c4.staticflickr.com/8/7246/14001294434_410f653777_z.jpg",
129− "key": "z"
142+ "key": "z"
134− "fetchedStart": true,
150+ }
135− "fetchedEnd": false,
151+ }
136− "totalItems": "4386039"
139− json = json.replace('\r\n', '').replace('\n', '').replace('\r', '')
153+ # Flickr serves search results in a json block named 'modelExport' buried inside a script tag,
154+ # this json is served as a single line terminating with a comma.
155+ json = ''.join(json.split()) + ',\n'
140 response = mock.Mock(text=json)
156 response = mock.Mock(text=json)
141 results = flickr_noapi.response(response)
157 results = flickr_noapi.response(response)
142 self.assertEqual(type(results), list)
158 self.assertEqual(type(results), list)
@@ -149,37 +165,51 @@ class TestFlickrNoapiEngine(SearxTestCase):
150 # no n size, only the z size
166 # no n size, only the z size
151 json = """
167 json = """
152− "search-photos-lite-models","photos":
171+ "search-photos-lite-models",
179+ "search-photos-lite-models": [
154− "_data": [
182+ "_data": [
156− "_flickrModelRegistry": "photo-lite-models",
184+ "_flickrModelRegistry": "photo-lite-models",
157− "title": "This is the title",
185+ "title": "This%20is%20the%20title",
158− "username": "Owner",
186+ "username": "Owner",
159− "pathAlias": "klink692",
187+ "pathAlias": "klink692",
160− "realname": "Owner",
188+ "realname": "Owner",
161− "license": 0,
189+ "license": 0,
162− "ownerNsid": "59729010@N00",
190+ "ownerNsid": "59729010@N00",
163− "canComment": false,
191+ "canComment": false,
164− "commentCount": 14,
192+ "commentCount": 14,
165− "faveCount": 21,
193+ "faveCount": 21,
166− "id": "14001294434",
194+ "id": "14001294434",
167− "sizes": {
195+ "sizes": {
169− "displayUrl": "//farm8.staticflickr.com/7246/14001294434_410f653777_z.jpg",
197+ "displayUrl": "//farm8.staticflickr.com/7246/14001294434_410f653777_z.jpg",
170− "width": 433,
198+ "width": 433,
171− "height": 640,
199+ "height": 640,
172− "url": "//c4.staticflickr.com/8/7246/14001294434_410f653777_z.jpg",
200+ "url": "//c4.staticflickr.com/8/7246/14001294434_410f653777_z.jpg",
173− "key": "z"
201+ "key": "z"
178− "fetchedStart": true,
209+ }
179− "fetchedEnd": false,
210+ }
180− "totalItems": "4386039"
212+ json = ''.join(json.split()) + ',\n'
183 response = mock.Mock(text=json)
213 response = mock.Mock(text=json)
184 results = flickr_noapi.response(response)
214 results = flickr_noapi.response(response)
185 self.assertEqual(type(results), list)
215 self.assertEqual(type(results), list)
@@ -192,37 +222,51 @@ class TestFlickrNoapiEngine(SearxTestCase):
193 # no z or n size
223 # no z or n size
194 json = """
224 json = """
195− "search-photos-lite-models","photos":
228+ "search-photos-lite-models",
236+ "search-photos-lite-models": [
197− "_data": [
239+ "_data": [
199− "_flickrModelRegistry": "photo-lite-models",
241+ "_flickrModelRegistry": "photo-lite-models",
200− "title": "This is the title",
242+ "title": "This%20is%20the%20title",
201− "username": "Owner",
243+ "username": "Owner",
202− "pathAlias": "klink692",
244+ "pathAlias": "klink692",
203− "realname": "Owner",
245+ "realname": "Owner",
204− "license": 0,
246+ "license": 0,
205− "ownerNsid": "59729010@N00",
247+ "ownerNsid": "59729010@N00",
206− "canComment": false,
248+ "canComment": false,
207− "commentCount": 14,
249+ "commentCount": 14,
208− "faveCount": 21,
250+ "faveCount": 21,
209− "id": "14001294434",
251+ "id": "14001294434",
210− "sizes": {
252+ "sizes": {
212− "displayUrl": "//farm8.staticflickr.com/7246/14001294434_410f653777_o.jpg",
254+ "displayUrl": "//farm8.staticflickr.com/7246/14001294434_410f653777_o.jpg",
213− "width": 433,
255+ "width": 433,
214− "height": 640,
256+ "height": 640,
215− "url": "//c4.staticflickr.com/8/7246/14001294434_410f653777_o.jpg",
257+ "url": "//c4.staticflickr.com/8/7246/14001294434_410f653777_o.jpg",
216− "key": "o"
258+ "key": "o"
221− "fetchedStart": true,
266+ }
222− "fetchedEnd": false,
267+ }
223− "totalItems": "4386039"
269+ json = ''.join(json.split()) + ',\n'
226 response = mock.Mock(text=json)
270 response = mock.Mock(text=json)
227 results = flickr_noapi.response(response)
271 results = flickr_noapi.response(response)
228 self.assertEqual(type(results), list)
272 self.assertEqual(type(results), list)
@@ -235,30 +279,44 @@ class TestFlickrNoapiEngine(SearxTestCase):
236 # no image test
280 # no image test
237 json = """
281 json = """
238− "search-photos-lite-models","photos":
282+ modelExport: {
285+ "search-photos-lite-models",
240− "_data": [
288+ "_data",
242− "_flickrModelRegistry": "photo-lite-models",
290+ ]
243− "title": "This is the title",
244− "username": "Owner",
245− "pathAlias": "klink692",
246− "realname": "Owner",
248− "ownerNsid": "59729010@N00",
249− "canComment": false,
252− "id": "14001294434",
257− "fetchedStart": true,
292+ "main": {
258− "fetchedEnd": false,
293+ "search-photos-lite-models": [
259− "totalItems": "4386039"
294+ {
260− },"totalItems":
295+ "photos": {
298+ "_flickrModelRegistry": "photo-lite-models",
299+ "title": "This is the title",
300+ "username": "Owner",
301+ "pathAlias": "klink692",
302+ "realname": "Owner",
304+ "ownerNsid": "59729010@N00",
305+ "canComment": false,
308+ "id": "14001294434",
319+ json = ''.join(json.split()) + ',\n'
262 response = mock.Mock(text=json)
320 response = mock.Mock(text=json)
263 results = flickr_noapi.response(response)
321 results = flickr_noapi.response(response)
264 self.assertEqual(type(results), list)
322 self.assertEqual(type(results), list)
@@ -266,51 +324,20 @@ class TestFlickrNoapiEngine(SearxTestCase):
267 # null test
325 # null test
268 json = """
326 json = """
269− "search-photos-models","photos":
327+ modelExport: {
271− "_data": [null],
328+ "legend": [null],
272− "fetchedStart": true,
329+ "main": {
273− "fetchedEnd": false,
330+ "search-photos-lite-models": [
274− "totalItems": "4386039"
331+ {
275− },"totalItems":
332+ "photos": {
276− """
333+ "_data": [null]
277− response = mock.Mock(text=json)
278− results = flickr_noapi.response(response)
279− self.assertEqual(type(results), list)
280− self.assertEqual(len(results), 0)
284− "search-photos-lite-models","photos":
288− "_flickrModelRegistry": "photo-lite-models",
289− "title": "This is the title",
290− "username": "Owner",
291− "pathAlias": "klink692",
292− "realname": "Owner",
294− "canComment": false,
297− "id": "14001294434",
300− "displayUrl": "//farm8.staticflickr.com/7246/14001294434_410f653777_o.jpg",
303− "url": "//c4.staticflickr.com/8/7246/14001294434_410f653777_o.jpg",
309− "fetchedStart": true,
337+ }
310− "fetchedEnd": false,
338+ }
311− "totalItems": "4386039"
340+ json = ''.join(json.split()) + ',\n'
314 response = mock.Mock(text=json)
341 response = mock.Mock(text=json)
315 results = flickr_noapi.response(response)
342 results = flickr_noapi.response(response)
316 self.assertEqual(type(results), list)
343 self.assertEqual(type(results), list)
@@ -323,6 +350,7 @@ class TestFlickrNoapiEngine(SearxTestCase):
323 "link":"http:\/\/www.flickr.com\/artist\/1217","type":"artist"}
350 "link":"http:\/\/www.flickr.com\/artist\/1217","type":"artist"}
353+ json = ''.join(json.split()) + ',\n'
326 response = mock.Mock(text=json)
354 response = mock.Mock(text=json)
327 results = flickr_noapi.response(response)
355 results = flickr_noapi.response(response)
328 self.assertEqual(type(results), list)
356 self.assertEqual(type(results), list)