summaryrefslogtreecommitdiff
path: root/tests/unit/engines/test_wolframalpha_api.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit/engines/test_wolframalpha_api.py')
-rw-r--r--tests/unit/engines/test_wolframalpha_api.py166
1 files changed, 166 insertions, 0 deletions
diff --git a/tests/unit/engines/test_wolframalpha_api.py b/tests/unit/engines/test_wolframalpha_api.py
new file mode 100644
index 0000000..30d3376
--- /dev/null
+++ b/tests/unit/engines/test_wolframalpha_api.py
@@ -0,0 +1,166 @@
+# -*- coding: utf-8 -*-
+from collections import defaultdict
+import mock
+from requests import Request
+from searx.engines import wolframalpha_api
+from searx.testing import SearxTestCase
+
+
+class TestWolframAlphaAPIEngine(SearxTestCase):
+
+ def test_request(self):
+ query = 'test_query'
+ dicto = defaultdict(dict)
+ params = wolframalpha_api.request(query, dicto)
+
+ # TODO: test api_key
+ self.assertIn('url', params)
+ self.assertIn('https://api.wolframalpha.com/v2/query?', params['url'])
+ self.assertIn(query, params['url'])
+ self.assertEqual('https://www.wolframalpha.com/input/?i=test_query', params['headers']['Referer'])
+
+ def test_replace_pua_chars(self):
+ self.assertEqual('i', wolframalpha_api.replace_pua_chars(u'\uf74e'))
+
+ def test_response(self):
+ self.assertRaises(AttributeError, wolframalpha_api.response, None)
+ self.assertRaises(AttributeError, wolframalpha_api.response, [])
+ self.assertRaises(AttributeError, wolframalpha_api.response, '')
+ self.assertRaises(AttributeError, wolframalpha_api.response, '[]')
+
+ referer_url = 'referer_url'
+ request = Request(headers={'Referer': referer_url})
+
+ # test failure
+ xml = '''<?xml version='1.0' encoding='UTF-8'?>
+ <queryresult success='false' error='false' />
+ '''
+ response = mock.Mock(text=xml.encode('utf-8'))
+ self.assertEqual(wolframalpha_api.response(response), [])
+
+ # test basic case
+ xml = b"""<?xml version='1.0' encoding='UTF-8'?>
+ <queryresult success='true'
+ error='false'
+ numpods='3'
+ datatypes='Math'
+ id='queryresult_id'
+ host='http://www4c.wolframalpha.com'
+ related='related_url'
+ version='2.6'>
+ <pod title='Input'
+ scanner='Identity'
+ id='Input'
+ numsubpods='1'>
+ <subpod title=''>
+ <img src='input_img_src.gif'
+ alt='input_img_alt'
+ title='input_img_title' />
+ <plaintext>input_plaintext</plaintext>
+ </subpod>
+ </pod>
+ <pod title='Result'
+ scanner='Simplification'
+ id='Result'
+ numsubpods='1'
+ primary='true'>
+ <subpod title=''>
+ <img src='result_img_src.gif'
+ alt='result_img_alt'
+ title='result_img_title' />
+ <plaintext>result_plaintext</plaintext>
+ </subpod>
+ </pod>
+ <pod title='Manipulatives illustration'
+ scanner='Arithmetic'
+ id='Illustration'
+ numsubpods='1'>
+ <subpod title=''>
+ <img src='illustration_img_src.gif'
+ alt='illustration_img_alt' />
+ <plaintext>illustration_plaintext</plaintext>
+ </subpod>
+ </pod>
+ </queryresult>
+ """
+ response = mock.Mock(text=xml, request=request)
+ results = wolframalpha_api.response(response)
+ self.assertEqual(type(results), list)
+ self.assertEqual(len(results), 2)
+ self.assertEqual('input_plaintext', results[0]['infobox'])
+
+ self.assertEqual(len(results[0]['attributes']), 3)
+ self.assertEqual('Input', results[0]['attributes'][0]['label'])
+ self.assertEqual('input_plaintext', results[0]['attributes'][0]['value'])
+ self.assertEqual('Result', results[0]['attributes'][1]['label'])
+ self.assertEqual('result_plaintext', results[0]['attributes'][1]['value'])
+ self.assertEqual('Manipulatives illustration', results[0]['attributes'][2]['label'])
+ self.assertEqual('illustration_img_src.gif', results[0]['attributes'][2]['image']['src'])
+ self.assertEqual('illustration_img_alt', results[0]['attributes'][2]['image']['alt'])
+
+ self.assertEqual(len(results[0]['urls']), 1)
+
+ self.assertEqual(referer_url, results[0]['urls'][0]['url'])
+ self.assertEqual('Wolfram|Alpha', results[0]['urls'][0]['title'])
+ self.assertEqual(referer_url, results[1]['url'])
+ self.assertEqual('Wolfram|Alpha (input_plaintext)', results[1]['title'])
+ self.assertIn('result_plaintext', results[1]['content'])
+
+ # test calc
+ xml = b"""<?xml version='1.0' encoding='UTF-8'?>
+ <queryresult success='true'
+ error='false'
+ numpods='2'
+ datatypes=''
+ parsetimedout='false'
+ id='queryresult_id'
+ host='http://www5b.wolframalpha.com'
+ related='related_url'
+ version='2.6' >
+ <pod title='Indefinite integral'
+ scanner='Integral'
+ id='IndefiniteIntegral'
+ error='false'
+ numsubpods='1'
+ primary='true'>
+ <subpod title=''>
+ <img src='integral_image.gif'
+ alt='integral_img_alt'
+ title='integral_img_title' />
+ <plaintext>integral_plaintext</plaintext>
+ </subpod>
+ </pod>
+ <pod title='Plot of the integral'
+ scanner='Integral'
+ id='Plot'
+ error='false'
+ numsubpods='1'>
+ <subpod title=''>
+ <img src='plot.gif'
+ alt='plot_alt'
+ title='' />
+ <plaintext></plaintext>
+ </subpod>
+ </pod>
+ </queryresult>
+ """
+ response = mock.Mock(text=xml, request=request)
+ results = wolframalpha_api.response(response)
+ self.assertEqual(type(results), list)
+ self.assertEqual(len(results), 2)
+ self.assertEqual('integral_plaintext', results[0]['infobox'])
+
+ self.assertEqual(len(results[0]['attributes']), 2)
+ self.assertEqual('Indefinite integral', results[0]['attributes'][0]['label'])
+ self.assertEqual('integral_plaintext', results[0]['attributes'][0]['value'])
+ self.assertEqual('Plot of the integral', results[0]['attributes'][1]['label'])
+ self.assertEqual('plot.gif', results[0]['attributes'][1]['image']['src'])
+ self.assertEqual('plot_alt', results[0]['attributes'][1]['image']['alt'])
+
+ self.assertEqual(len(results[0]['urls']), 1)
+
+ self.assertEqual(referer_url, results[0]['urls'][0]['url'])
+ self.assertEqual('Wolfram|Alpha', results[0]['urls'][0]['title'])
+ self.assertEqual(referer_url, results[1]['url'])
+ self.assertEqual('Wolfram|Alpha (integral_plaintext)', results[1]['title'])
+ self.assertIn('integral_plaintext', results[1]['content'])