test_wolframalpha_api.py (6976B)
- # -*- 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'])