def test_scrape_youtube_thumbnail_logging( self, image_width, image_height, is_success, mocked_request, mock_logger ): """ Test that we get correct logs in case of failure as well as success. """ course_id = unicode(self.course.id) video1_edx_video_id = 'test-youtube-video-1' mocked_request.side_effect = [ self.mocked_youtube_thumbnail_response( image_width=image_width, image_height=image_height ) ] scrape_youtube_thumbnail(course_id, video1_edx_video_id, 'test-yt-id') if is_success: mock_logger.info.assert_called_with( u'VIDEOS: Scraping youtube video thumbnail for edx_video_id [%s] in course [%s]', video1_edx_video_id, course_id ) else: mock_logger.info.assert_called_with( u'VIDEOS: Scraping youtube video thumbnail failed for edx_video_id [%s] in course [%s] with error: %s', video1_edx_video_id, course_id, 'This image file must be larger than 2 KB.' )
def test_no_video_thumbnail_downloaded( self, image_content, image_content_type, error_message, mock_download_youtube_thumbnail, mock_logger ): """ Test that when no thumbnail is downloaded, video image is not updated. """ mock_download_youtube_thumbnail.return_value = image_content, image_content_type course_id = unicode(self.course.id) video1_edx_video_id = 'test-youtube-video-1' # Verify that video1 has no image attached. video1_image_url = get_course_video_image_url(course_id=course_id, edx_video_id=video1_edx_video_id) self.assertIsNone(video1_image_url) # Scrape video thumbnail. scrape_youtube_thumbnail(course_id, video1_edx_video_id, 'test-yt-id') mock_logger.info.assert_called_with( u'VIDEOS: Scraping youtube video thumbnail failed for edx_video_id [%s] in course [%s] with error: %s', video1_edx_video_id, course_id, error_message ) # Verify that no image is attached to video1. video1_image_url = get_course_video_image_url(course_id=course_id, edx_video_id=video1_edx_video_id) self.assertIsNone(video1_image_url)
def test_scrape_youtube_thumbnail(self, mocked_request): """ Test that youtube thumbnails are correctly scrapped. """ course_id = unicode(self.course.id) video1_edx_video_id = 'test-youtube-video-1' video2_edx_video_id = 'test-youtube-video-2' # Mock get youtube thumbnail responses. mocked_request.side_effect = [self.mocked_youtube_thumbnail_response()] # Verify that video1 has no image attached. video1_image_url = get_course_video_image_url(course_id=course_id, edx_video_id=video1_edx_video_id) self.assertIsNone(video1_image_url) # Verify that video2 has already image attached. video2_image_url = get_course_video_image_url(course_id=course_id, edx_video_id=video2_edx_video_id) self.assertIsNotNone(video2_image_url) # Scrape video thumbnails. scrape_youtube_thumbnail(course_id, video1_edx_video_id, 'test-yt-id') scrape_youtube_thumbnail(course_id, video2_edx_video_id, 'test-yt-id2') # Verify that now video1 image is attached. video1_image_url = get_course_video_image_url(course_id=course_id, edx_video_id=video1_edx_video_id) self.assertIsNotNone(video1_image_url) # Also verify that video2's image is not updated. video2_image_url_latest = get_course_video_image_url(course_id=course_id, edx_video_id=video2_edx_video_id) self.assertEqual(video2_image_url, video2_image_url_latest)
def test_no_video_thumbnail_downloaded(self, image_content, image_content_type, error_message, mock_download_youtube_thumbnail, mock_logger): """ Test that when no thumbnail is downloaded, video image is not updated. """ mock_download_youtube_thumbnail.return_value = image_content, image_content_type course_id = six.text_type(self.course.id) video1_edx_video_id = 'test-youtube-video-1' # Verify that video1 has no image attached. video1_image_url = get_course_video_image_url( course_id=course_id, edx_video_id=video1_edx_video_id) self.assertIsNone(video1_image_url) # Scrape video thumbnail. scrape_youtube_thumbnail(course_id, video1_edx_video_id, 'test-yt-id') mock_logger.info.assert_called_with( u'VIDEOS: Scraping youtube video thumbnail failed for edx_video_id [%s] in course [%s] with error: %s', video1_edx_video_id, course_id, error_message) # Verify that no image is attached to video1. video1_image_url = get_course_video_image_url( course_id=course_id, edx_video_id=video1_edx_video_id) self.assertIsNone(video1_image_url)
def test_scrape_youtube_thumbnail(self, mocked_request): """ Test that youtube thumbnails are correctly scrapped. """ course_id = six.text_type(self.course.id) video1_edx_video_id = 'test-youtube-video-1' video2_edx_video_id = 'test-youtube-video-2' # Mock get youtube thumbnail responses. mocked_request.side_effect = [self.mocked_youtube_thumbnail_response()] # Verify that video1 has no image attached. video1_image_url = get_course_video_image_url( course_id=course_id, edx_video_id=video1_edx_video_id) self.assertIsNone(video1_image_url) # Verify that video2 has already image attached. video2_image_url = get_course_video_image_url( course_id=course_id, edx_video_id=video2_edx_video_id) self.assertIsNotNone(video2_image_url) # Scrape video thumbnails. scrape_youtube_thumbnail(course_id, video1_edx_video_id, 'test-yt-id') scrape_youtube_thumbnail(course_id, video2_edx_video_id, 'test-yt-id2') # Verify that now video1 image is attached. video1_image_url = get_course_video_image_url( course_id=course_id, edx_video_id=video1_edx_video_id) self.assertIsNotNone(video1_image_url) # Also verify that video2's image is not updated. video2_image_url_latest = get_course_video_image_url( course_id=course_id, edx_video_id=video2_edx_video_id) self.assertEqual(video2_image_url, video2_image_url_latest)
def test_scrape_youtube_thumbnail_logging( self, image_width, image_height, is_success, mocked_request, mock_logger ): """ Test that we get correct logs in case of failure as well as success. """ course_id = unicode(self.course.id) video1_edx_video_id = 'test-youtube-video-1' mocked_request.side_effect = [ self.mocked_youtube_thumbnail_response( image_width=image_width, image_height=image_height ) ] scrape_youtube_thumbnail(course_id, video1_edx_video_id, 'test-yt-id') if is_success: mock_logger.info.assert_called_with( 'VIDEOS: Scraping youtube video thumbnail for edx_video_id [%s] in course [%s]', video1_edx_video_id, course_id ) else: mock_logger.info.assert_called_with( 'VIDEOS: Scraping youtube video thumbnail failed for edx_video_id [%s] in course [%s] with error: %s', video1_edx_video_id, course_id, 'This image file must be larger than 2 KB.' )
def task_scrape_youtube_thumbnail(self, course_videos, run): # pylint: disable=unused-argument """ Task to scrape youtube thumbnails and update them in edxval for the given course-videos. Arguments: course_videos: A list of tuples, each containing course ID, video ID and youtube ID. run: This tracks the YT thumbnail scraping job runs. """ for course_id, edx_video_id, youtube_id in course_videos: try: scrape_youtube_thumbnail(course_id, edx_video_id, youtube_id) except Exception: # pylint: disable=broad-except LOGGER.exception(( u"[video thumbnails] [run=%s] [video-thumbnails-scraping-failed-with-unknown-exc] " u"[edx_video_id=%s] [youtube_id=%s] [course=%s]"), run, edx_video_id, youtube_id, course_id) continue
def task_scrape_youtube_thumbnail(self, course_videos, run): # pylint: disable=unused-argument """ Task to scrape youtube thumbnails and update them in edxval for the given course-videos. Arguments: course_videos: A list of tuples, each containing course ID, video ID and youtube ID. run: This tracks the YT thumbnail scraping job runs. """ for course_id, edx_video_id, youtube_id in course_videos: try: scrape_youtube_thumbnail(course_id, edx_video_id, youtube_id) except Exception: # pylint: disable=broad-except LOGGER.exception( (u"[video thumbnails] [run=%s] [video-thumbnails-scraping-failed-with-unknown-exc] " u"[edx_video_id=%s] [youtube_id=%s] [course=%s]"), run, edx_video_id, youtube_id, course_id ) continue