69 lines
3.0 KiB
Python
69 lines
3.0 KiB
Python
from unittest import TestCase
|
|
from unittest.mock import MagicMock
|
|
|
|
import json
|
|
|
|
from youtube_transcript_api._cli import YouTubeTranscriptCli, YouTubeTranscriptApi
|
|
|
|
|
|
class TestYouTubeTranscriptCli(TestCase):
|
|
def test_argument_parsing(self):
|
|
parsed_args = YouTubeTranscriptCli('v1 v2 --json --languages de en'.split())._parse_args()
|
|
self.assertEqual(parsed_args.video_ids, ['v1', 'v2'])
|
|
self.assertEqual(parsed_args.json, True)
|
|
self.assertEqual(parsed_args.languages, ['de', 'en'])
|
|
|
|
parsed_args = YouTubeTranscriptCli('v1 v2 --languages de en --json'.split())._parse_args()
|
|
self.assertEqual(parsed_args.video_ids, ['v1', 'v2'])
|
|
self.assertEqual(parsed_args.json, True)
|
|
self.assertEqual(parsed_args.languages, ['de', 'en'])
|
|
|
|
parsed_args = YouTubeTranscriptCli(' --json v1 v2 --languages de en'.split())._parse_args()
|
|
self.assertEqual(parsed_args.video_ids, ['v1', 'v2'])
|
|
self.assertEqual(parsed_args.json, True)
|
|
self.assertEqual(parsed_args.languages, ['de', 'en'])
|
|
|
|
def test_argument_parsing__only_video_ids(self):
|
|
parsed_args = YouTubeTranscriptCli('v1 v2'.split())._parse_args()
|
|
self.assertEqual(parsed_args.video_ids, ['v1', 'v2'])
|
|
self.assertEqual(parsed_args.json, False)
|
|
self.assertEqual(parsed_args.languages, [])
|
|
|
|
def test_argument_parsing__fail_without_video_ids(self):
|
|
with self.assertRaises(SystemExit):
|
|
YouTubeTranscriptCli('--json'.split())._parse_args()
|
|
|
|
def test_argument_parsing__json(self):
|
|
parsed_args = YouTubeTranscriptCli('v1 v2 --json'.split())._parse_args()
|
|
self.assertEqual(parsed_args.video_ids, ['v1', 'v2'])
|
|
self.assertEqual(parsed_args.json, True)
|
|
self.assertEqual(parsed_args.languages, [])
|
|
|
|
parsed_args = YouTubeTranscriptCli('--json v1 v2'.split())._parse_args()
|
|
self.assertEqual(parsed_args.video_ids, ['v1', 'v2'])
|
|
self.assertEqual(parsed_args.json, True)
|
|
self.assertEqual(parsed_args.languages, [])
|
|
|
|
def test_argument_parsing__languages(self):
|
|
parsed_args = YouTubeTranscriptCli('v1 v2 --languages de en'.split())._parse_args()
|
|
self.assertEqual(parsed_args.video_ids, ['v1', 'v2'])
|
|
self.assertEqual(parsed_args.json, False)
|
|
self.assertEqual(parsed_args.languages, ['de', 'en'])
|
|
|
|
def test_run(self):
|
|
YouTubeTranscriptApi.get_transcripts = MagicMock(return_value=([], []))
|
|
YouTubeTranscriptCli('v1 v2 --languages de en'.split()).run()
|
|
|
|
YouTubeTranscriptApi.get_transcripts.assert_called_once_with(
|
|
['v1', 'v2'],
|
|
languages=['de', 'en'],
|
|
continue_after_error=True
|
|
)
|
|
|
|
def test_run__json_output(self):
|
|
YouTubeTranscriptApi.get_transcripts = MagicMock(return_value=([{'boolean': True}], []))
|
|
output = YouTubeTranscriptCli('v1 v2 --languages de en --json'.split()).run()
|
|
|
|
# will fail if output is not valid json
|
|
json.loads(output)
|