| | """ |
| | Tests for YouTube handler functionality. |
| | """ |
| |
|
| | import unittest |
| | from unittest.mock import patch, MagicMock |
| | import sys |
| | import os |
| |
|
| | |
| | sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) |
| |
|
| | from src.utils.youtube_handler import YouTubeHandler |
| |
|
| | class TestYouTubeHandler(unittest.TestCase): |
| | """Test cases for YouTubeHandler class.""" |
| | |
| | def setUp(self): |
| | """Set up test fixtures.""" |
| | self.handler = YouTubeHandler() |
| | |
| | def test_validate_youtube_url_valid(self): |
| | """Test URL validation with valid URLs.""" |
| | valid_urls = [ |
| | "https://www.youtube.com/watch?v=dQw4w9WgXcQ", |
| | "https://youtu.be/dQw4w9WgXcQ", |
| | "http://youtube.com/watch?v=dQw4w9WgXcQ", |
| | "https://m.youtube.com/watch?v=dQw4w9WgXcQ" |
| | ] |
| | |
| | for url in valid_urls: |
| | with self.subTest(url=url): |
| | self.assertTrue(self.handler.validate_youtube_url(url)) |
| | |
| | def test_validate_youtube_url_invalid(self): |
| | """Test URL validation with invalid URLs.""" |
| | invalid_urls = [ |
| | "https://www.google.com", |
| | "not_a_url", |
| | "https://vimeo.com/123456", |
| | "", |
| | None |
| | ] |
| | |
| | for url in invalid_urls: |
| | with self.subTest(url=url): |
| | if url is not None: |
| | self.assertFalse(self.handler.validate_youtube_url(url)) |
| | |
| | @patch('src.utils.youtube_handler.YouTube') |
| | def test_extract_video_id_success(self, mock_youtube): |
| | """Test successful video ID extraction.""" |
| | mock_yt = MagicMock() |
| | mock_yt.video_id = "dQw4w9WgXcQ" |
| | mock_youtube.return_value = mock_yt |
| | |
| | video_id = self.handler.extract_video_id("https://www.youtube.com/watch?v=dQw4w9WgXcQ") |
| | self.assertEqual(video_id, "dQw4w9WgXcQ") |
| | |
| | @patch('src.utils.youtube_handler.YouTube') |
| | def test_extract_video_id_failure(self, mock_youtube): |
| | """Test video ID extraction failure.""" |
| | mock_youtube.side_effect = Exception("Invalid URL") |
| | |
| | video_id = self.handler.extract_video_id("invalid_url") |
| | self.assertIsNone(video_id) |
| | |
| | @patch('src.utils.youtube_handler.YouTube') |
| | def test_get_video_metadata_success(self, mock_youtube): |
| | """Test successful video metadata retrieval.""" |
| | mock_yt = MagicMock() |
| | mock_yt.title = "Test Video" |
| | mock_yt.author = "Test Author" |
| | mock_yt.length = 300 |
| | mock_yt.views = 1000 |
| | mock_yt.video_id = "dQw4w9WgXcQ" |
| | mock_youtube.return_value = mock_yt |
| | |
| | metadata = self.handler.get_video_metadata("https://www.youtube.com/watch?v=dQw4w9WgXcQ") |
| | |
| | self.assertEqual(metadata['title'], "Test Video") |
| | self.assertEqual(metadata['author'], "Test Author") |
| | self.assertEqual(metadata['length'], 300) |
| | self.assertEqual(metadata['views'], 1000) |
| | self.assertEqual(metadata['video_id'], "dQw4w9WgXcQ") |
| | |
| | @patch('src.utils.youtube_handler.YouTube') |
| | def test_get_video_metadata_failure(self, mock_youtube): |
| | """Test video metadata retrieval failure.""" |
| | mock_youtube.side_effect = Exception("Network error") |
| | |
| | metadata = self.handler.get_video_metadata("https://www.youtube.com/watch?v=dQw4w9WgXcQ") |
| | self.assertEqual(metadata, {}) |
| | |
| | def test_save_transcript_to_file(self): |
| | """Test transcript file saving.""" |
| | test_text = "This is a test transcript." |
| | test_file = "test_transcript.txt" |
| | |
| | try: |
| | result = self.handler.save_transcript_to_file(test_text, test_file) |
| | self.assertTrue(result) |
| | |
| | |
| | with open(test_file, 'r', encoding='utf-8') as f: |
| | content = f.read() |
| | self.assertEqual(content, test_text) |
| | |
| | finally: |
| | |
| | if os.path.exists(test_file): |
| | os.remove(test_file) |
| |
|
| | if __name__ == '__main__': |
| | unittest.main() |
| |
|