Fixed testing with mock, added testing for cookies

This commit is contained in:
danielcliu 2020-01-27 21:47:04 -08:00
parent 42d4f59e01
commit 49ccba7f95
3 changed files with 75 additions and 41 deletions

View File

@ -0,0 +1,9 @@
# HTTP Cookie File downloaded with cookies.txt by Genuinous @genuinous
# This file can be used by wget, curl, aria2c and other standard compliant tools.
# Usage Examples:
# 1) wget -x --load-cookies cookies.txt "https://www.youtube.com/"
# 2) curl --cookie cookies.txt "https://www.youtube.com/"
# 3) aria2c --load-cookies cookies.txt "https://www.youtube.com/"
#
.example.com TRUE / TRUE 3594431874 TEST_FIELD TEST_VALUE
.example.com TRUE / TRUE 31874 BAD_TEST_FIELD BAD_TEST_VALUE

View File

@ -0,0 +1,8 @@
# HTTP Cookie File downloaded with cookies.txt by Genuinous @genuinous
# This file can be used by wget, curl, aria2c and other standard compliant tools.
# Usage Examples:
# 1) wget -x --load-cookies cookies.txt "https://www.youtube.com/"
# 2) curl --cookie cookies.txt "https://www.youtube.com/"
# 3) aria2c --load-cookies cookies.txt "https://www.youtube.com/"
#
.example.com TRUE / TRUE 31874 BAD_TEST_FIELD BAD_TEST_VALUE

View File

