test_google_images.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. from collections import defaultdict
  2. import mock
  3. from searx.engines import google_images
  4. from searx.testing import SearxTestCase
  5. class TestGoogleImagesEngine(SearxTestCase):
  6. def test_request(self):
  7. query = 'test_query'
  8. dicto = defaultdict(dict)
  9. dicto['pageno'] = 1
  10. params = google_images.request(query, dicto)
  11. self.assertIn('url', params)
  12. self.assertIn(query, params['url'])
  13. self.assertIn('googleapis.com', params['url'])
  14. self.assertIn('safe=on', params['url'])
  15. dicto['safesearch'] = 0
  16. params = google_images.request(query, dicto)
  17. self.assertIn('safe=off', params['url'])
  18. def test_response(self):
  19. self.assertRaises(AttributeError, google_images.response, None)
  20. self.assertRaises(AttributeError, google_images.response, [])
  21. self.assertRaises(AttributeError, google_images.response, '')
  22. self.assertRaises(AttributeError, google_images.response, '[]')
  23. response = mock.Mock(text='{}')
  24. self.assertEqual(google_images.response(response), [])
  25. response = mock.Mock(text='{"data": []}')
  26. self.assertEqual(google_images.response(response), [])
  27. json = """
  28. {
  29. "responseData": {
  30. "results": [
  31. {
  32. "GsearchResultClass": "GimageSearch",
  33. "width": "400",
  34. "height": "400",
  35. "imageId": "ANd9GcQbYb9FJuAbG_hT4i8FeC0O0x-P--EHdzgRIF9ao97nHLl7C2mREn6qTQ",
  36. "tbWidth": "124",
  37. "tbHeight": "124",
  38. "unescapedUrl": "http://unescaped.url.jpg",
  39. "url": "http://image.url.jpg",
  40. "visibleUrl": "insolitebuzz.fr",
  41. "title": "This is the title",
  42. "titleNoFormatting": "Petit test sympa qui rend fou tout le monde ! A faire",
  43. "originalContextUrl": "http://this.is.the.url",
  44. "content": "<b>test</b>",
  45. "contentNoFormatting": "test",
  46. "tbUrl": "http://thumbnail.url"
  47. }
  48. ]
  49. },
  50. "responseDetails": null,
  51. "responseStatus": 200
  52. }
  53. """
  54. response = mock.Mock(text=json)
  55. results = google_images.response(response)
  56. self.assertEqual(type(results), list)
  57. self.assertEqual(len(results), 1)
  58. self.assertEqual(results[0]['title'], 'This is the title')
  59. self.assertEqual(results[0]['url'], 'http://this.is.the.url')
  60. self.assertEqual(results[0]['thumbnail_src'], 'http://thumbnail.url')
  61. self.assertEqual(results[0]['img_src'], 'http://image.url.jpg')
  62. self.assertEqual(results[0]['content'], '<b>test</b>')
  63. json = """
  64. {
  65. "responseData": {
  66. "results": [
  67. {
  68. "GsearchResultClass": "GimageSearch",
  69. "width": "400",
  70. "height": "400",
  71. "imageId": "ANd9GcQbYb9FJuAbG_hT4i8FeC0O0x-P--EHdzgRIF9ao97nHLl7C2mREn6qTQ",
  72. "tbWidth": "124",
  73. "tbHeight": "124",
  74. "unescapedUrl": "http://unescaped.url.jpg",
  75. "visibleUrl": "insolitebuzz.fr",
  76. "title": "This is the title",
  77. "titleNoFormatting": "Petit test sympa qui rend fou tout le monde ! A faire",
  78. "originalContextUrl": "http://this.is.the.url",
  79. "content": "<b>test</b>",
  80. "contentNoFormatting": "test",
  81. "tbUrl": "http://thumbnail.url"
  82. }
  83. ]
  84. },
  85. "responseDetails": null,
  86. "responseStatus": 200
  87. }
  88. """
  89. response = mock.Mock(text=json)
  90. results = google_images.response(response)
  91. self.assertEqual(type(results), list)
  92. self.assertEqual(len(results), 0)
  93. json = """
  94. {
  95. "responseData": {},
  96. "responseDetails": null,
  97. "responseStatus": 200
  98. }
  99. """
  100. response = mock.Mock(text=json)
  101. results = google_images.response(response)
  102. self.assertEqual(type(results), list)
  103. self.assertEqual(len(results), 0)