# -*- coding: utf-8 -*-
from collections import defaultdict
import mock
from searx.engines import wolframalpha_api
from searx.testing import SearxTestCase
class TestWolframAlphaAPIEngine(SearxTestCase):
    def test_request(self):
        query = 'test_query'
        api_key = 'XXXXXX-XXXXXXXXXX'
        dicto = defaultdict(dict)
        dicto['api_key'] = api_key
        params = wolframalpha_api.request(query, dicto)
        self.assertIn('url', params)
        self.assertIn(query, params['url'])
        self.assertIn('wolframalpha.com', params['url'])
        self.assertIn('api_key', params)
        self.assertIn(api_key, params['api_key'])
    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, '[]')
        xml = '''
        
        '''
        # test failure
        response = mock.Mock(content=xml)
        self.assertEqual(wolframalpha_api.response(response), [])
        xml = """
        
         
          
           sqrt(-1)
          
         
         
          
           
          
          
           
          
         
         
          
           r1 (radius), θ90° (angle)
          
         
         
          
           
          
         
         
          
             (principal root)
          
          
           -
          
         
         
          
           
          
         
        
        """
        # test private user area char in response
        response = mock.Mock(content=xml)
        results = wolframalpha_api.response(response)
        self.assertEqual(type(results), list)
        self.assertEqual(len(results), 2)
        self.assertIn('i', results[0]['answer'])
        self.assertIn('sqrt(-1) - Wolfram|Alpha', results[1]['title'])
        self.assertEquals('http://www.wolframalpha.com/input/?i=sqrt%28-1%29', results[1]['url'])
        xml = """
            
             
              
               ∫1/xxlog(x)+constant
              
              
               
              
              
               
                
                
                
               
              
             
             
              
               
               
                
                 
                 
                
               
              
              
               
               
                
                 
                 
                
               
              
             
             
              
               
               
              
             
            
        """
        # test integral
        response = mock.Mock(content=xml)
        results = wolframalpha_api.response(response)
        self.assertEqual(type(results), list)
        self.assertEqual(len(results), 2)
        self.assertIn('log(x)+c', results[0]['answer'])
        self.assertIn('∫1/xx - Wolfram|Alpha'.decode('utf-8'), results[1]['title'])
        self.assertEquals('http://www.wolframalpha.com/input/?i=%E2%88%AB1%2Fx%EF%9D%8Cx', results[1]['url'])
        xml = """
        
         
          
           solve x^2+x0
          
         
         
          
           x-1
          
          
           x0
          
          
           
          
         
         
          
           
          
         
         
          
           
          
         
        
        """
        # test ecuation with multiple answers
        response = mock.Mock(content=xml)
        results = wolframalpha_api.response(response)
        self.assertEqual(type(results), list)
        self.assertEqual(len(results), 3)
        self.assertIn('x=-1', results[0]['answer'])
        self.assertIn('x=0', results[1]['answer'])
        self.assertIn('solve x^2+x0 - Wolfram|Alpha'.decode('utf-8'), results[2]['title'])
        self.assertEquals('http://www.wolframalpha.com/input/?i=solve+x%5E2%2Bx%EF%9F%990', results[2]['url'])