def test_extract_video_with_audio(self, get_host_vid, check_audio, filter_content, make_title, make_dir_path): url = 'https://v.redd.it/lkfmw864od1971' fallback_url = url + '/DASH_2_4_M?source=fallback' submission = get_mock_reddit_video_submission( media={'reddit_video': { 'fallback_url': fallback_url }}) get_host_vid.return_value = submission check_audio.return_value = True post = get_post(url=url, session=self.session, reddit_id=submission.id) filter_content.return_value = True make_title.return_value = post.title make_dir_path.return_value = 'content_dir_path' re = RedditVideoExtractor(post) re.extract_content() self.assertEqual(2, len(re.extracted_content)) vid_content = re.extracted_content[0] self.check(vid_content, fallback_url, post, title=f'{post.title}(video)') audio_content = re.extracted_content[1] self.check(audio_content, f'{url}/DASH_audio?source=fallback', post, title=f'{post.title}(audio)') self.assertEqual(1, len(video_merger.videos_to_merge))
def test_extract_video_with_audio_extract_exception( self, get_host_vid, get_audio, filter_content, make_title, make_dir_path): url = 'https://v.redd.it/lkfmw864od1971' fallback_url = url + '/DASH_2_4_M?source=fallback' get_audio.side_effect = AttributeError submission = get_mock_reddit_video_submission( is_video=True, media={'reddit_video': { 'fallback_url': fallback_url }}) get_host_vid.return_value = submission post = get_post(url=url, session=self.session, reddit_id=submission.id, title=submission.title) filter_content.return_value = True make_title.return_value = post.title make_dir_path.return_value = 'content_dir_path' re = RedditVideoExtractor(post) re.extract_content() self.assertEqual(1, len(re.extracted_content)) self.check_output(re, fallback_url, post, title=f'{post.title}(video)') self.assertEqual(0, len(video_merger.videos_to_merge))
def test_extract_video_with_audio_crossposted_post(self, rv_mock, filter_content, make_title, make_dir_path): url = 'https://v.redd.it/lkfmw864od1971' fallback_url = url + '/DASH_2_4_M?source=fallback' parent_submission = get_mock_reddit_video_submission( _id='pppppp', is_video=True, title='A parent vid', subreddit='DefinitelyNotPublicFreakout', media={'reddit_video': {'fallback_url': fallback_url}} ) rv_mock.return_value = parent_submission submission = get_mock_reddit_video_submission(crosspost_parent=parent_submission, url='https://v.redd.it/nottherealurl') post = get_post(url=url, session=self.session, reddit_id=submission.id, title=submission.title) filter_content.return_value = True make_title.return_value = post.title make_dir_path.return_value = 'content_dir_path' re = RedditVideoExtractor(post) re.extract_content() rv_mock.assert_called() self.assertEqual(2, (len(re.extracted_content))) vid_content = re.extracted_content[0] self.check(vid_content, fallback_url, post, title=f'{post.title}(video)') audio_content = re.extracted_content[1] self.check(audio_content, f'{url}/DASH_audio?source=fallback', post, title=f'{post.title}(audio)') self.assertEqual(1, len(video_merger.videos_to_merge))
def test_extract_content_explore_direct(self, es_mock, filter_content, make_title, make_dir_path): post = get_post(url='https://vidble.com/explore/XOwqxH6Xz9.jpg') ve = VidbleExtractor(post) ve.extract_content() self.assertEqual('https://vidble.com/XOwqxH6Xz9.jpg', ve.url) es_mock.assert_called()
def test_extract_content_assignment_direct(self, ex_mock, filter_content, make_title, make_dir_path): post = get_post() post.url = 'https://imgur.com/fb2yRj0.jpg' ie = ImgurExtractor(post) ie.extract_content() ex_mock.assert_called()
def test_extract_link_no_extractor_returned(self, assign, finish, handle_unsupported): url = mock_objects.get_post().url assign.return_value = None self.handler.extract_link(url, extra_arg='extra') assign.assert_called_with(url) finish.assert_not_called() handle_unsupported.assert_called()
def test_filter_file_type_video_cross_contamination(self): user = get_user(download_videos=False) post = get_post(author=user, significant=user) ext = 'mp4' f = self.content_filter.filter_file_type(post, ext) self.assertFalse(f) self.assertTrue(self.content_filter.filter_file_type(post, 'jpg')) self.assertTrue(self.content_filter.filter_file_type(post, 'webm'))
def test_extract_content_assignment_single_explore(self, es_mock, filter_content, make_title, make_dir_path): post = get_post(url='https://vidble.com/explore/XOwqxH6Xz9') ve = VidbleExtractor(post) ve.extract_content() es_mock.assert_called()
def test_extract_direct(self, filter_content, make_title, make_dir_path): url = 'https://imgur.com/fb2yRj0.jpg' post = get_post(url=url, session=self.session) filter_content.return_value = True make_title.return_value = post.title make_dir_path.return_value = 'content_dir_path' ie = ImgurExtractor(post) ie.extract_direct_link() self.check_output(ie, url, post)
def test_extract_direct_unknown_ext(self, filter_content, make_title, make_dir_path): post = get_post(url='https://i.imgur.com/fb2yRj0.foo') filter_content.return_value = True make_title.return_value = post.title make_dir_path.return_value = 'content_dir_path' ie = ImgurExtractor(post) ie.extract_direct_link() self.assertTrue(ie.failed_extraction) self.assertIsNotNone(ie.failed_extraction_message) self.assertEqual(0, len(ie.extracted_content))
def test_extract_direct_gif(self, filter_content, make_title, make_dir_path): in_url = 'https://i.imgur.com/mOlfhY3.gif' out_url = 'https://i.imgur.com/mOlfhY3.mp4' post = get_post(url=in_url, session=self.session) filter_content.return_value = True make_title.return_value = post.title make_dir_path.return_value = 'content_dir_path' ie = ImgurExtractor(post) ie.extract_direct_link() self.check_output(ie, out_url, post)
def test_extract_video_failed_to_find_url(self, get_vid_url, get_host_vid, filter_content, make_title, make_dir_path): submission = get_mock_reddit_video_submission(is_video=True) get_vid_url.return_value = None get_host_vid.return_value = submission post = get_post(title=submission.title, session=self.session) re = RedditVideoExtractor(post) re.extract_content() self.assertEqual(0, len(re.extracted_content)) self.assertTrue(re.failed_extraction) self.assertIsNotNone(re.failed_extraction_message)
def test_extract_direct_link(self, filter_content, make_title, make_dir_path): url = 'https://unsupported_site.com/image/3jfd9nlksd.jpg' post = get_post(url=url, session=self.session) filter_content.return_value = True make_title.return_value = post.title make_dir_path.return_value = 'content_dir_path' de = DirectExtractor(post) de.extract_content() self.check_output(de, url, post)
def test_extract_link_no_extractor_returned(self, assign, finish, handle_unknown_error): url = mock_objects.get_post().url extractor = MagicMock() extractor_class = MagicMock() extractor_class.return_value = extractor assign.return_value = extractor_class finish.side_effect = AttributeError self.handler.extract_link(url, extra_arg='extra') assign.assert_called_with(url) handle_unknown_error.assert_called()
def test_extract_single_explore(self, s_mock, filter_content, make_title, make_dir_path): s_mock.return_value = self.get_single_soup() out_url = 'https://vidble.com/XOwqxH6Xz9.jpg' post = get_post(session=self.session, url='https://vidble.com/explore/XOwqxH6Xz9') filter_content.return_value = True make_title.return_value = post.title make_dir_path.return_value = 'content_dir_path' ve = VidbleExtractor(post) ve.extract_single() self.check_output(ve, out_url, post)
def test_extract_link_successful(self, assign, finish): url = mock_objects.get_post().url extractor = MagicMock() extractor_class = MagicMock() extractor_class.return_value = extractor assign.return_value = extractor_class self.handler.extract_link(url, extra_arg='extra') assign.assert_called_with(url) extractor_class.assert_called_with(self.post, url=url, submission=self.submission, extra_arg='extra') finish.assert_called_with(extractor, text_link_extraction=False)
def test_extract_gif(self, get_host_vid, filter_content, make_title, make_dir_path): url = 'https://v.redd.it/lkfmw864od1971' fallback_url = url + '/DASH_2_4_M?source=fallback' submission = get_mock_reddit_video_submission(media={'reddit_video': {'fallback_url': fallback_url}}) get_host_vid.return_value = submission post = get_post(url=url, session=self.session, reddit_id=submission.id) filter_content.return_value = True make_title.return_value = post.title make_dir_path.return_value = 'content_dir_path' re = RedditVideoExtractor(post) re.extract_content() self.check_output(re, fallback_url, post, title=f'{post.title}(video)')
def test_extract_single(self, img_mock, filter_content, make_title, make_dir_path): post = get_post(url='https://imgur.com/fb2yRj0', session=self.session) url = 'https://i.imgur.com/fb2yRj0.jpg' img_mock.return_value = url filter_content.return_value = True make_title.return_value = post.title make_dir_path.return_value = 'content_dir_path' ie = ImgurExtractor(post) ie.extract_single() img_mock.assert_called_with('fb2yRj0') self.check_output(ie, url, post)
def test_filter_file_type_gifs_allowed(self): user = get_user(download_gifs=True) post = get_post(author=user, significant=user) ext = 'webm' f = self.content_filter.filter_file_type(post, ext) self.assertTrue(f)
def test_filter_file_type_image_not_allowed(self): user = get_user(download_images=False) post = get_post(author=user, significant=user) ext = 'jpg' f = self.content_filter.filter_file_type(post, ext) self.assertFalse(f)
def get_single_post(self): post = get_post(url=self.url_host_dict['SINGLE'], session=self.session) return post
def get_album_post(self): post = get_post(url=self.url_host_dict['ALBUM'], session=self.session) return post