summaryrefslogtreecommitdiff
path: root/tests/unit/engines/test_youtube_noapi.py
blob: cbf7b9bcd2888ebbaa2d8a4b3682921b15ccdc4b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# -*- coding: utf-8 -*-
from collections import defaultdict
import mock
from searx.engines import youtube_noapi
from searx.testing import SearxTestCase


class TestYoutubeNoAPIEngine(SearxTestCase):

    def test_request(self):
        query = 'test_query'
        dicto = defaultdict(dict)
        dicto['pageno'] = 0
        dicto['time_range'] = ''
        params = youtube_noapi.request(query, dicto)
        self.assertIn('url', params)
        self.assertIn(query, params['url'])
        self.assertIn('youtube.com', params['url'])

    def test_time_range_search(self):
        dicto = defaultdict(dict)
        query = 'test_query'
        dicto['time_range'] = 'year'
        params = youtube_noapi.request(query, dicto)
        self.assertIn('&sp=EgIIBQ%253D%253D', params['url'])

        dicto['time_range'] = 'month'
        params = youtube_noapi.request(query, dicto)
        self.assertIn('&sp=EgIIBA%253D%253D', params['url'])

        dicto['time_range'] = 'week'
        params = youtube_noapi.request(query, dicto)
        self.assertIn('&sp=EgIIAw%253D%253D', params['url'])

        dicto['time_range'] = 'day'
        params = youtube_noapi.request(query, dicto)
        self.assertIn('&sp=EgIIAg%253D%253D', params['url'])

    def test_response(self):
        self.assertRaises(AttributeError, youtube_noapi.response, None)
        self.assertRaises(AttributeError, youtube_noapi.response, [])
        self.assertRaises(AttributeError, youtube_noapi.response, '')
        self.assertRaises(AttributeError, youtube_noapi.response, '[]')

        response = mock.Mock(text='<html></html>')
        self.assertEqual(youtube_noapi.response(response), [])

        html = """
        <div></div>
        <script>
            window["ytInitialData"] = {
                "contents": {
                    "twoColumnSearchResultsRenderer": {
                        "primaryContents": {
                            "sectionListRenderer": {
                                "contents": [
                                    {
                                        "itemSectionRenderer": {
                                            "contents": [
                                                {
                                                    "videoRenderer": {
                                                        "videoId": "DIVZCPfAOeM",
                                                        "title": {
                                                            "simpleText": "Title"
                                                        },
                                                        "descriptionSnippet": {
                                                            "runs": [
                                                                {
                                                                    "text": "Des"
                                                                },
                                                                {
                                                                    "text": "cription"
                                                                }
                                                            ]
                                                        }
                                                    }
                                                },
                                                {
                                                    "videoRenderer": {
                                                        "videoId": "9C_HReR_McQ",
                                                        "title": {
                                                            "simpleText": "Title"
                                                        },
                                                        "descriptionSnippet": {
                                                            "simpleText": "Description"
                                                        }
                                                    }
                                                }
                                            ]
                                        }
                                    }
                                ]
                            }
                        }
                    }
                }
            };
        </script>
        """
        response = mock.Mock(text=html)
        results = youtube_noapi.response(response)
        self.assertEqual(type(results), list)
        self.assertEqual(len(results), 2)
        self.assertEqual(results[0]['title'], 'Title')
        self.assertEqual(results[0]['url'], 'https://www.youtube.com/watch?v=DIVZCPfAOeM')
        self.assertEqual(results[0]['content'], 'Description')
        self.assertEqual(results[0]['thumbnail'], 'https://i.ytimg.com/vi/DIVZCPfAOeM/hqdefault.jpg')
        self.assertTrue('DIVZCPfAOeM' in results[0]['embedded'])
        self.assertEqual(results[1]['title'], 'Title')
        self.assertEqual(results[1]['url'], 'https://www.youtube.com/watch?v=9C_HReR_McQ')
        self.assertEqual(results[1]['content'], 'Description')
        self.assertEqual(results[1]['thumbnail'], 'https://i.ytimg.com/vi/9C_HReR_McQ/hqdefault.jpg')
        self.assertTrue('9C_HReR_McQ' in results[1]['embedded'])

        html = """
        <ol id="item-section-063864" class="item-section">
            <li>
            </li>
        </ol>
        """
        response = mock.Mock(text=html)
        results = youtube_noapi.response(response)
        self.assertEqual(type(results), list)
        self.assertEqual(len(results), 0)