def _check_csv_response(self, expected_profiles): """ Check that the response is a valid CSV response containing rows corresponding to previous_uploads and including the expected profiles. """ response = self.client.get(self.url) self.assertEqual(response.status_code, 200) self.assertEqual( response["Content-Disposition"], "attachment; filename={course}_video_urls.csv".format( course=self.course.id.course)) response_reader = StringIO(response.content) reader = csv.DictReader(response_reader, dialect=csv.excel) self.assertEqual( reader.fieldnames, (["Name", "Duration", "Date Added", "Video ID", "Status"] + ["{} URL".format(profile) for profile in expected_profiles])) actual_video_ids = [] for row in reader: response_video = { key.decode("utf-8"): value.decode("utf-8") for key, value in row.items() } self.assertNotIn(response_video["Video ID"], actual_video_ids) actual_video_ids.append(response_video["Video ID"]) original_video = self._get_previous_upload( response_video["Video ID"]) self.assertEqual(response_video["Name"], original_video["client_video_id"]) self.assertEqual(response_video["Duration"], str(original_video["duration"])) dateutil.parser.parse(response_video["Date Added"]) self.assertEqual(response_video["Video ID"], original_video["edx_video_id"]) self.assertEqual( response_video["Status"], StatusDisplayStrings.get(original_video["status"])) for profile in expected_profiles: response_profile_url = response_video["{} URL".format(profile)] original_encoded_for_profile = next( (original_encoded for original_encoded in original_video["encoded_videos"] if original_encoded["profile"] == profile), None) if original_encoded_for_profile: self.assertEqual(response_profile_url, original_encoded_for_profile["url"]) else: self.assertEqual(response_profile_url, "") self.assertEqual(len(actual_video_ids), len(self.previous_uploads))
def test_convert_video_status(self): """ Verifies that convert_video_status works as expected. """ video = self.previous_uploads[0] # video status should be failed if it's in upload state for more than 24 hours video['created'] = datetime(2016, 1, 1, 10, 10, 10, 0, pytz.UTC) status = convert_video_status(video) self.assertEqual(status, StatusDisplayStrings.get('upload_failed')) # `invalid_token` should be converted to `youtube_duplicate` video['created'] = datetime.now(pytz.UTC) video['status'] = 'invalid_token' status = convert_video_status(video) self.assertEqual(status, StatusDisplayStrings.get('youtube_duplicate')) # for all other status, there should not be any conversion statuses = StatusDisplayStrings._STATUS_MAP.keys() # pylint: disable=protected-access statuses.remove('invalid_token') for status in statuses: video['status'] = status new_status = convert_video_status(video) self.assertEqual(new_status, StatusDisplayStrings.get(status))
def _check_csv_response(self, expected_profiles): """ Check that the response is a valid CSV response containing rows corresponding to previous_uploads and including the expected profiles. """ response = self.client.get(self.url) self.assertEqual(response.status_code, 200) self.assertEqual( response["Content-Disposition"], "attachment; filename={course}_video_urls.csv".format(course=self.course.id.course) ) response_reader = StringIO(response.content) reader = csv.DictReader(response_reader, dialect=csv.excel) self.assertEqual( reader.fieldnames, ( ["Name", "Duration", "Date Added", "Video ID", "Status"] + ["{} URL".format(profile) for profile in expected_profiles] ) ) actual_video_ids = [] for row in reader: response_video = { key.decode("utf-8"): value.decode("utf-8") for key, value in row.items() } self.assertNotIn(response_video["Video ID"], actual_video_ids) actual_video_ids.append(response_video["Video ID"]) original_video = self._get_previous_upload(response_video["Video ID"]) self.assertEqual(response_video["Name"], original_video["client_video_id"]) self.assertEqual(response_video["Duration"], str(original_video["duration"])) dateutil.parser.parse(response_video["Date Added"]) self.assertEqual(response_video["Video ID"], original_video["edx_video_id"]) self.assertEqual(response_video["Status"], StatusDisplayStrings.get(original_video["status"])) for profile in expected_profiles: response_profile_url = response_video["{} URL".format(profile)] original_encoded_for_profile = next( ( original_encoded for original_encoded in original_video["encoded_videos"] if original_encoded["profile"] == profile ), None ) if original_encoded_for_profile: self.assertEqual(response_profile_url, original_encoded_for_profile["url"]) else: self.assertEqual(response_profile_url, "") self.assertEqual(len(actual_video_ids), len(self.previous_uploads))
def test_get_json(self): response = self.client.get_json(self.url) self.assertEqual(response.status_code, 200) response_videos = json.loads(response.content)["videos"] self.assertEqual(len(response_videos), len(self.previous_uploads)) for response_video in response_videos: original_video = self._get_previous_upload(response_video["edx_video_id"]) self.assertEqual( set(response_video.keys()), set(["edx_video_id", "client_video_id", "created", "duration", "status"]) ) dateutil.parser.parse(response_video["created"]) for field in ["edx_video_id", "client_video_id", "duration"]: self.assertEqual(response_video[field], original_video[field]) self.assertEqual( response_video["status"], StatusDisplayStrings.get(original_video["status"]) )
def test_get_json(self): response = self.client.get_json(self.url) self.assertEqual(response.status_code, 200) response_videos = json.loads(response.content)["videos"] self.assertEqual(len(response_videos), len(self.previous_uploads)) for i, response_video in enumerate(response_videos): # Videos should be returned by creation date descending original_video = self.previous_uploads[-(i + 1)] self.assertEqual( set(response_video.keys()), set(["edx_video_id", "client_video_id", "created", "duration", "status"]) ) dateutil.parser.parse(response_video["created"]) for field in ["edx_video_id", "client_video_id", "duration"]: self.assertEqual(response_video[field], original_video[field]) self.assertEqual( response_video["status"], StatusDisplayStrings.get(original_video["status"]) )
def test_get_json(self): response = self.client.get_json(self.url) self.assertEqual(response.status_code, 200) response_videos = json.loads(response.content)["videos"] self.assertEqual(len(response_videos), len(self.previous_uploads)) for response_video in response_videos: original_video = self._get_previous_upload( response_video["edx_video_id"]) self.assertEqual( set(response_video.keys()), set([ "edx_video_id", "client_video_id", "created", "duration", "status" ])) dateutil.parser.parse(response_video["created"]) for field in ["edx_video_id", "client_video_id", "duration"]: self.assertEqual(response_video[field], original_video[field]) self.assertEqual( response_video["status"], StatusDisplayStrings.get(original_video["status"]))