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))
Beispiel #3
0
    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()
Beispiel #5
0
    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()
Beispiel #9
0
    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)
Beispiel #10
0
    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))
Beispiel #11
0
    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)
Beispiel #12
0
    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)
Beispiel #17
0
    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)')
Beispiel #18
0
    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)
Beispiel #21
0
 def get_single_post(self):
     post = get_post(url=self.url_host_dict['SINGLE'], session=self.session)
     return post
Beispiel #22
0
 def get_album_post(self):
     post = get_post(url=self.url_host_dict['ALBUM'], session=self.session)
     return post