@ -1,8 +1,10 @@
from unittest import TestCase from unittest import TestCase
from mock import MagicMock from mock import patch
import os import os
import requests
import httpretty import httpretty
from youtube_transcript_api import ( from youtube_transcript_api import (
@ -151,44 +153,7 @@ class TestYouTubeTranscriptApi(TestCase):
with self.assertRaises(NoTranscriptAvailable): with self.assertRaises(NoTranscriptAvailable):
YouTubeTranscriptApi.get_transcript('MwBPvcYFY2E') YouTubeTranscriptApi.get_transcript('MwBPvcYFY2E')
def test_get_transcripts(self): def test_get_transcript__with_proxy(self):
video_id_1 = 'video_id_1'
video_id_2 = 'video_id_2'
languages = ['de', 'en']
YouTubeTranscriptApi.get_transcript = MagicMock()
YouTubeTranscriptApi.get_transcripts([video_id_1, video_id_2], languages=languages)
YouTubeTranscriptApi.get_transcript.assert_any_call(video_id_1, languages, None, None)
YouTubeTranscriptApi.get_transcript.assert_any_call(video_id_2, languages, None, None)
self.assertEqual(YouTubeTranscriptApi.get_transcript.call_count, 2)
def test_get_transcripts__stop_on_error(self):
YouTubeTranscriptApi.get_transcript = MagicMock(side_effect=Exception('Error'))
with self.assertRaises(Exception):
YouTubeTranscriptApi.get_transcripts(['video_id_1', 'video_id_2'])
def test_get_transcripts__continue_on_error(self):
video_id_1 = 'video_id_1'
video_id_2 = 'video_id_2'
YouTubeTranscriptApi.get_transcript = MagicMock(side_effect=Exception('Error'))
YouTubeTranscriptApi.get_transcripts(['video_id_1', 'video_id_2'], continue_after_error=True)
YouTubeTranscriptApi.get_transcript.assert_any_call(video_id_1, ('en',), None, None)
YouTubeTranscriptApi.get_transcript.assert_any_call(video_id_2, ('en',), None, None)
def test_get_transcripts__check_cookies(self):
cookies='example_cookies.txt'
YouTubeTranscriptApi.get_transcript = MagicMock()
YouTubeTranscriptApi.get_transcripts(['GJLlxj_dtq8'], cookies=cookies)
YouTubeTranscriptApi.get_transcript.assert_any_call('GJLlxj_dtq8', ('en',), None, cookies)
session_cookies = YouTubeTranscriptApi.load_cookies(cookies)
print("here: ", session_cookies.items())
def test_get_transcript__with_proxies(self):
proxies = {'http': '', 'https:': ''} proxies = {'http': '', 'https:': ''}
transcript = YouTubeTranscriptApi.get_transcript( transcript = YouTubeTranscriptApi.get_transcript(
'GJLlxj_dtq8', proxies=proxies 'GJLlxj_dtq8', proxies=proxies
@ -201,6 +166,58 @@ class TestYouTubeTranscriptApi(TestCase):
{'text': 'just something shorter, I made up for testing', 'start': 5.7, 'duration': 3.239} {'text': 'just something shorter, I made up for testing', 'start': 5.7, 'duration': 3.239}
] ]
) )
YouTubeTranscriptApi.get_transcript = MagicMock()
@patch('youtube_transcript_api.YouTubeTranscriptApi.get_transcript')
def test_get_transcripts(self, mock_get_transcript):
video_id_1 = 'video_id_1'
video_id_2 = 'video_id_2'
languages = ['de', 'en']
YouTubeTranscriptApi.get_transcripts([video_id_1, video_id_2], languages=languages)
mock_get_transcript.assert_any_call(video_id_1, languages, None, None)
mock_get_transcript.assert_any_call(video_id_2, languages, None, None)
self.assertEqual(mock_get_transcript.call_count, 2)
@patch('youtube_transcript_api.YouTubeTranscriptApi.get_transcript', side_effect=Exception('Error'))
def test_get_transcripts__stop_on_error(self, mock_get_transcript):
with self.assertRaises(Exception):
YouTubeTranscriptApi.get_transcripts(['video_id_1', 'video_id_2'])
@patch('youtube_transcript_api.YouTubeTranscriptApi.get_transcript', side_effect=Exception('Error'))
def test_get_transcripts__continue_on_error(self, mock_get_transcript):
video_id_1 = 'video_id_1'
video_id_2 = 'video_id_2'
YouTubeTranscriptApi.get_transcripts(['video_id_1', 'video_id_2'], continue_after_error=True)
mock_get_transcript.assert_any_call(video_id_1, ('en',), None, None)
mock_get_transcript.assert_any_call(video_id_2, ('en',), None, None)
@patch('youtube_transcript_api.YouTubeTranscriptApi.get_transcript')
def test_get_transcripts__with_cookies(self, mock_get_transcript):
cookies = '/example_cookies.txt'
YouTubeTranscriptApi.get_transcripts(['GJLlxj_dtq8'], cookies=cookies)
mock_get_transcript.assert_any_call('GJLlxj_dtq8', ('en',), None, cookies)
@patch('youtube_transcript_api.YouTubeTranscriptApi.get_transcript')
def test_get_transcripts__with_proxies(self, mock_get_transcript):
proxies = {'http': '', 'https:': ''}
YouTubeTranscriptApi.get_transcripts(['GJLlxj_dtq8'], proxies=proxies) YouTubeTranscriptApi.get_transcripts(['GJLlxj_dtq8'], proxies=proxies)
YouTubeTranscriptApi.get_transcript.assert_any_call('GJLlxj_dtq8', ('en',), proxies, None) mock_get_transcript.assert_any_call('GJLlxj_dtq8', ('en',), proxies, None)
def test_load_cookies(self):
dirname, filename = os.path.split(os.path.abspath(__file__))
cookies = dirname + '/example_cookies.txt'
session_cookies = YouTubeTranscriptApi.load_cookies(cookies)
self.assertEqual({'TEST_FIELD': 'TEST_VALUE'}, requests.utils.dict_from_cookiejar(session_cookies))
def test_load_cookies__bad_files(self):
bad_cookies = 'nonexistent_cookies.txt'
with self.assertRaises(Exception):
YouTubeTranscriptApi.load_cookies(bad_cookies)
dirname, filename = os.path.split(os.path.abspath(__file__))
expired_cookies = dirname + '/expired_example_cookies.txt'
with self.assertRaises(Exception):
YouTubeTranscriptApi.load_cookies(expired_cookies)