# -*- coding: utf-8 -*-
import json
from urlparse import ParseResult
from mock import patch
from searx import webapp
from searx.testing import SearxTestCase
class ViewsTestCase(SearxTestCase):
    def setUp(self):
        webapp.app.config['TESTING'] = True  # to get better error messages
        self.app = webapp.app.test_client()
        # set some defaults
        self.test_results = [
            {
                'content': 'first test content',
                'title': 'First Test',
                'url': 'http://first.test.xyz',
                'engines': ['youtube', 'startpage'],
                'engine': 'startpage',
                'parsed_url': ParseResult(scheme='http', netloc='first.test.xyz', path='/', params='', query='', fragment=''),  # noqa
            }, {
                'content': 'second test content',
                'title': 'Second Test',
                'url': 'http://second.test.xyz',
                'engines': ['youtube', 'startpage'],
                'engine': 'youtube',
                'parsed_url': ParseResult(scheme='http', netloc='second.test.xyz', path='/', params='', query='', fragment=''),  # noqa
            },
        ]
        self.maxDiff = None  # to see full diffs
    def test_index_empty(self):
        result = self.app.post('/')
        self.assertEqual(result.status_code, 200)
        self.assertIn('
searx
', result.data)
    @patch('searx.webapp.do_search')
    def test_index_html(self, search):
        search.return_value = (
            self.test_results,
            set()
        )
        result = self.app.post('/', data={'q': 'test'})
        self.assertIn(
            '',  # noqa
            result.data
        )
        self.assertIn(
            'first test content
',  # noqa
            result.data
        )
    @patch('searx.webapp.do_search')
    def test_index_json(self, search):
        search.return_value = (
            self.test_results,
            set()
        )
        result = self.app.post('/', data={'q': 'test', 'format': 'json'})
        result_dict = json.loads(result.data)
        self.assertEqual('test', result_dict['query'])
        self.assertEqual(
            result_dict['results'][0]['content'], 'first test content')
        self.assertEqual(
            result_dict['results'][0]['url'], 'http://first.test.xyz')
    @patch('searx.webapp.do_search')
    def test_index_csv(self, search):
        search.return_value = (
            self.test_results,
            set()
        )
        result = self.app.post('/', data={'q': 'test', 'format': 'csv'})
        self.assertEqual(
            'title,url,content,host,engine,score\r\n'
            'First Test,http://first.test.xyz,first test content,first.test.xyz,startpage,\r\n'  # noqa
            'Second Test,http://second.test.xyz,second test content,second.test.xyz,youtube,\r\n',  # noqa
            result.data
        )
    @patch('searx.webapp.do_search')
    def test_index_rss(self, search):
        search.return_value = (
            self.test_results,
            set()
        )
        result = self.app.post('/', data={'q': 'test', 'format': 'rss'})
        self.assertIn(
            'Search results for "test" - searx',
            result.data
        )
        self.assertIn(
            '2',
            result.data
        )
        self.assertIn(
            'First Test',
            result.data
        )
        self.assertIn(
            'http://first.test.xyz',
            result.data
        )
        self.assertIn(
            'first test content',
            result.data
        )
    def test_about(self):
        result = self.app.get('/about')
        self.assertEqual(result.status_code, 200)
        self.assertIn('', result.data)
    def test_preferences(self):
        result = self.app.get('/preferences')
        self.assertEqual(result.status_code, 200)
        self.assertIn(
            '