diff --git a/cms/djangoapps/contentstore/features/course-export.feature b/cms/djangoapps/contentstore/features/course-export.feature
deleted file mode 100644
index 581992e6e4..0000000000
--- a/cms/djangoapps/contentstore/features/course-export.feature
+++ /dev/null
@@ -1,12 +0,0 @@
-@shard_1
-Feature: Course export
- I want to export my course to a tar.gz file to share with others or check into source control
-
- # Disabling due to failure on master. 05/21/2014 TODO: fix
- # Scenario: User is directed to problem with & in it when export fails
- # Given I am in Studio editing a new unit
- # When I add a "Blank Advanced Problem" "Advanced Problem" component
- # And I edit and enter an ampersand
- # And I export the course
- # Then I get an error dialog
- # And I can click to go to the unit with the error
diff --git a/cms/djangoapps/contentstore/features/course-export.py b/cms/djangoapps/contentstore/features/course-export.py
deleted file mode 100644
index ae30100382..0000000000
--- a/cms/djangoapps/contentstore/features/course-export.py
+++ /dev/null
@@ -1,71 +0,0 @@
-# pylint: disable=missing-docstring
-# pylint: disable=redefined-outer-name
-# pylint: disable=unused-argument
-
-from lettuce import world, step
-from component_settings_editor_helpers import enter_xml_in_advanced_problem
-from nose.tools import assert_true, assert_equal
-from contentstore.utils import reverse_usage_url
-
-
-@step('I go to the export page$')
-def i_go_to_the_export_page(step):
- world.click_tools()
- link_css = 'li.nav-course-tools-export a'
- world.css_click(link_css)
-
-
-@step('I export the course$')
-def i_export_the_course(step):
- step.given('I go to the export page')
- world.css_click('a.action-export')
-
-
-@step('I edit and enter bad XML$')
-def i_enter_bad_xml(step):
- enter_xml_in_advanced_problem(
- step,
- """
Smallest Canvas
-
You want to make the smallest canvas you can.
-
-
-
-
-
-
- """
- )
-
-
-@step('I edit and enter an ampersand$')
-def i_enter_an_ampersand(step):
- enter_xml_in_advanced_problem(step, "&")
-
-
-@step('I get an error dialog$')
-def get_an_error_dialog(step):
- assert_true(world.is_css_present("div.prompt.error"))
-
-
-@step('I can click to go to the unit with the error$')
-def i_click_on_error_dialog(step):
- world.css_click("button.action-primary")
-
- problem_string = unicode(world.scenario_dict['COURSE'].id.make_usage_key("problem", 'ignore'))
- problem_string = u"Problem {}".format(problem_string[:problem_string.rfind('ignore')])
- css_selector = "span.inline-error"
- world.wait_for_visible(css_selector)
- assert_true(
- world.css_html(css_selector).startswith(problem_string),
- u"{} does not start with {}".format(
- world.css_html(css_selector), problem_string
- ))
- # we don't know the actual ID of the vertical. So just check that we did go to a
- # vertical page in the course (there should only be one).
- vertical_usage_key = world.scenario_dict['COURSE'].id.make_usage_key("vertical", "test")
- vertical_url = reverse_usage_url('container_handler', vertical_usage_key)
- # Remove the trailing "/None" from the URL - we don't know the course ID, so we just want to
- # check that we visited a vertical URL.
- if vertical_url.endswith("/test") or vertical_url.endswith("@test"):
- vertical_url = vertical_url[:-5]
- assert_equal(1, world.browser.url.count(vertical_url))
diff --git a/cms/djangoapps/contentstore/features/problem-editor.feature b/cms/djangoapps/contentstore/features/problem-editor.feature
index 0891e9de99..026504ca7f 100644
--- a/cms/djangoapps/contentstore/features/problem-editor.feature
+++ b/cms/djangoapps/contentstore/features/problem-editor.feature
@@ -101,27 +101,3 @@ Feature: CMS.Problem Editor
Then I can see Reply to Annotation link
And I see that page has scrolled "down" when I click on "annotatable-reply" link
And I see that page has scrolled "up" when I click on "annotation-return" link
-
- # Disabled 11/13/2013 after failing in master
- # The screenshot showed that the LaTeX editor had the text "hi",
- # but Selenium timed out waiting for the text to appear.
- # It also caused later tests to fail with "UnexpectedAlertPresent"
- #
- # This feature will work in Firefox only when Firefox is the active window
- # IE will not interact with the high level source in sauce labs
- #@skip_internetexplorer
- #Scenario: High Level source is persisted for LaTeX problem (bug STUD-280)
- # Given I have created a LaTeX Problem
- # When I edit and compile the High Level Source
- # Then my change to the High Level Source is persisted
- # And when I view the High Level Source I see my changes
-
- # Disabled 10/28/13 due to flakiness observed in master
- # Scenario: Exceptions don't cause problem to be uneditable (bug STUD-786)
- #Given I have an empty course
- #And I go to the import page
- #And I import the file "get_html_exception_test.tar.gz"
- #When I go to the unit "Probability and BMI"
- #And I click on "edit a draft"
- #Then I see a message that says "We're having trouble rendering your component"
- #And I can edit the problem
diff --git a/cms/djangoapps/contentstore/features/video.feature b/cms/djangoapps/contentstore/features/video.feature
deleted file mode 100644
index 59dc89f6eb..0000000000
--- a/cms/djangoapps/contentstore/features/video.feature
+++ /dev/null
@@ -1,57 +0,0 @@
-@shard_2 @requires_stub_youtube
-Feature: CMS Video Component
- As a course author, I want to be able to view my created videos in Studio
-
- # 2
- # Disabled 2/19/14 after intermittent failures in master
- #Scenario: Check that position is stored on page refresh, position within start-end range
- # Given I have created a Video component with subtitles
- # And Make sure captions are closed
- # And I edit the component
- # And I open tab "Advanced"
- # And I set value "00:00:12" to the field "Video Start Time"
- # And I set value "00:00:24" to the field "Video Stop Time"
- # And I save changes
- # And I click video button "play"
- # Then I see a range on slider
- # Then I seek video to "16" seconds
- # And I click video button "pause"
- # And I reload the page
- # And I click video button "play"
- # Then I see video starts playing from "0:16" position
-
- # 3
-# Disabled 2/18/14 after intermittent failures in master
-# Scenario: Check that position is stored on page refresh, position before start-end range
-# Given I have created a Video component with subtitles
-# And Make sure captions are closed
-# And I edit the component
-# And I open tab "Advanced"
-# And I set value "00:00:12" to the field "Video Start Time"
-# And I set value "00:00:24" to the field "Video Stop Time"
-# And I save changes
-# And I click video button "play"
-# Then I see a range on slider
-# Then I seek video to "5" seconds
-# And I click video button "pause"
-# And I reload the page
-# And I click video button "play"
-# Then I see video starts playing from "0:12" position
-
- # 4
-# Disabled 2/18/14 after intermittent failures in master
-# Scenario: Check that position is stored on page refresh, position after start-end range
-# Given I have created a Video component with subtitles
-# And Make sure captions are closed
-# And I edit the component
-# And I open tab "Advanced"
-# And I set value "00:00:12" to the field "Video Start Time"
-# And I set value "00:00:24" to the field "Video Stop Time"
-# And I save changes
-# And I click video button "play"
-# Then I see a range on slider
-# Then I seek video to "30" seconds
-# And I click video button "pause"
-# And I reload the page
-# And I click video button "play"
-# Then I see video starts playing from "0:12" position
diff --git a/cms/djangoapps/contentstore/features/video_editor.py b/cms/djangoapps/contentstore/features/video_editor.py
deleted file mode 100644
index cf96e099c9..0000000000
--- a/cms/djangoapps/contentstore/features/video_editor.py
+++ /dev/null
@@ -1,321 +0,0 @@
-# -*- coding: utf-8 -*-
-# disable missing docstring
-# pylint: disable=missing-docstring
-
-import requests
-from lettuce import world, step
-from nose.tools import assert_true, assert_equal, assert_in, assert_not_equal
-from terrain.steps import reload_the_page
-from django.conf import settings
-from common import upload_file, attach_file
-
-TEST_ROOT = settings.COMMON_TEST_DATA_ROOT
-
-DISPLAY_NAME = "Component Display Name"
-NATIVE_LANGUAGES = {lang: label for lang, label in settings.LANGUAGES if len(lang) == 2}
-LANGUAGES = {
- lang: NATIVE_LANGUAGES.get(lang, display)
- for lang, display in settings.ALL_LANGUAGES
-}
-
-LANGUAGES.update({
- 'table': 'Table of Contents'
-})
-
-TRANSLATION_BUTTONS = {
- 'add': '.metadata-video-translations .create-action',
- 'upload': '.metadata-video-translations .upload-action',
- 'download': '.metadata-video-translations .download-action',
- 'remove': '.metadata-video-translations .remove-action',
- 'clear': '.metadata-video-translations .setting-clear',
-}
-
-VIDEO_MENUS = {
- 'language': '.lang .menu',
-}
-
-
-class RequestHandlerWithSessionId(object):
- def get(self, url):
- """
- Sends a request.
- """
- kwargs = dict()
-
- session_id = [{i['name']:i['value']} for i in world.browser.cookies.all() if i['name'] == u'sessionid']
- if session_id:
- kwargs.update({
- 'cookies': session_id[0]
- })
-
- response = requests.get(url, **kwargs)
- self.response = response
- self.status_code = response.status_code
- self.headers = response.headers
- self.content = response.content
-
- return self
-
- def is_success(self):
- """
- Returns `True` if the response was succeed, otherwise, returns `False`.
- """
- if self.status_code < 400:
- return True
- return False
-
- def check_header(self, name, value):
- """
- Returns `True` if the response header exist and has appropriate value,
- otherwise, returns `False`.
- """
- if value in self.headers.get(name, ''):
- return True
- return False
-
-
-def success_upload_file(filename):
- upload_file(filename, sub_path="uploads/")
- world.css_has_text('#upload_confirm', 'Success!')
- world.is_css_not_present('.wrapper-modal-window-assetupload', wait_time=30)
-
-
-def get_translations_container():
- return world.browser.find_by_xpath('//label[text()="Transcript Languages"]/following-sibling::div')
-
-
-def get_setting_container(lang_code):
- try:
- get_xpath = lambda value: './/descendant::a[@data-lang="{}" and contains(@class,"remove-setting")]/parent::*'.format(value)
- return get_translations_container().find_by_xpath(get_xpath(lang_code)).first
- except Exception:
- return None
-
-
-def get_last_dropdown():
- return get_translations_container().find_by_xpath('.//descendant::select[last()]').last
-
-
-def choose_option(dropdown, value):
- dropdown.find_by_value(value)[0].click()
-
-
-def choose_new_lang(lang_code):
- world.css_click(TRANSLATION_BUTTONS['add'])
- choose_option(get_last_dropdown(), lang_code)
- assert_equal(get_last_dropdown().value, lang_code, "Option with provided value is not available or was not selected")
-
-
-def open_menu(menu):
- world.browser.execute_script("$('{selector}').parent().addClass('is-opened')".format(
- selector=VIDEO_MENUS[menu]
- ))
-
-
-@step('I have set "transcript display" to (.*)$')
-def set_show_captions(step, setting):
- # Prevent cookies from overriding course settings
- world.browser.cookies.delete('hide_captions')
-
- world.edit_component()
- world.select_editor_tab('Advanced')
- world.browser.select('Show Transcript', setting)
- world.save_component()
-
-
-@step('when I view the video it (.*) show the captions$')
-def shows_captions(_step, show_captions):
- world.wait_for_js_variable_truthy("Video")
- world.wait(0.5)
- if show_captions == 'does not':
- assert_true(world.is_css_present('div.video.closed'))
- else:
- assert_true(world.is_css_not_present('div.video.closed'))
-
- # Prevent cookies from overriding course settings
- world.browser.cookies.delete('hide_captions')
- world.browser.cookies.delete('current_player_mode')
-
-
-@step('I see the correct video settings and default values$')
-def correct_video_settings(_step):
- expected_entries = [
- # basic
- [DISPLAY_NAME, 'Video', False],
- ['Default Video URL', 'http://youtu.be/3_yD_cEKoCk, , ', False],
-
- # advanced
- [DISPLAY_NAME, 'Video', False],
- ['Default Timed Transcript', '', False],
- ['Download Transcript Allowed', 'False', False],
- ['Downloadable Transcript URL', '', False],
- ['Show Transcript', 'True', False],
- ['Transcript Languages', '', False],
- ['Upload Handout', '', False],
- ['Video Available on Web Only', 'False', False],
- ['Video Download Allowed', 'False', False],
- ['Video File URLs', '', False],
- ['Video Start Time', '00:00:00', False],
- ['Video Stop Time', '00:00:00', False],
- ['YouTube ID', '3_yD_cEKoCk', False],
- ['YouTube ID for .75x speed', '', False],
- ['YouTube ID for 1.25x speed', '', False],
- ['YouTube ID for 1.5x speed', '', False]
- ]
- world.verify_all_setting_entries(expected_entries)
-
-
-@step('my video display name change is persisted on save$')
-def video_name_persisted(step):
- world.save_component()
- reload_the_page(step)
- world.wait_for_xmodule()
- world.edit_component()
-
- world.verify_setting_entry(
- world.get_setting_entry(DISPLAY_NAME),
- DISPLAY_NAME, '3.4', True
- )
-
-
-@step('I can modify video display name')
-def i_can_modify_video_display_name(_step):
- index = world.get_setting_entry_index(DISPLAY_NAME)
- world.set_field_value(index, '3.4')
- world.verify_setting_entry(world.get_setting_entry(DISPLAY_NAME), DISPLAY_NAME, '3.4', True)
-
-
-@step('I upload transcript file(?:s)?:$')
-def upload_transcript(step):
- input_hidden = '.metadata-video-translations .input'
- # Number of previously added translations
- initial_index = len(world.css_find(TRANSLATION_BUTTONS['download']))
-
- if step.hashes:
- for i, item in enumerate(step.hashes):
- lang_code = item['lang_code']
- filename = item['filename']
- index = initial_index + i
-
- choose_new_lang(lang_code)
-
- expected_text = world.css_text(TRANSLATION_BUTTONS['upload'], index=index)
- assert_equal(expected_text, "Upload")
- assert_equal(world.css_find(input_hidden).last.value, "")
-
- world.css_click(TRANSLATION_BUTTONS['upload'], index=index)
- success_upload_file(filename)
-
- world.wait_for_visible(TRANSLATION_BUTTONS['download'], index=index)
- assert_equal(world.css_find(TRANSLATION_BUTTONS['upload']).last.text, "Replace")
- assert_equal(world.css_find(input_hidden).last.value, filename)
-
-
-@step('I try to upload transcript file "([^"]*)"$')
-def try_to_upload_transcript(step, filename):
- world.css_click(TRANSLATION_BUTTONS['upload'])
- attach_file(filename, 'uploads/')
-
-
-@step('I upload transcript file "([^"]*)" for "([^"]*)" language code$')
-def upload_transcript_for_lang(step, filename, lang_code):
- get_xpath = lambda value: './/div/a[contains(@class, "upload-action")]'.format(value)
- container = get_setting_container(lang_code)
-
- # If translation isn't uploaded, prepare drop-down and try to find container again
- choose_new_lang(lang_code)
- container = get_setting_container(lang_code)
-
- button = container.find_by_xpath(get_xpath(lang_code)).first
- button.click()
- success_upload_file(filename)
-
-
-@step('I replace transcript file for "([^"]*)" language code by "([^"]*)"$')
-def replace_transcript_for_lang(step, lang_code, filename):
- get_xpath = lambda value: './/div/a[contains(@class, "upload-action")]'.format(value)
- container = get_setting_container(lang_code)
-
- button = container.find_by_xpath(get_xpath(lang_code)).first
- button.click()
- success_upload_file(filename)
-
-
-@step('I see validation error "([^"]*)"$')
-def verify_validation_error_message(step, error_message):
- assert_equal(world.css_text('#upload_error'), error_message)
-
-
-@step('I can download transcript for "([^"]*)" language code, that contains text "([^"]*)"$')
-def i_can_download_transcript(_step, lang_code, text):
- MIME_TYPE = 'application/x-subrip'
- get_xpath = lambda value: './/div/a[contains(text(), "Download")]'.format(value)
- container = get_setting_container(lang_code)
- assert container
- button = container.find_by_xpath(get_xpath(lang_code)).first
- url = button['href']
- request = RequestHandlerWithSessionId()
- assert_true(request.get(url).is_success())
- assert_true(request.check_header('content-type', MIME_TYPE))
- assert_in(text.encode('utf-8'), request.content)
-
-
-@step('I remove translation for "([^"]*)" language code$')
-def i_can_remove_transcript(_step, lang_code):
- get_xpath = lambda value: './/descendant::a[@data-lang="{}" and contains(@class,"remove-setting")]'.format(value)
- container = get_setting_container(lang_code)
- assert container
- button = container.find_by_xpath(get_xpath(lang_code)).first
- button.click()
-
-
-@step('I see translations for "([^"]*)"$')
-def verify_translations(_step, lang_codes_string):
- expected = [l.strip() for l in lang_codes_string.split(',')]
- actual = [l['data-lang'] for l in world.css_find('.metadata-video-translations .remove-setting')]
- assert_equal(set(expected), set(actual))
-
-
-@step('I do not see translations$')
-def no_translations(_step):
- assert_true(world.is_css_not_present('.metadata-video-translations .remove-setting'))
-
-
-@step('I confirm prompt$')
-def confirm_prompt(_step):
- world.confirm_studio_prompt()
-
-
-@step('I (cannot )?choose "([^"]*)" language code$')
-def i_choose_lang_code(_step, cannot, lang_code):
- choose_option(get_last_dropdown(), lang_code)
- if cannot:
- assert_not_equal(get_last_dropdown().value, lang_code, "Option with provided value was selected, but shouldn't")
- else:
- assert_equal(get_last_dropdown().value, lang_code, "Option with provided value is not available or was not selected")
-
-
-@step('I click button "([^"]*)"$')
-def click_button(_step, button):
- world.css_click(TRANSLATION_BUTTONS[button.lower()])
-
-
-@step('video language menu has "([^"]*)" translations$')
-def i_see_correct_langs(_step, langs):
- menu_name = 'language'
- open_menu(menu_name)
- items = world.css_find(VIDEO_MENUS[menu_name] + ' li')
- translations = {t.strip(): LANGUAGES[t.strip()] for t in langs.split(',')}
-
- assert_equal(len(translations), len(items))
- for lang_code, label in translations.items():
- assert_true(any([i.text == label for i in items]))
- assert_true(any([i['data-lang-code'] == lang_code for i in items]))
-
-
-@step('video language with code "([^"]*)" at position "(\d+)"$')
-def i_see_lang_at_position(_step, code, position):
- menu_name = 'language'
- open_menu(menu_name)
- item = world.css_find(VIDEO_MENUS[menu_name] + ' li')[int(position)]
- assert_equal(item['data-lang-code'], code)
diff --git a/cms/djangoapps/contentstore/features/video_handout.py b/cms/djangoapps/contentstore/features/video_handout.py
deleted file mode 100644
index 233ea30b56..0000000000
--- a/cms/djangoapps/contentstore/features/video_handout.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# -*- coding: utf-8 -*-
-# disable missing docstring
-# pylint: disable=missing-docstring
-
-from lettuce import world, step
-from nose.tools import assert_true
-from video_editor import RequestHandlerWithSessionId, success_upload_file
-
-
-@step('I (?:upload|replace) handout file(?: by)? "([^"]*)"$')
-def upload_handout(step, filename):
- world.css_click('.wrapper-comp-setting.file-uploader .upload-action')
- success_upload_file(filename)
-
-
-@step('I can download handout file( in editor)? with mime type "([^"]*)"$')
-def i_can_download_handout_with_mime_type(_step, is_editor, mime_type):
- if is_editor:
- selector = '.wrapper-comp-setting.file-uploader .download-action'
- else:
- selector = '.video-handout.video-download-button a'
-
- button = world.css_find(selector).first
- url = button['href']
- request = RequestHandlerWithSessionId()
- assert_true(request.get(url).is_success())
- assert_true(request.check_header('content-type', mime_type))
-
-
-@step('I clear handout$')
-def clear_handout(_step):
- world.css_click('.wrapper-comp-setting.file-uploader .setting-clear')
-
-
-@step('I have created a Video component with handout file "([^"]*)"')
-def create_video_with_handout(_step, filename):
- _step.given('I have created a Video component')
- _step.given('I edit the component')
- _step.given('I open tab "Advanced"')
- _step.given('I upload handout file "{0}"'.format(filename))
diff --git a/lms/djangoapps/courseware/tests/test_video_mongo.py b/lms/djangoapps/courseware/tests/test_video_mongo.py
index a617a4b94c..31c008d8f0 100644
--- a/lms/djangoapps/courseware/tests/test_video_mongo.py
+++ b/lms/djangoapps/courseware/tests/test_video_mongo.py
@@ -1159,7 +1159,7 @@ class TestVideoDescriptorStudentViewJson(TestCase):
Tests retrieving a video that is not stored in VAL.
"""
self.video.edx_video_id = self.TEST_EDX_VIDEO_ID
- # The video is not is VAL so in contexts that do and don't allow cache misses we should always get a fallback
+ # The video is not in VAL so in contexts that do and don't allow cache misses we should always get a fallback
result = self.get_result(allow_cache_miss)
self.verify_result_with_fallback_and_youtube(result)