disable subs field syncying
This commit is contained in:
@@ -581,7 +581,6 @@ class TestCheckTranscripts(BaseTranscripts):
|
||||
json.loads(resp.content),
|
||||
{
|
||||
u'status': u'Success',
|
||||
u'subs': unicode(subs_id),
|
||||
u'youtube_local': False,
|
||||
u'is_youtube_mode': False,
|
||||
u'youtube_server': False,
|
||||
@@ -618,13 +617,14 @@ class TestCheckTranscripts(BaseTranscripts):
|
||||
'mode': 'youtube',
|
||||
}]
|
||||
}
|
||||
|
||||
resp = self.client.get(link, {'data': json.dumps(data)})
|
||||
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertDictEqual(
|
||||
json.loads(resp.content),
|
||||
{
|
||||
u'status': u'Success',
|
||||
u'subs': u'JMD_ifUUfsU',
|
||||
u'youtube_local': True,
|
||||
u'is_youtube_mode': True,
|
||||
u'youtube_server': False,
|
||||
@@ -676,7 +676,6 @@ class TestCheckTranscripts(BaseTranscripts):
|
||||
json.loads(resp.content),
|
||||
{
|
||||
u'status': u'Success',
|
||||
u'subs': u'good_id_2',
|
||||
u'youtube_local': True,
|
||||
u'is_youtube_mode': True,
|
||||
u'youtube_server': True,
|
||||
@@ -816,7 +815,6 @@ class TestCheckTranscripts(BaseTranscripts):
|
||||
json.loads(response.content),
|
||||
{
|
||||
u'status': u'Success',
|
||||
u'subs': u'',
|
||||
u'youtube_local': False,
|
||||
u'is_youtube_mode': False,
|
||||
u'youtube_server': False,
|
||||
@@ -827,63 +825,3 @@ class TestCheckTranscripts(BaseTranscripts):
|
||||
u'html5_equal': False,
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
class TestSaveTranscripts(BaseTranscripts):
|
||||
"""
|
||||
Tests for '/transcripts/save' url.
|
||||
"""
|
||||
def assert_current_subs(self, expected_subs):
|
||||
"""
|
||||
Asserts the current subtitles set on the video module.
|
||||
|
||||
Arguments:
|
||||
expected_subs (String): Expected current subtitles for video.
|
||||
"""
|
||||
item = modulestore().get_item(self.video_usage_key)
|
||||
self.assertEqual(item.sub, expected_subs)
|
||||
|
||||
def test_prioritize_youtube_sub_on_save(self):
|
||||
"""
|
||||
Test that the '/transcripts/save' endpoint prioritises youtube subtitles over html5 ones
|
||||
while deciding the current subs for video module.
|
||||
"""
|
||||
# Update video module to contain 1 youtube and 2 html5 sources.
|
||||
youtube_id = str(uuid4())
|
||||
self.item.data = textwrap.dedent(
|
||||
"""
|
||||
<video youtube="1:{youtube_id}" sub="">
|
||||
<source src="http://www.testvid.org/html5/videos/testvid.mp4"/>
|
||||
<source src="http://www.testvid2.org/html5/videos/testvid2.webm"/>
|
||||
</video>
|
||||
""".format(youtube_id=youtube_id)
|
||||
)
|
||||
modulestore().update_item(self.item, self.user.id)
|
||||
self.assert_current_subs(expected_subs='')
|
||||
|
||||
# Save new subs in the content store.
|
||||
subs = {
|
||||
'start': [100, 200, 240],
|
||||
'end': [200, 240, 380],
|
||||
'text': [
|
||||
'subs #1',
|
||||
'subs #2',
|
||||
'subs #3'
|
||||
]
|
||||
}
|
||||
self.save_subs_to_store(subs, youtube_id)
|
||||
|
||||
# Now, make request to /transcripts/save endpoint with new subs.
|
||||
data = {
|
||||
'locator': unicode(self.video_usage_key),
|
||||
'metadata': {
|
||||
'sub': youtube_id
|
||||
}
|
||||
}
|
||||
resp = self.client.get(reverse('save_transcripts'), {'data': json.dumps(data)})
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertEqual(json.loads(resp.content), {"status": "Success"})
|
||||
|
||||
# Now check item.sub, it should be same as youtube id because /transcripts/save prioritize
|
||||
# youtube subs over html5 ones.
|
||||
self.assert_current_subs(expected_subs=youtube_id)
|
||||
|
||||
@@ -36,7 +36,6 @@ from xmodule.video_module.transcripts_utils import (
|
||||
get_video_transcript_content,
|
||||
generate_subs_from_source,
|
||||
get_transcripts_from_youtube,
|
||||
manage_video_subtitles_save,
|
||||
remove_subs_from_store,
|
||||
Transcript,
|
||||
TranscriptsRequestValidationException,
|
||||
@@ -58,7 +57,6 @@ __all__ = [
|
||||
'choose_transcripts',
|
||||
'replace_transcripts',
|
||||
'rename_transcripts',
|
||||
'save_transcripts',
|
||||
]
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
@@ -238,6 +236,7 @@ def check_transcripts(request):
|
||||
'current_item_subs': None,
|
||||
'status': 'Error',
|
||||
}
|
||||
|
||||
try:
|
||||
__, videos, item = _validate_transcripts_data(request)
|
||||
except TranscriptsRequestValidationException as e:
|
||||
@@ -247,7 +246,7 @@ def check_transcripts(request):
|
||||
|
||||
try:
|
||||
get_transcript_from_val(edx_video_id=item.edx_video_id, lang=u'en')
|
||||
command, subs_to_use = 'found', ''
|
||||
command = 'found'
|
||||
except NotFoundError:
|
||||
filename = 'subs_{0}.srt.sjson'.format(item.sub)
|
||||
content_location = StaticContent.compute_location(item.location.course_key, filename)
|
||||
@@ -307,12 +306,9 @@ def check_transcripts(request):
|
||||
if len(html5_subs) == 2: # check html5 transcripts for equality
|
||||
transcripts_presence['html5_equal'] = json.loads(html5_subs[0]) == json.loads(html5_subs[1])
|
||||
|
||||
command, subs_to_use = _transcripts_logic(transcripts_presence, videos)
|
||||
command, __ = _transcripts_logic(transcripts_presence, videos)
|
||||
|
||||
transcripts_presence.update({
|
||||
'command': command,
|
||||
'subs': subs_to_use,
|
||||
})
|
||||
transcripts_presence.update({'command': command})
|
||||
return JsonResponse(transcripts_presence)
|
||||
|
||||
|
||||
@@ -515,48 +511,6 @@ def rename_transcripts(request):
|
||||
return JsonResponse(response)
|
||||
|
||||
|
||||
@login_required
|
||||
def save_transcripts(request):
|
||||
"""
|
||||
Saves video module with updated values of fields.
|
||||
|
||||
Returns: status `Success` or status `Error` and HTTP 400.
|
||||
"""
|
||||
response = {'status': 'Error'}
|
||||
|
||||
data = json.loads(request.GET.get('data', '{}'))
|
||||
if not data:
|
||||
return error_response(response, 'Incoming video data is empty.')
|
||||
|
||||
try:
|
||||
item = _get_item(request, data)
|
||||
except (InvalidKeyError, ItemNotFoundError):
|
||||
return error_response(response, "Can't find item by locator.")
|
||||
|
||||
metadata = data.get('metadata')
|
||||
if metadata is not None:
|
||||
new_sub = metadata.get('sub')
|
||||
|
||||
for metadata_key, value in metadata.items():
|
||||
setattr(item, metadata_key, value)
|
||||
|
||||
item.save_with_metadata(request.user) # item becomes updated with new values
|
||||
|
||||
if new_sub:
|
||||
manage_video_subtitles_save(item, request.user)
|
||||
else:
|
||||
# If `new_sub` is empty, it means that user explicitly does not want to use
|
||||
# transcripts for current video ids and we remove all transcripts from storage.
|
||||
current_subs = data.get('current_subs')
|
||||
if current_subs is not None:
|
||||
for sub in current_subs:
|
||||
remove_subs_from_store(sub, item)
|
||||
|
||||
response['status'] = 'Success'
|
||||
|
||||
return JsonResponse(response)
|
||||
|
||||
|
||||
def _get_item(request, data):
|
||||
"""
|
||||
Obtains from 'data' the locator for an item.
|
||||
|
||||
@@ -362,31 +362,6 @@ function($, Backbone, _, Utils, Editor, MetadataView, MetadataModel, MetadataCol
|
||||
}).getValue();
|
||||
expect(youtubeValue).toEqual('');
|
||||
});
|
||||
|
||||
it('Timed Transcript field is updated', function() {
|
||||
Utils.Storage.set('sub', 'test_value');
|
||||
|
||||
transcripts.syncAdvancedTab(metadataCollection);
|
||||
|
||||
var collection = metadataCollection.models,
|
||||
subValue = collection[1].getValue();
|
||||
|
||||
expect(subValue).toEqual('test_value');
|
||||
});
|
||||
|
||||
it('Timed Transcript field is updated just once', function() {
|
||||
Utils.Storage.set('sub', 'test_value');
|
||||
|
||||
var collection = metadataCollection.models,
|
||||
subModel = collection[1];
|
||||
|
||||
spyOn(subModel, 'setValue');
|
||||
|
||||
transcripts.syncAdvancedTab(metadataCollection);
|
||||
transcripts.syncAdvancedTab(metadataCollection);
|
||||
transcripts.syncAdvancedTab(metadataCollection);
|
||||
expect(subModel.setValue.calls.count()).toEqual(1);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -75,7 +75,6 @@ function($, Backbone, _, Utils, MetadataView, MetadataCollection) {
|
||||
var result = [],
|
||||
getField = Utils.getField,
|
||||
component_locator = this.$el.closest('[data-locator]').data('locator'),
|
||||
subs = getField(metadataCollection, 'sub'),
|
||||
values = {},
|
||||
videoUrl, metadata, modifiedValues;
|
||||
|
||||
@@ -89,37 +88,6 @@ function($, Backbone, _, Utils, MetadataView, MetadataCollection) {
|
||||
|
||||
modifiedValues = metadataView.getModifiedMetadataValues();
|
||||
|
||||
var isSubsModified = (function(values) {
|
||||
var isSubsChanged = subs.hasChanged('value');
|
||||
|
||||
return Boolean(
|
||||
isSubsChanged &&
|
||||
(
|
||||
// If the user changes the field, `values.sub` contains
|
||||
// string value;
|
||||
// If the user clicks `clear` button, the field contains
|
||||
// null value.
|
||||
// Otherwise, undefined.
|
||||
_.isString(values.sub) || _.isNull(subs.getValue())
|
||||
)
|
||||
);
|
||||
}(modifiedValues));
|
||||
|
||||
// When we change value of `sub` field in the `Advanced`,
|
||||
// we update data on backend. That provides possibility to remove
|
||||
// transcripts.
|
||||
if (isSubsModified) {
|
||||
metadata = $.extend(true, {}, modifiedValues);
|
||||
// Save module state
|
||||
Utils.command('save', component_locator, null, {
|
||||
metadata: metadata,
|
||||
current_subs: _.pluck(
|
||||
Utils.getVideoList(videoUrl.getDisplayValue()),
|
||||
'video'
|
||||
)
|
||||
});
|
||||
}
|
||||
|
||||
// Get values from `Advanced` tab fields (`html5_sources`,
|
||||
// `youtube_id_1_0`) that should be synchronized.
|
||||
var html5Sources = getField(metadataCollection, 'html5_sources').getDisplayValue();
|
||||
@@ -151,17 +119,6 @@ function($, Backbone, _, Utils, MetadataView, MetadataCollection) {
|
||||
|
||||
// Synchronize other fields that has the same `field_name` property.
|
||||
Utils.syncCollections(metadataCollection, this.collection);
|
||||
|
||||
if (isSubsModified) {
|
||||
// When `sub` field is changed, clean Storage to avoid overwriting.
|
||||
Utils.Storage.remove('sub');
|
||||
|
||||
// Trigger `change` event manually if `video_url` model
|
||||
// isn't changed.
|
||||
if (!videoUrl.hasChanged()) {
|
||||
videoUrl.trigger('change');
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -177,8 +134,6 @@ function($, Backbone, _, Utils, MetadataView, MetadataCollection) {
|
||||
*/
|
||||
syncAdvancedTab: function(metadataCollection, metadataView) {
|
||||
var getField = Utils.getField,
|
||||
subsValue = Utils.Storage.get('sub'),
|
||||
subs = getField(metadataCollection, 'sub'),
|
||||
html5Sources, youtube, videoUrlValue, result;
|
||||
|
||||
// if metadataCollection is not passed, just exit.
|
||||
@@ -234,14 +189,6 @@ function($, Backbone, _, Utils, MetadataView, MetadataCollection) {
|
||||
youtube.setValue(result);
|
||||
}
|
||||
|
||||
// If Utils.Storage contain some subtitles, update them.
|
||||
if (_.isString(subsValue)) {
|
||||
subs.setValue(subsValue);
|
||||
// After updating should be removed, because it might overwrite
|
||||
// subtitles added by user manually.
|
||||
Utils.Storage.remove('sub');
|
||||
}
|
||||
|
||||
// Synchronize other fields that has the same `field_name` property.
|
||||
Utils.syncCollections(this.collection, metadataCollection);
|
||||
},
|
||||
|
||||
@@ -104,7 +104,7 @@ function($, Backbone, _, AbstractEditor, Utils, MessageManager) {
|
||||
self.messenger.render(resp.command, params);
|
||||
self.checkIsUniqVideoTypes();
|
||||
// Synchronize transcripts field in the `Advanced` tab.
|
||||
Utils.Storage.set('sub', resp.subs);
|
||||
// Utils.Storage.set('sub', resp.subs);
|
||||
})
|
||||
.fail(showServerError);
|
||||
},
|
||||
|
||||
@@ -33,7 +33,6 @@ urlpatterns = [
|
||||
url(r'^transcripts/choose$', contentstore.views.choose_transcripts, name='choose_transcripts'),
|
||||
url(r'^transcripts/replace$', contentstore.views.replace_transcripts, name='replace_transcripts'),
|
||||
url(r'^transcripts/rename$', contentstore.views.rename_transcripts, name='rename_transcripts'),
|
||||
url(r'^transcripts/save$', contentstore.views.save_transcripts, name='save_transcripts'),
|
||||
url(r'^preview/xblock/(?P<usage_key_string>.*?)/handler/(?P<handler>[^/]*)(?:/(?P<suffix>.*))?$',
|
||||
contentstore.views.preview_handler, name='preview_handler'),
|
||||
url(r'^xblock/(?P<usage_key_string>.*?)/handler/(?P<handler>[^/]*)(?:/(?P<suffix>.*))?$',
|
||||
|
||||
@@ -361,7 +361,7 @@ def manage_video_subtitles_save(item, user, old_metadata=None, generate_translat
|
||||
This whole action ensures that after user changes video fields, proper `sub` files, corresponding
|
||||
to new values of video fields, will be presented in system.
|
||||
|
||||
# 2 convert /static/filename.srt to filename.srt in self.transcripts.
|
||||
# 2. convert /static/filename.srt to filename.srt in self.transcripts.
|
||||
(it is done to allow user to enter both /static/filename.srt and filename.srt)
|
||||
|
||||
# 3. Generate transcripts translation only when user clicks `save` button, not while switching tabs.
|
||||
@@ -371,33 +371,32 @@ def manage_video_subtitles_save(item, user, old_metadata=None, generate_translat
|
||||
(To avoid confusing situation if you attempt to correct a translation by uploading
|
||||
a new version of the SRT file with same name).
|
||||
"""
|
||||
|
||||
_ = item.runtime.service(item, "i18n").ugettext
|
||||
|
||||
# 1.
|
||||
html5_ids = get_html5_ids(item.html5_sources)
|
||||
# # 1.
|
||||
# html5_ids = get_html5_ids(item.html5_sources)
|
||||
|
||||
# Youtube transcript source should always have a higher priority than html5 sources. Appending
|
||||
# `youtube_id_1_0` at the end helps achieve this when we read transcripts list.
|
||||
possible_video_id_list = html5_ids + [item.youtube_id_1_0]
|
||||
sub_name = item.sub
|
||||
for video_id in possible_video_id_list:
|
||||
if not video_id:
|
||||
continue
|
||||
if not sub_name:
|
||||
remove_subs_from_store(video_id, item)
|
||||
continue
|
||||
# copy_or_rename_transcript changes item.sub of module
|
||||
try:
|
||||
# updates item.sub with `video_id`, if it is successful.
|
||||
copy_or_rename_transcript(video_id, sub_name, item, user=user)
|
||||
except NotFoundError:
|
||||
# subtitles file `sub_name` is not presented in the system. Nothing to copy or rename.
|
||||
log.debug(
|
||||
"Copying %s file content to %s name is failed, "
|
||||
"original file does not exist.",
|
||||
sub_name, video_id
|
||||
)
|
||||
# # Youtube transcript source should always have a higher priority than html5 sources. Appending
|
||||
# # `youtube_id_1_0` at the end helps achieve this when we read transcripts list.
|
||||
# possible_video_id_list = html5_ids + [item.youtube_id_1_0]
|
||||
# sub_name = item.sub
|
||||
# for video_id in possible_video_id_list:
|
||||
# if not video_id:
|
||||
# continue
|
||||
# if not sub_name:
|
||||
# remove_subs_from_store(video_id, item)
|
||||
# continue
|
||||
# # copy_or_rename_transcript changes item.sub of module
|
||||
# try:
|
||||
# # updates item.sub with `video_id`, if it is successful.
|
||||
# copy_or_rename_transcript(video_id, sub_name, item, user=user)
|
||||
# except NotFoundError:
|
||||
# # subtitles file `sub_name` is not presented in the system. Nothing to copy or rename.
|
||||
# log.debug(
|
||||
# "Copying %s file content to %s name is failed, "
|
||||
# "original file does not exist.",
|
||||
# sub_name, video_id
|
||||
# )
|
||||
|
||||
# 2.
|
||||
if generate_translation:
|
||||
@@ -409,6 +408,9 @@ def manage_video_subtitles_save(item, user, old_metadata=None, generate_translat
|
||||
old_langs = set(old_metadata.get('transcripts', {})) if old_metadata else set()
|
||||
new_langs = set(item.transcripts)
|
||||
|
||||
html5_ids = get_html5_ids(item.html5_sources)
|
||||
possible_video_id_list = html5_ids + [item.youtube_id_1_0]
|
||||
|
||||
for lang in old_langs.difference(new_langs): # 3a
|
||||
for video_id in possible_video_id_list:
|
||||
if video_id:
|
||||
|
||||
@@ -46,6 +46,7 @@ class CMSVideoBaseTest(UniqueCourseTest):
|
||||
)
|
||||
|
||||
self.assets = []
|
||||
self.metadata = None
|
||||
self.addCleanup(YouTubeStubConfig.reset)
|
||||
|
||||
def _create_course_unit(self, youtube_stub_config=None, subtitles=False):
|
||||
@@ -87,6 +88,7 @@ class CMSVideoBaseTest(UniqueCourseTest):
|
||||
Create a user and make that user a course author
|
||||
Log the user into studio
|
||||
"""
|
||||
|
||||
if self.assets:
|
||||
self.course_fixture.add_asset(self.assets)
|
||||
|
||||
@@ -95,7 +97,7 @@ class CMSVideoBaseTest(UniqueCourseTest):
|
||||
XBlockFixtureDesc('chapter', 'Test Section').add_children(
|
||||
XBlockFixtureDesc('sequential', 'Test Subsection').add_children(
|
||||
XBlockFixtureDesc('vertical', 'Test Unit').add_children(
|
||||
XBlockFixtureDesc('video', 'Video')
|
||||
XBlockFixtureDesc('video', 'Video', metadata=self.metadata)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -123,40 +123,6 @@ class VideoTranscriptTest(CMSVideoBaseTest):
|
||||
self.assertFalse(self.video.is_transcript_button_visible('import'))
|
||||
self.assertTrue(self.video.is_transcript_button_visible('disabled_download_to_edit'))
|
||||
|
||||
def test_youtube_id_w_found_state(self):
|
||||
"""
|
||||
Scenario: Youtube id only: check "Found" state
|
||||
Given I have created a Video component with subtitles "t_not_exist"
|
||||
|
||||
And I enter a "http://youtu.be/t_not_exist" source to field number 1
|
||||
Then I see status message "Timed Transcript Found"
|
||||
And I see value "t_not_exist" in the field "Default Timed Transcript"
|
||||
"""
|
||||
self._create_video_component(subtitles=True, subtitle_id='t_not_exist')
|
||||
self.edit_component()
|
||||
|
||||
self.video.set_url_field('http://youtu.be/t_not_exist', 1)
|
||||
self.assertEqual(self.video.message('status'), 'Timed Transcript Found')
|
||||
self.open_advanced_tab()
|
||||
self.assertTrue(self.video.verify_field_value('Default Timed Transcript', 't_not_exist'))
|
||||
|
||||
def test_youtube_id_w_same_local_server_subs(self):
|
||||
"""
|
||||
Scenario: Youtube id only: check "Found" state when user sets youtube_id with same local and server subs
|
||||
Given I have created a Video component with subtitles "t__eq_exist"
|
||||
|
||||
And I enter a "http://youtu.be/t__eq_exist" source to field number 1
|
||||
And I see status message "Timed Transcript Found"
|
||||
And I see value "t__eq_exist" in the field "Default Timed Transcript"
|
||||
"""
|
||||
self._create_video_component(subtitles=True, subtitle_id='t__eq_exist')
|
||||
self.edit_component()
|
||||
|
||||
self.video.set_url_field('http://youtu.be/t__eq_exist', 1)
|
||||
self.assertEqual(self.video.message('status'), 'Timed Transcript Found')
|
||||
self.open_advanced_tab()
|
||||
self.assertTrue(self.video.verify_field_value('Default Timed Transcript', 't__eq_exist'))
|
||||
|
||||
def test_youtube_id_w_different_local_server_sub(self):
|
||||
"""
|
||||
Scenario: Youtube id only: check "Found" state when user sets youtube_id with different local and server subs
|
||||
@@ -167,7 +133,6 @@ class VideoTranscriptTest(CMSVideoBaseTest):
|
||||
And I see button "replace"
|
||||
And I click transcript button "replace"
|
||||
And I see status message "Timed Transcript Found"
|
||||
And I see value "t_neq_exist" in the field "Default Timed Transcript"
|
||||
"""
|
||||
self._create_video_component(subtitles=True, subtitle_id='t_neq_exist')
|
||||
self.edit_component()
|
||||
@@ -177,8 +142,7 @@ class VideoTranscriptTest(CMSVideoBaseTest):
|
||||
self.assertTrue(self.video.is_transcript_button_visible('replace'))
|
||||
self.video.click_button_subtitles()
|
||||
self.video.wait_for_message('status', 'Timed Transcript Found')
|
||||
self.open_advanced_tab()
|
||||
self.assertTrue(self.video.verify_field_value('Default Timed Transcript', 't_neq_exist'))
|
||||
#TODO! Incomplete test, should be completed as a part of replace_transcript
|
||||
|
||||
def test_html5_source_w_not_found_state(self):
|
||||
"""
|
||||
@@ -197,45 +161,6 @@ class VideoTranscriptTest(CMSVideoBaseTest):
|
||||
self.open_advanced_tab()
|
||||
self.assertTrue(self.video.verify_field_value('Default Timed Transcript', ''))
|
||||
|
||||
def test_html5_source_w_found_state(self):
|
||||
"""
|
||||
Scenario: html5 source only: check "Found" state
|
||||
Given I have created a Video component with subtitles "t_not_exist"
|
||||
|
||||
And I enter a "t_not_exist.mp4" source to field number 1
|
||||
Then I see status message "Timed Transcript Found"
|
||||
And I see value "t_not_exist" in the field "Default Timed Transcript"
|
||||
"""
|
||||
self._create_video_component(subtitles=True, subtitle_id='t_not_exist')
|
||||
self.edit_component()
|
||||
|
||||
self.video.set_url_field('t_not_exist.mp4', 1)
|
||||
self.assertEqual(self.video.message('status'), 'Timed Transcript Found')
|
||||
self.open_advanced_tab()
|
||||
self.assertTrue(self.video.verify_field_value('Default Timed Transcript', 't_not_exist'))
|
||||
|
||||
def test_set_youtube_id_wo_server(self):
|
||||
"""
|
||||
Scenario: User sets youtube_id w/o server but with local subs and one html5 link w/o subs
|
||||
Given I have created a Video component with subtitles "t_not_exist"
|
||||
|
||||
urls = ['http://youtu.be/t_not_exist', 'test_video_name.mp4']
|
||||
for each url in urls do the following
|
||||
Enter `url` to field number n
|
||||
Status message "Timed Transcript Found" is shown
|
||||
And I see value "t_not_exist" in the field "Default Timed Transcript"
|
||||
"""
|
||||
self._create_video_component(subtitles=True, subtitle_id='t_not_exist')
|
||||
self.edit_component()
|
||||
|
||||
urls = ['http://youtu.be/t_not_exist', 'test_video_name.mp4']
|
||||
for index, url in enumerate(urls, 1):
|
||||
self.video.set_url_field(url, index)
|
||||
self.assertEqual(self.video.message('status'), 'Timed Transcript Found')
|
||||
|
||||
self.open_advanced_tab()
|
||||
self.assertTrue(self.video.verify_field_value('Default Timed Transcript', 't_not_exist'))
|
||||
|
||||
def test_set_youtube_id_wo_local(self):
|
||||
"""
|
||||
Scenario: User sets youtube_id w/o local but with server subs and one html5 link w/o
|
||||
@@ -467,7 +392,6 @@ class VideoTranscriptTest(CMSVideoBaseTest):
|
||||
And I upload the transcripts file "uk_transcripts.srt"
|
||||
Then I see status message "Timed Transcript Uploaded Successfully"
|
||||
`download_to_edit` and `upload_new_timed_transcripts` buttons are shown
|
||||
And I see value "t__eq_exist" in the field "Default Timed Transcript"
|
||||
|
||||
And I enter a "http://youtu.be/t_not_exist" source to field number 2
|
||||
Then I see status message "Timed Transcript Found"
|
||||
@@ -487,9 +411,6 @@ class VideoTranscriptTest(CMSVideoBaseTest):
|
||||
self.assertEqual(self.video.message('status'), 'Timed Transcript Uploaded Successfully')
|
||||
self.assertTrue(self.video.is_transcript_button_visible('download_to_edit'))
|
||||
self.assertTrue(self.video.is_transcript_button_visible('upload_new_timed_transcripts'))
|
||||
self.open_advanced_tab()
|
||||
self.assertTrue(self.video.verify_field_value('Default Timed Transcript', 't__eq_exist'))
|
||||
self.open_basic_tab()
|
||||
|
||||
self.video.set_url_field('http://youtu.be/t_not_exist', 2)
|
||||
self.assertEqual(self.video.message('status'), 'Timed Transcript Found')
|
||||
@@ -552,7 +473,6 @@ class VideoTranscriptTest(CMSVideoBaseTest):
|
||||
|
||||
If i enter "t_not_exist.mp4" source to field number 1 Then I see status message "Timed Transcript Found"
|
||||
`download_to_edit` and `upload_new_timed_transcripts` buttons are shown
|
||||
And I see value "t_not_exist" in the field "Default Timed Transcript"
|
||||
And I save changes And then edit the component
|
||||
|
||||
If i enter "video_name_2.mp4" source to field number 1 Then I see status message "Confirm Timed Transcript"
|
||||
@@ -566,6 +486,7 @@ class VideoTranscriptTest(CMSVideoBaseTest):
|
||||
I see button "use_existing" And I click on it
|
||||
And I see value "video_name_4" in the field "Default Timed Transcript"
|
||||
"""
|
||||
self.metadata = {'sub': 't_not_exist'}
|
||||
self._create_video_component(subtitles=True, subtitle_id='t_not_exist')
|
||||
self.edit_component()
|
||||
|
||||
@@ -573,9 +494,7 @@ class VideoTranscriptTest(CMSVideoBaseTest):
|
||||
self.assertEqual(self.video.message('status'), 'Timed Transcript Found')
|
||||
self.assertTrue(self.video.is_transcript_button_visible('download_to_edit'))
|
||||
self.assertTrue(self.video.is_transcript_button_visible('upload_new_timed_transcripts'))
|
||||
self.open_advanced_tab()
|
||||
self.assertTrue(self.video.verify_field_value('Default Timed Transcript', 't_not_exist'))
|
||||
self.open_basic_tab()
|
||||
|
||||
self.save_unit_settings()
|
||||
self.edit_component()
|
||||
|
||||
@@ -584,9 +503,6 @@ class VideoTranscriptTest(CMSVideoBaseTest):
|
||||
self.assertTrue(self.video.is_transcript_button_visible('use_existing'))
|
||||
self.video.click_button('use_existing')
|
||||
self.assertTrue(self.video.is_transcript_button_visible('upload_new_timed_transcripts'))
|
||||
self.open_advanced_tab()
|
||||
self.assertTrue(self.video.verify_field_value('Default Timed Transcript', 'video_name_2'))
|
||||
self.open_basic_tab()
|
||||
|
||||
self.video.set_url_field('video_name_3.mp4', 1)
|
||||
self.assertEqual(self.video.message('status'), 'Confirm Timed Transcript')
|
||||
@@ -596,8 +512,7 @@ class VideoTranscriptTest(CMSVideoBaseTest):
|
||||
self.assertEqual(self.video.message('status'), 'Confirm Timed Transcript')
|
||||
self.assertTrue(self.video.is_transcript_button_visible('use_existing'))
|
||||
self.video.click_button('use_existing')
|
||||
self.open_advanced_tab()
|
||||
self.assertTrue(self.video.verify_field_value('Default Timed Transcript', 'video_name_4'))
|
||||
#TODO! Incomplete test, should be completed as a part of choose transcript
|
||||
|
||||
def test_two_fields_only(self):
|
||||
"""
|
||||
@@ -622,6 +537,7 @@ class VideoTranscriptTest(CMSVideoBaseTest):
|
||||
And I click transcript button "use_existing"
|
||||
And I see value "video_name_3" in the field "Default Timed Transcript"
|
||||
"""
|
||||
self.metadata = {'sub': 't_not_exist'}
|
||||
self._create_video_component(subtitles=True, subtitle_id='t_not_exist')
|
||||
self.edit_component()
|
||||
|
||||
@@ -640,8 +556,7 @@ class VideoTranscriptTest(CMSVideoBaseTest):
|
||||
self.assertEqual(self.video.message('status'), 'Confirm Timed Transcript')
|
||||
self.assertTrue(self.video.is_transcript_button_visible('use_existing'))
|
||||
self.video.click_button('use_existing')
|
||||
self.open_advanced_tab()
|
||||
self.assertTrue(self.video.verify_field_value('Default Timed Transcript', 'video_name_3'))
|
||||
#TODO! Incomplete test, should be completed as a part of rename_transcript
|
||||
|
||||
def test_upload_subtitles(self):
|
||||
"""
|
||||
@@ -754,30 +669,6 @@ class VideoTranscriptTest(CMSVideoBaseTest):
|
||||
self.edit_component()
|
||||
self.assertEqual(self.video.message('status'), 'Timed Transcript Found')
|
||||
|
||||
def test_advanced_tab_transcript_fields(self):
|
||||
"""
|
||||
Scenario: Change transcripts field in Advanced tab
|
||||
Given I have created a Video component with subtitles "t_not_exist"
|
||||
|
||||
After I enter a "video_name_1.mp4" source to field number 1 Then I see status message "No Timed Transcript"
|
||||
Open tab "Advanced" and set value "t_not_exist" to the field "Default Timed Transcript"
|
||||
After saving the changes video captions should be visible
|
||||
When I edit the component Then I see status message "Timed Transcript Found"
|
||||
And I see value "video_name_1" in the field "Default Timed Transcript"
|
||||
"""
|
||||
self._create_video_component(subtitles=True, subtitle_id='t_not_exist')
|
||||
self.edit_component()
|
||||
|
||||
self.video.set_url_field('video_name_1.mp4', 1)
|
||||
self.assertEqual(self.video.message('status'), 'No Timed Transcript')
|
||||
self.open_advanced_tab()
|
||||
self.video.set_field_value('Default Timed Transcript', 't_not_exist')
|
||||
self.save_unit_settings()
|
||||
self.assertTrue(self.video.is_captions_visible())
|
||||
self.edit_component()
|
||||
self.assertEqual(self.video.message('status'), 'Timed Transcript Found')
|
||||
self.assertTrue(self.video.verify_field_value('Default Timed Transcript', 'video_name_1'))
|
||||
|
||||
def test_non_ascii_transcripts(self):
|
||||
"""
|
||||
Scenario: Check non-ascii (chinese) transcripts
|
||||
@@ -797,33 +688,6 @@ class VideoTranscriptTest(CMSVideoBaseTest):
|
||||
self.save_unit_settings()
|
||||
self.assertTrue(self.video.is_captions_visible())
|
||||
|
||||
def test_module_metadata_save(self):
|
||||
"""
|
||||
Scenario: Check saving module metadata on switching between tabs
|
||||
Given I have created a Video component with subtitles "t_not_exist"
|
||||
|
||||
After I enter a "video_name_1.mp4" source to field number 1 I should see status message "No Timed Transcript"
|
||||
Open tab "Advanced" and set value "t_not_exist" to the field "Default Timed Transcript"
|
||||
When I open tab "Basic" Then I see status message "Timed Transcript Found"
|
||||
After saving the changes video captions should be visible
|
||||
When I edit the component I should see status message "Timed Transcript Found"
|
||||
And I see value "video_name_1" in the field "Default Timed Transcript"
|
||||
"""
|
||||
self._create_video_component(subtitles=True, subtitle_id='t_not_exist')
|
||||
self.edit_component()
|
||||
|
||||
self.video.set_url_field('video_name_1.mp4', 1)
|
||||
self.assertEqual(self.video.message('status'), 'No Timed Transcript')
|
||||
self.open_advanced_tab()
|
||||
self.video.set_field_value('Default Timed Transcript', 't_not_exist')
|
||||
self.open_basic_tab()
|
||||
self.assertEqual(self.video.message('status'), 'Timed Transcript Found')
|
||||
self.save_unit_settings()
|
||||
self.assertTrue(self.video.is_captions_visible())
|
||||
self.edit_component()
|
||||
self.assertEqual(self.video.message('status'), 'Timed Transcript Found')
|
||||
self.assertTrue(self.video.verify_field_value('Default Timed Transcript', 'video_name_1'))
|
||||
|
||||
def test_upload_subtitles_w_different_names2(self):
|
||||
"""
|
||||
Scenario: Uploading subtitles for file with periods in it does not effect the uploaded transcript in anyway
|
||||
|
||||
@@ -1249,7 +1249,6 @@ class TestEditorSavedMethod(BaseTestXmodule):
|
||||
# calling editor_saved will generate new file subs_video.srt.sjson for html5_sources
|
||||
item.editor_saved(self.user, old_metadata, None)
|
||||
self.assertIsInstance(Transcript.get_asset(item.location, 'subs_3_yD_cEKoCk.srt.sjson'), StaticContent)
|
||||
self.assertIsInstance(Transcript.get_asset(item.location, 'subs_video.srt.sjson'), StaticContent)
|
||||
|
||||
@ddt.data(ModuleStoreEnum.Type.mongo, ModuleStoreEnum.Type.split)
|
||||
def test_editor_saved_when_youtube_and_html5_subs_exist(self, default_store):
|
||||
|
||||
Reference in New Issue
Block a user