| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 | # -*- coding: utf-8 -*-from collections import defaultdictimport mockfrom requests import Requestfrom searx.engines import wolframalpha_apifrom searx.testing import SearxTestCaseclass 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(content=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(content=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(content=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'])
 |