From bfe10720c60c902056825ab193cf4f820fdd81f5 Mon Sep 17 00:00:00 2001
From: Michael Youngstrom <youngstrom.m@husky.neu.edu>
Date: Fri, 12 Apr 2019 12:57:59 -0400
Subject: [PATCH] Remove lettuce infrastructure

---
 .../contentstore/features/__init__.py         |   0
 .../features/advanced_settings.py             |  25 -
 .../contentstore/features/common.py           | 406 -----------
 .../contentstore/features/component.py        | 181 -----
 .../component_settings_editor_helpers.py      | 270 -------
 .../contentstore/features/course-settings.py  | 170 -----
 .../contentstore/features/course_import.py    |  27 -
 .../contentstore/features/html-editor.feature | 128 ----
 .../contentstore/features/html-editor.py      | 306 --------
 .../features/problem-editor.feature           |  66 --
 .../contentstore/features/problem-editor.py   | 391 ----------
 .../contentstore/features/signup.py           |  71 --
 cms/envs/acceptance.py                        | 149 ----
 cms/envs/acceptance_docker.py                 |  61 --
 cms/envs/test.py                              |   1 -
 common/djangoapps/terrain/__init__.py         |  14 -
 common/djangoapps/terrain/browser.py          | 288 --------
 common/djangoapps/terrain/course_helpers.py   |  77 --
 common/djangoapps/terrain/factories.py        |  30 -
 common/djangoapps/terrain/setup_prereqs.py    | 162 -----
 common/djangoapps/terrain/steps.py            | 244 -------
 common/djangoapps/terrain/ui_helpers.py       | 681 ------------------
 .../acceptance/tests/lms/test_lms_problems.py |   2 -
 .../tests/lms/test_problem_types.py           |   2 -
 common/test/db_cache/lettuce.db               | Bin 1842176 -> 0 bytes
 .../lettuce_student_module_history.db         | Bin 41984 -> 0 bytes
 docs/testing.rst                              | 114 +--
 .../courseware/features/__init__.py           |   0
 lms/djangoapps/courseware/features/common.py  | 240 ------
 .../courseware/features/courseware.py         |  11 -
 .../courseware/features/courseware_common.py  |  46 --
 lms/djangoapps/courseware/features/events.py  |  82 ---
 .../courseware/features/lti.feature           | 150 ----
 lms/djangoapps/courseware/features/lti.py     | 345 ---------
 .../courseware/features/problems_setup.py     | 460 ------------
 .../courseware/features/registration.py       |  61 --
 lms/djangoapps/courseware/module_render.py    |  17 +-
 .../instructor/features/__init__.py           |   0
 lms/djangoapps/instructor/features/common.py  | 136 ----
 .../instructor/features/data_download.py      |  94 ---
 lms/envs/acceptance.py                        | 215 ------
 lms/envs/acceptance_docker.py                 |  82 ---
 lms/envs/test.py                              |   3 -
 openedx/core/lib/tests/tools.py               |  44 --
 pavelib/__init__.py                           |   3 +-
 pavelib/acceptance_test.py                    |  65 --
 pavelib/utils/envs.py                         |   5 +-
 pavelib/utils/test/suites/__init__.py         |   1 -
 pavelib/utils/test/suites/acceptance_suite.py | 161 -----
 requirements/constraints.txt                  |   3 -
 requirements/edx/base.txt                     |   2 +-
 requirements/edx/development.txt              |  14 +-
 requirements/edx/testing.in                   |   4 -
 requirements/edx/testing.txt                  |  16 +-
 scripts/Jenkinsfiles/lettuce                  | 151 ----
 scripts/dependencies/testing.py               |   2 -
 scripts/generic-ci-tests.sh                   |  12 -
 57 files changed, 9 insertions(+), 6282 deletions(-)
 delete mode 100644 cms/djangoapps/contentstore/features/__init__.py
 delete mode 100644 cms/djangoapps/contentstore/features/advanced_settings.py
 delete mode 100644 cms/djangoapps/contentstore/features/common.py
 delete mode 100644 cms/djangoapps/contentstore/features/component.py
 delete mode 100644 cms/djangoapps/contentstore/features/component_settings_editor_helpers.py
 delete mode 100644 cms/djangoapps/contentstore/features/course-settings.py
 delete mode 100644 cms/djangoapps/contentstore/features/course_import.py
 delete mode 100644 cms/djangoapps/contentstore/features/html-editor.feature
 delete mode 100644 cms/djangoapps/contentstore/features/html-editor.py
 delete mode 100644 cms/djangoapps/contentstore/features/problem-editor.feature
 delete mode 100644 cms/djangoapps/contentstore/features/problem-editor.py
 delete mode 100644 cms/djangoapps/contentstore/features/signup.py
 delete mode 100644 cms/envs/acceptance.py
 delete mode 100644 cms/envs/acceptance_docker.py
 delete mode 100644 common/djangoapps/terrain/browser.py
 delete mode 100644 common/djangoapps/terrain/course_helpers.py
 delete mode 100644 common/djangoapps/terrain/factories.py
 delete mode 100644 common/djangoapps/terrain/setup_prereqs.py
 delete mode 100644 common/djangoapps/terrain/steps.py
 delete mode 100644 common/djangoapps/terrain/ui_helpers.py
 delete mode 100644 common/test/db_cache/lettuce.db
 delete mode 100644 common/test/db_cache/lettuce_student_module_history.db
 delete mode 100644 lms/djangoapps/courseware/features/__init__.py
 delete mode 100644 lms/djangoapps/courseware/features/common.py
 delete mode 100644 lms/djangoapps/courseware/features/courseware.py
 delete mode 100644 lms/djangoapps/courseware/features/courseware_common.py
 delete mode 100644 lms/djangoapps/courseware/features/events.py
 delete mode 100644 lms/djangoapps/courseware/features/lti.feature
 delete mode 100644 lms/djangoapps/courseware/features/lti.py
 delete mode 100644 lms/djangoapps/courseware/features/problems_setup.py
 delete mode 100644 lms/djangoapps/courseware/features/registration.py
 delete mode 100644 lms/djangoapps/instructor/features/__init__.py
 delete mode 100644 lms/djangoapps/instructor/features/common.py
 delete mode 100644 lms/djangoapps/instructor/features/data_download.py
 delete mode 100644 lms/envs/acceptance.py
 delete mode 100644 lms/envs/acceptance_docker.py
 delete mode 100644 openedx/core/lib/tests/tools.py
 delete mode 100644 pavelib/acceptance_test.py
 delete mode 100644 pavelib/utils/test/suites/acceptance_suite.py
 delete mode 100644 scripts/Jenkinsfiles/lettuce

diff --git a/cms/djangoapps/contentstore/features/__init__.py b/cms/djangoapps/contentstore/features/__init__.py
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/cms/djangoapps/contentstore/features/advanced_settings.py b/cms/djangoapps/contentstore/features/advanced_settings.py
deleted file mode 100644
index 63d63d37612..00000000000
--- a/cms/djangoapps/contentstore/features/advanced_settings.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# pylint: disable=missing-docstring
-# pylint: disable=redefined-outer-name
-
-from lettuce import world
-from cms.djangoapps.contentstore.features.common import press_the_notification_button, type_in_codemirror
-
-KEY_CSS = '.key h3.title'
-ADVANCED_MODULES_KEY = "Advanced Module List"
-
-
-def get_index_of(expected_key):
-    for i, element in enumerate(world.css_find(KEY_CSS)):
-        # Sometimes get stale reference if I hold on to the array of elements
-        key = world.css_value(KEY_CSS, index=i)
-        if key == expected_key:
-            return i
-
-    return -1
-
-
-def change_value(step, key, new_value):
-    index = get_index_of(key)
-    type_in_codemirror(index, new_value)
-    press_the_notification_button(step, "Save")
-    world.wait_for_ajax_complete()
diff --git a/cms/djangoapps/contentstore/features/common.py b/cms/djangoapps/contentstore/features/common.py
deleted file mode 100644
index 845d0df56c4..00000000000
--- a/cms/djangoapps/contentstore/features/common.py
+++ /dev/null
@@ -1,406 +0,0 @@
-# pylint: disable=missing-docstring
-# pylint: disable=no-member
-# pylint: disable=redefined-outer-name
-
-import os
-from logging import getLogger
-
-from django.conf import settings
-from lettuce import step, world
-from selenium.webdriver.common.keys import Keys
-
-from openedx.core.lib.tests.tools import assert_in  # pylint: disable=no-name-in-module
-from student import auth
-from student.models import get_user
-from student.roles import CourseInstructorRole, CourseStaffRole, GlobalStaff
-from student.tests.factories import AdminFactory
-from terrain.browser import reset_data
-
-logger = getLogger(__name__)
-
-
-TEST_ROOT = settings.COMMON_TEST_DATA_ROOT
-
-
-@step('I (?:visit|access|open) the Studio homepage$')
-def i_visit_the_studio_homepage(_step):
-    # To make this go to port 8001, put
-    # LETTUCE_SERVER_PORT = 8001
-    # in your settings.py file.
-    world.visit('/')
-    signin_css = 'a.action-signin'
-    assert world.is_css_present(signin_css)
-
-
-@step('I am logged into Studio$')
-def i_am_logged_into_studio(_step):
-    log_into_studio()
-
-
-@step('I confirm the alert$')
-def i_confirm_with_ok(_step):
-    world.browser.get_alert().accept()
-
-
-@step(u'I press the "([^"]*)" delete icon$')
-def i_press_the_category_delete_icon(_step, category):
-    if category == 'section':
-        css = 'a.action.delete-section-button'
-    elif category == 'subsection':
-        css = 'a.action.delete-subsection-button'
-    else:
-        assert False, u'Invalid category: %s' % category
-    world.css_click(css)
-
-
-@step('I have opened a new course in Studio$')
-def i_have_opened_a_new_course(_step):
-    open_new_course()
-
-
-@step('I have populated a new course in Studio$')
-def i_have_populated_a_new_course(_step):
-    world.clear_courses()
-    course = world.CourseFactory.create()
-    world.scenario_dict['COURSE'] = course
-    section = world.ItemFactory.create(parent_location=course.location)
-    world.ItemFactory.create(
-        parent_location=section.location,
-        category='sequential',
-        display_name='Subsection One',
-    )
-    user = create_studio_user(is_staff=False)
-    add_course_author(user, course)
-
-    log_into_studio()
-
-    world.css_click('a.course-link')
-    world.wait_for_js_to_load()
-
-
-@step('(I select|s?he selects) the new course')
-def select_new_course(_step, _whom):
-    course_link_css = 'a.course-link'
-    world.css_click(course_link_css)
-
-
-@step(u'I press the "([^"]*)" notification button$')
-def press_the_notification_button(_step, name):
-
-    # Because the notification uses a CSS transition,
-    # Selenium will always report it as being visible.
-    # This makes it very difficult to successfully click
-    # the "Save" button at the UI level.
-    # Instead, we use JavaScript to reliably click
-    # the button.
-    btn_css = u'div#page-notification button.action-%s' % name.lower()
-    world.trigger_event(btn_css, event='focus')
-    world.browser.execute_script("$('{}').click()".format(btn_css))
-    world.wait_for_ajax_complete()
-
-
-@step('I change the "(.*)" field to "(.*)"$')
-def i_change_field_to_value(_step, field, value):
-    field_css = '#%s' % '-'.join([s.lower() for s in field.split()])
-    ele = world.css_find(field_css).first
-    ele.fill(value)
-    ele._element.send_keys(Keys.ENTER)  # pylint: disable=protected-access
-
-
-@step('I reset the database')
-def reset_the_db(_step):
-    """
-    When running Lettuce tests using examples (i.e. "Confirmation is
-    shown on save" in course-settings.feature), the normal hooks
-    aren't called between examples. reset_data should run before each
-    scenario to flush the test database. When this doesn't happen we
-    get errors due to trying to insert a non-unique entry. So instead,
-    we delete the database manually. This has the effect of removing
-    any users and courses that have been created during the test run.
-    """
-    reset_data(None)
-
-
-@step('I see a confirmation that my changes have been saved')
-def i_see_a_confirmation(_step):
-    confirmation_css = '#alert-confirmation'
-    assert world.is_css_present(confirmation_css)
-
-
-def open_new_course():
-    world.clear_courses()
-    create_studio_user()
-    log_into_studio()
-    create_a_course()
-
-
-def create_studio_user(
-        uname='robot',
-        email='robot+studio@edx.org',
-        password='test',
-        is_staff=False):
-    studio_user = world.UserFactory(
-        username=uname,
-        email=email,
-        password=password,
-        is_staff=is_staff)
-
-    registration = world.RegistrationFactory(user=studio_user)
-    registration.register(studio_user)
-    registration.activate()
-
-    return studio_user
-
-
-def fill_in_course_info(
-        name='Robot Super Course',
-        org='MITx',
-        num='101',
-        run='2013_Spring'):
-    world.css_fill('.new-course-name', name)
-    world.css_fill('.new-course-org', org)
-    world.css_fill('.new-course-number', num)
-    world.css_fill('.new-course-run', run)
-
-
-def log_into_studio(
-        uname='robot',
-        email='robot+studio@edx.org',
-        password='test',
-        name='Robot Studio'):
-
-    world.log_in(username=uname, password=password, email=email, name=name)
-    # Navigate to the studio dashboard
-    world.visit('/')
-    assert_in(uname, world.css_text('span.account-username', timeout=10))
-
-
-def add_course_author(user, course):
-    """
-    Add the user to the instructor group of the course
-    so they will have the permissions to see it in studio
-    """
-    global_admin = AdminFactory()
-    for role in (CourseStaffRole, CourseInstructorRole):
-        auth.add_users(global_admin, role(course.id), user)
-
-
-def create_a_course():
-    course = world.CourseFactory.create(org='MITx', course='999', display_name='Robot Super Course')
-    world.scenario_dict['COURSE'] = course
-
-    user = world.scenario_dict.get("USER")
-    if not user:
-        user = get_user('robot+studio@edx.org')
-
-    add_course_author(user, course)
-
-    # Navigate to the studio dashboard
-    world.visit('/')
-    course_link_css = 'a.course-link'
-    world.css_click(course_link_css)
-    course_title_css = 'span.course-title'
-    assert world.is_css_present(course_title_css)
-
-
-def add_section():
-    world.css_click('.outline .button-new')
-    assert world.is_css_present('.outline-section .xblock-field-value')
-
-
-def set_date_and_time(date_css, desired_date, time_css, desired_time, key=None):
-    set_element_value(date_css, desired_date, key)
-    world.wait_for_ajax_complete()
-
-    set_element_value(time_css, desired_time, key)
-    world.wait_for_ajax_complete()
-
-
-def set_element_value(element_css, element_value, key=None):
-    element = world.css_find(element_css).first
-    element.fill(element_value)
-    # hit TAB or provided key to trigger save content
-    if key is not None:
-        element._element.send_keys(getattr(Keys, key))  # pylint: disable=protected-access
-    else:
-        element._element.send_keys(Keys.TAB)  # pylint: disable=protected-access
-
-
-@step('I have enabled the (.*) advanced module$')
-def i_enabled_the_advanced_module(step, module):
-    step.given('I have opened a new course section in Studio')
-    world.css_click('.nav-course-settings')
-    world.css_click('.nav-course-settings-advanced a')
-    type_in_codemirror(0, '["%s"]' % module)
-    press_the_notification_button(step, 'Save')
-
-
-@world.absorb
-def create_unit_from_course_outline():
-    """
-    Expands the section and clicks on the New Unit link.
-    The end result is the page where the user is editing the new unit.
-    """
-    css_selectors = [
-        '.outline-subsection .expand-collapse', '.outline-subsection .button-new'
-    ]
-    for selector in css_selectors:
-        world.css_click(selector)
-
-    world.wait_for_mathjax()
-    world.wait_for_loading()
-
-    assert world.is_css_present('ul.new-component-type')
-
-
-@world.absorb
-def wait_for_loading():
-    """
-    Waits for the loading indicator to be hidden.
-    """
-    world.wait_for(lambda _driver: len(world.browser.find_by_css('div.ui-loading.is-hidden')) > 0)
-
-
-@step('I have clicked the new unit button$')
-@step(u'I am in Studio editing a new unit$')
-def edit_new_unit(step):
-    step.given('I have populated a new course in Studio')
-    create_unit_from_course_outline()
-
-
-@step('the save notification button is disabled')
-def save_button_disabled(_step):
-    button_css = '.action-save'
-    disabled = 'is-disabled'
-    assert world.css_has_class(button_css, disabled)
-
-
-@step('the "([^"]*)" button is disabled')
-def button_disabled(_step, value):
-    button_css = 'input[value="%s"]' % value
-    assert world.css_has_class(button_css, 'is-disabled')
-
-
-def _do_studio_prompt_action(intent, action):
-    """
-    Wait for a studio prompt to appear and press the specified action button
-    See common/js/components/views/feedback_prompt.js for implementation
-    """
-    assert intent in [
-        'warning',
-        'error',
-        'confirmation',
-        'announcement',
-        'step-required',
-        'help',
-        'mini',
-    ]
-    assert action in ['primary', 'secondary']
-
-    world.wait_for_present('div.wrapper-prompt.is-shown#prompt-{}'.format(intent))
-
-    action_css = u'li.nav-item > button.action-{}'.format(action)
-    world.trigger_event(action_css, event='focus')
-    world.browser.execute_script("$('{}').click()".format(action_css))
-
-    world.wait_for_ajax_complete()
-    world.wait_for_present('div.wrapper-prompt.is-hiding#prompt-{}'.format(intent))
-
-
-@world.absorb
-def confirm_studio_prompt():
-    _do_studio_prompt_action('warning', 'primary')
-
-
-@step('I confirm the prompt')
-def confirm_the_prompt(_step):
-    confirm_studio_prompt()
-
-
-@step(u'I am shown a prompt$')
-def i_am_shown_a_notification(_step):
-    assert world.is_css_present('.wrapper-prompt')
-
-
-def type_in_codemirror(index, text, find_prefix="$"):
-    script = """
-    var cm = {find_prefix}('div.CodeMirror:eq({index})').get(0).CodeMirror;
-    cm.getInputField().focus();
-    cm.setValue(arguments[0]);
-    cm.getInputField().blur();""".format(index=index, find_prefix=find_prefix)
-    world.browser.driver.execute_script(script, str(text))
-    world.wait_for_ajax_complete()
-
-
-def get_codemirror_value(index=0, find_prefix="$"):
-    return world.browser.driver.execute_script(
-        u"""
-        return {find_prefix}('div.CodeMirror:eq({index})').get(0).CodeMirror.getValue();
-        """.format(index=index, find_prefix=find_prefix)
-    )
-
-
-def attach_file(filename, sub_path):
-    path = os.path.join(TEST_ROOT, sub_path, filename)
-    world.browser.execute_script("$('input.file-input').css('display', 'block')")
-    assert os.path.exists(path)
-    world.browser.attach_file('file', os.path.abspath(path))
-
-
-def upload_file(filename, sub_path=''):
-    # The file upload dialog is a faux modal, a div that takes over the display
-    attach_file(filename, sub_path)
-    modal_css = 'div.wrapper-modal-window-assetupload'
-    button_css = u'{} .action-upload'.format(modal_css)
-    world.css_click(button_css)
-
-    # Clicking the Upload button triggers an AJAX POST.
-    world.wait_for_ajax_complete()
-
-    # The modal stays up with a "File uploaded succeeded" confirmation message, then goes away.
-    # It should take under 2 seconds, so wait up to 10.
-    # Note that is_css_not_present will return as soon as the element is gone.
-    assert world.is_css_not_present(modal_css, wait_time=10)
-
-
-@step(u'"([^"]*)" logs in$')
-def other_user_login(step, name):
-    step.given('I log out')
-    world.visit('/')
-
-    signin_css = 'a.action-signin'
-    world.is_css_present(signin_css)
-    world.css_click(signin_css)
-
-    def fill_login_form():
-        login_form = world.browser.find_by_css('form#login_form')
-        login_form.find_by_name('email').fill(name + '@edx.org')
-        login_form.find_by_name('password').fill("test")
-        login_form.find_by_name('submit').click()
-    world.retry_on_exception(fill_login_form)
-    assert world.is_css_present('.new-course-button')
-    world.scenario_dict['USER'] = get_user(name + '@edx.org')
-
-
-@step(u'the user "([^"]*)" exists( as a course (admin|staff member|is_staff))?$')
-def create_other_user(_step, name, has_extra_perms, role_name):
-    email = name + '@edx.org'
-    user = create_studio_user(uname=name, password="test", email=email)
-    if has_extra_perms:
-        if role_name == "is_staff":
-            GlobalStaff().add_users(user)
-        else:
-            if role_name == "admin":
-                # admins get staff privileges, as well
-                roles = (CourseStaffRole, CourseInstructorRole)
-            else:
-                roles = (CourseStaffRole,)
-            course_key = world.scenario_dict["COURSE"].id
-            global_admin = AdminFactory()
-            for role in roles:
-                auth.add_users(global_admin, role(course_key), user)
-
-
-@step('I log out')
-def log_out(_step):
-    world.visit('logout')
diff --git a/cms/djangoapps/contentstore/features/component.py b/cms/djangoapps/contentstore/features/component.py
deleted file mode 100644
index 0194f1ca339..00000000000
--- a/cms/djangoapps/contentstore/features/component.py
+++ /dev/null
@@ -1,181 +0,0 @@
-# pylint: disable=missing-docstring
-# pylint: disable=no-member
-# pylint: disable=redefined-outer-name
-
-# Lettuce formats proposed definitions for unimplemented steps with the
-# argument name "step" instead of "_step" and pylint does not like that.
-# pylint: disable=unused-argument
-
-from lettuce import step, world
-from openedx.core.lib.tests.tools import assert_equal, assert_in, assert_true  # pylint: disable=no-name-in-module
-
-DISPLAY_NAME = "Display Name"
-
-
-@step(u'I add this type of single step component:$')
-def add_a_single_step_component(step):
-    for step_hash in step.hashes:
-        component = step_hash['Component']
-        assert_in(component, ['Discussion', 'Video'])
-
-        world.create_component_instance(
-            step=step,
-            category='{}'.format(component.lower()),
-        )
-
-
-@step(u'I see this type of single step component:$')
-def see_a_single_step_component(step):
-    for step_hash in step.hashes:
-        component = step_hash['Component']
-        assert_in(component, ['Discussion', 'Video'])
-        component_css = '.xmodule_{}Module'.format(component)
-        assert_true(world.is_css_present(component_css),
-                    u"{} couldn't be found".format(component))
-
-
-@step(u'I add this type of( Advanced)? (HTML|Problem) component:$')
-def add_a_multi_step_component(step, is_advanced, category):
-    for step_hash in step.hashes:
-        world.create_component_instance(
-            step=step,
-            category='{}'.format(category.lower()),
-            component_type=step_hash['Component'],
-            is_advanced=bool(is_advanced),
-        )
-
-
-@step(u'I see (HTML|Problem) components in this order:')
-def see_a_multi_step_component(step, category):
-
-    # Wait for all components to finish rendering
-    if category == 'HTML':
-        selector = 'li.studio-xblock-wrapper div.xblock-student_view'
-    else:
-        selector = 'li.studio-xblock-wrapper div.xblock-author_view'
-    world.wait_for(lambda _: len(world.css_find(selector)) == len(step.hashes))
-
-    for idx, step_hash in enumerate(step.hashes):
-        if category == 'HTML':
-            html_matcher = {
-                'Text': '\n    \n',
-                'Announcement': '<h3 class="hd hd-2">Announcement Date</h3>',
-                'Zooming Image Tool': '<h3 class="hd hd-2">Zooming Image Tool</h3>',
-                'E-text Written in LaTeX': '<h3 class="hd hd-2">Example: E-text page</h3>',
-                'Raw HTML': '<p>This template is similar to the Text template. The only difference is',
-            }
-            actual_html = world.css_html(selector, index=idx)
-            assert_in(html_matcher[step_hash['Component']].strip(), actual_html.strip())
-        else:
-            actual_text = world.css_text(selector, index=idx)
-            assert_in(step_hash['Component'], actual_text)
-
-
-@step(u'I see a "([^"]*)" Problem component$')
-def see_a_problem_component(step, category):
-    component_css = '.xmodule_CapaModule'
-    assert_true(world.is_css_present(component_css),
-                'No problem was added to the unit.')
-
-    problem_css = '.studio-xblock-wrapper .xblock-student_view'
-    # This view presents the given problem component in uppercase. Assert that the text matches
-    # the component selected
-    assert_true(world.css_contains_text(problem_css, category))
-
-
-@step(u'I add a "([^"]*)" "([^"]*)" component$')
-def add_component_category(step, component, category):
-    assert category in ('single step', 'HTML', 'Problem', 'Advanced Problem')
-    given_string = u'I add this type of {} component:'.format(category)
-    step.given('{}\n{}\n{}'.format(given_string, '|Component|', '|{}|'.format(component)))
-
-
-@step(u'I delete all components$')
-def delete_all_components(step):
-    count = len(world.css_find('.reorderable-container .studio-xblock-wrapper'))
-    step.given('I delete "' + str(count) + '" component')
-
-
-@step(u'I delete "([^"]*)" component$')
-def delete_components(step, number):
-    world.wait_for_xmodule()
-    delete_btn_css = '.delete-button'
-    prompt_css = '#prompt-warning'
-    btn_css = u'{} .action-primary'.format(prompt_css)
-    saving_mini_css = '#page-notification .wrapper-notification-mini'
-    for _ in range(int(number)):
-        world.css_click(delete_btn_css)
-        assert_true(
-            world.is_css_present('{}.is-shown'.format(prompt_css)),
-            msg='Waiting for the confirmation prompt to be shown')
-
-        # Pressing the button via css was not working reliably for the last component
-        # when run in Chrome.
-        if world.browser.driver_name == 'Chrome':
-            world.browser.execute_script("$('{}').click()".format(btn_css))
-        else:
-            world.css_click(btn_css)
-
-        # Wait for the saving notification to pop up then disappear
-        if world.is_css_present('{}.is-shown'.format(saving_mini_css)):
-            world.css_find('{}.is-hiding'.format(saving_mini_css))
-
-
-@step(u'I see no components')
-def see_no_components(steps):
-    assert world.is_css_not_present('li.studio-xblock-wrapper')
-
-
-@step(u'I delete a component')
-def delete_one_component(step):
-    world.css_click('.delete-button')
-
-
-@step(u'I edit and save a component')
-def edit_and_save_component(step):
-    world.css_click('.edit-button')
-    world.css_click('.save-button')
-
-
-@step(u'I duplicate the (first|second|third) component$')
-def duplicated_component(step, ordinal):
-    ord_map = {
-        "first": 0,
-        "second": 1,
-        "third": 2,
-    }
-    index = ord_map[ordinal]
-    duplicate_btn_css = '.duplicate-button'
-    world.css_click(duplicate_btn_css, int(index))
-
-
-@step(u'I see a Problem component with display name "([^"]*)" in position "([^"]*)"$')
-def see_component_in_position(step, display_name, index):
-    component_css = '.xmodule_CapaModule'
-
-    def find_problem(_driver):
-        return world.css_text(component_css, int(index)).startswith(display_name)
-
-    world.wait_for(find_problem, timeout_msg='Did not find the duplicated problem')
-
-
-@step(u'I see the display name is "([^"]*)"')
-def check_component_display_name(step, display_name):
-    # The display name for the unit uses the same structure, must differentiate by level-element.
-    label = world.css_html(".level-element>header>div>div>span.xblock-display-name")
-    assert_equal(display_name, label)
-
-
-@step(u'I change the display name to "([^"]*)"')
-def change_display_name(step, display_name):
-    world.edit_component_and_select_settings()
-    index = world.get_setting_entry_index(DISPLAY_NAME)
-    world.set_field_value(index, display_name)
-    world.save_component()
-
-
-@step(u'I unset the display name')
-def unset_display_name(step):
-    world.edit_component_and_select_settings()
-    world.revert_setting_entry(DISPLAY_NAME)
-    world.save_component()
diff --git a/cms/djangoapps/contentstore/features/component_settings_editor_helpers.py b/cms/djangoapps/contentstore/features/component_settings_editor_helpers.py
deleted file mode 100644
index a066fb145f9..00000000000
--- a/cms/djangoapps/contentstore/features/component_settings_editor_helpers.py
+++ /dev/null
@@ -1,270 +0,0 @@
-# disable missing docstring
-# pylint: disable=missing-docstring
-# pylint: disable=no-member
-
-from lettuce import world
-from selenium.webdriver.common.keys import Keys
-
-from common import type_in_codemirror
-from openedx.core.lib.tests.tools import assert_equal, assert_in  # pylint: disable=no-name-in-module
-from terrain.steps import reload_the_page
-
-
-@world.absorb
-def create_component_instance(step, category, component_type=None, is_advanced=False, advanced_component=None):
-    """
-    Create a new component in a Unit.
-
-    Parameters
-    ----------
-    category: component type (discussion, html, problem, video, advanced)
-    component_type: for components with multiple templates, the link text in the menu
-    is_advanced: for problems, is the desired component under the advanced menu?
-    advanced_component: for advanced components, the related value of policy key 'advanced_modules'
-    """
-    assert_in(category, ['advanced', 'problem', 'html', 'video', 'discussion'])
-
-    component_button_css = 'span.large-{}-icon'.format(category.lower())
-    if category == 'problem':
-        module_css = 'div.xmodule_CapaModule'
-    elif category == 'advanced':
-        module_css = 'div.xmodule_{}Module'.format(advanced_component.title())
-    elif category == 'discussion':
-        module_css = 'div.xblock-author_view-{}'.format(category.lower())
-    else:
-        module_css = 'div.xmodule_{}Module'.format(category.title())
-
-    # Count how many of that module is on the page. Later we will
-    # assert that one more was added.
-    # We need to use world.browser.find_by_css instead of world.css_find
-    # because it's ok if there are currently zero of them.
-    module_count_before = len(world.browser.find_by_css(module_css))
-
-    # Disable the jquery animation for the transition to the menus.
-    world.disable_jquery_animations()
-    world.css_click(component_button_css)
-
-    if category in ('problem', 'html', 'advanced'):
-        world.wait_for_invisible(component_button_css)
-        click_component_from_menu(category, component_type, is_advanced)
-
-    expected_count = module_count_before + 1
-    world.wait_for(
-        lambda _: len(world.css_find(module_css)) == expected_count,
-        timeout=20
-    )
-
-
-@world.absorb
-def click_new_component_button(step, component_button_css):
-    step.given('I have clicked the new unit button')
-
-    world.css_click(component_button_css)
-
-
-def _click_advanced():
-    css = 'ul.problem-type-tabs a[href="#tab2"]'
-    world.css_click(css)
-
-    # Wait for the advanced tab items to be displayed
-    tab2_css = 'div.ui-tabs-panel#tab2'
-    world.wait_for_visible(tab2_css)
-
-
-def _find_matching_button(category, component_type):
-    """
-    Find the button with the specified text. There should be one and only one.
-    """
-
-    # The tab shows buttons for the given category
-    buttons = world.css_find(u'div.new-component-{} button'.format(category))
-
-    # Find the button whose text matches what you're looking for
-    matched_buttons = [btn for btn in buttons if btn.text == component_type]
-
-    # There should be one and only one
-    assert_equal(len(matched_buttons), 1)
-    return matched_buttons[0]
-
-
-def click_component_from_menu(category, component_type, is_advanced):
-    """
-    Creates a component for a category with more
-    than one template, i.e. HTML and Problem.
-    For some problem types, it is necessary to click to
-    the Advanced tab.
-    The component_type is the link text, e.g. "Blank Common Problem"
-    """
-    if is_advanced:
-        # Sometimes this click does not work if you go too fast.
-        world.retry_on_exception(
-            _click_advanced,
-            ignored_exceptions=AssertionError,
-        )
-
-    # Retry this in case the list is empty because you tried too fast.
-    link = world.retry_on_exception(
-        lambda: _find_matching_button(category, component_type),
-        ignored_exceptions=AssertionError
-    )
-
-    # Wait for the link to be clickable. If you go too fast it is not.
-    world.retry_on_exception(lambda: link.click())
-
-
-@world.absorb
-def edit_component_and_select_settings():
-    world.edit_component()
-    world.ensure_settings_visible()
-
-
-@world.absorb
-def ensure_settings_visible():
-    # Select the 'settings' tab if there is one (it isn't displayed if it is the only option)
-    settings_button = world.browser.find_by_css('.settings-button')
-    if settings_button:
-        world.css_click('.settings-button')
-
-
-@world.absorb
-def edit_component(index=0):
-    # Verify that the "loading" indication has been hidden.
-    world.wait_for_loading()
-    # Verify that the "edit" button is present.
-    world.wait_for(lambda _driver: world.css_visible('.edit-button'))
-    world.css_click('.edit-button', index)
-    world.wait_for_ajax_complete()
-
-
-@world.absorb
-def select_editor_tab(tab_name):
-    editor_tabs = world.browser.find_by_css('.editor-tabs a')
-    expected_tab_text = tab_name.strip().upper()
-    matching_tabs = [tab for tab in editor_tabs if tab.text.upper() == expected_tab_text]
-    assert len(matching_tabs) == 1
-    tab = matching_tabs[0]
-    tab.click()
-    world.wait_for_ajax_complete()
-
-
-def enter_xml_in_advanced_problem(_step, text):
-    """
-    Edits an advanced problem (assumes only on page),
-    types the provided XML, and saves the component.
-    """
-    world.edit_component()
-    type_in_codemirror(0, text)
-    world.save_component()
-
-
-@world.absorb
-def verify_setting_entry(setting, display_name, value, explicitly_set):
-    """
-    Verify the capa module fields are set as expected in the
-    Advanced Settings editor.
-
-    Parameters
-    ----------
-    setting: the WebDriverElement object found in the browser
-    display_name: the string expected as the label
-    html: the expected field value
-    explicitly_set: True if the value is expected to have been explicitly set
-        for the problem, rather than derived from the defaults. This is verified
-        by the existence of a "Clear" button next to the field value.
-    """
-    label_element = setting.find_by_css('.setting-label')[0]
-    assert_equal(display_name, label_element.html.strip())
-    label_for = label_element['for']
-
-    # Check if the web object is a list type
-    # If so, we use a slightly different mechanism for determining its value
-    if setting.has_class('metadata-list-enum') or setting.has_class('metadata-dict') or setting.has_class('metadata-video-translations'):
-        list_value = ', '.join(ele.value for ele in setting.find_by_css('.list-settings-item'))
-        assert_equal(value, list_value)
-    elif setting.has_class('metadata-videolist-enum'):
-        list_value = ', '.join(ele.find_by_css('input')[0].value for ele in setting.find_by_css('.videolist-settings-item'))
-        assert_equal(value, list_value)
-    else:
-        assert_equal(value, setting.find_by_id(label_for).value)
-
-    # VideoList doesn't have clear button
-    if not setting.has_class('metadata-videolist-enum'):
-        settingClearButton = setting.find_by_css('.setting-clear')[0]
-        assert_equal(explicitly_set, settingClearButton.has_class('active'))
-        assert_equal(not explicitly_set, settingClearButton.has_class('inactive'))
-
-
-@world.absorb
-def verify_all_setting_entries(expected_entries):
-    settings = world.browser.find_by_css('.wrapper-comp-setting')
-    assert_equal(len(expected_entries), len(settings))
-    for (counter, setting) in enumerate(settings):
-        world.verify_setting_entry(
-            setting, expected_entries[counter][0],
-            expected_entries[counter][1], expected_entries[counter][2]
-        )
-
-
-@world.absorb
-def save_component():
-    world.css_click("a.action-save,a.save-button")
-    world.wait_for_ajax_complete()
-
-
-@world.absorb
-def save_component_and_reopen(step):
-    save_component()
-    # We have a known issue that modifications are still shown within the edit window after cancel (though)
-    # they are not persisted. Refresh the browser to make sure the changes WERE persisted after Save.
-    reload_the_page(step)
-    edit_component_and_select_settings()
-
-
-@world.absorb
-def cancel_component(step):
-    world.css_click("a.action-cancel")
-    # We have a known issue that modifications are still shown within the edit window after cancel (though)
-    # they are not persisted. Refresh the browser to make sure the changes were not persisted.
-    reload_the_page(step)
-
-
-@world.absorb
-def revert_setting_entry(label):
-    get_setting_entry(label).find_by_css('.setting-clear')[0].click()
-
-
-@world.absorb
-def get_setting_entry(label):
-    def get_setting():
-        settings = world.css_find('.wrapper-comp-setting')
-        for setting in settings:
-            if setting.find_by_css('.setting-label')[0].value == label:
-                return setting
-        return None
-    return world.retry_on_exception(get_setting)
-
-
-@world.absorb
-def get_setting_entry_index(label):
-    def get_index():
-        settings = world.css_find('.wrapper-comp-setting')
-        for index, setting in enumerate(settings):
-            if setting.find_by_css('.setting-label')[0].value == label:
-                return index
-        return None
-    return world.retry_on_exception(get_index)
-
-
-@world.absorb
-def set_field_value(index, value):
-    """
-    Set the field to the specified value.
-
-    Note: we cannot use css_fill here because the value is not set
-    until after you move away from that field.
-    Instead we will find the element, set its value, then hit the Tab key
-    to get to the next field.
-    """
-    elem = world.css_find('div.wrapper-comp-setting input')[index]
-    elem.value = value
-    elem.type(Keys.TAB)
diff --git a/cms/djangoapps/contentstore/features/course-settings.py b/cms/djangoapps/contentstore/features/course-settings.py
deleted file mode 100644
index 54fb036ef62..00000000000
--- a/cms/djangoapps/contentstore/features/course-settings.py
+++ /dev/null
@@ -1,170 +0,0 @@
-# pylint: disable=missing-docstring
-# pylint: disable=no-member
-# pylint: disable=redefined-outer-name
-
-from django.conf import settings
-from lettuce import step, world
-from selenium.webdriver.common.keys import Keys
-
-from cms.djangoapps.contentstore.features.common import type_in_codemirror
-
-TEST_ROOT = settings.COMMON_TEST_DATA_ROOT
-
-COURSE_START_DATE_CSS = "#course-start-date"
-COURSE_END_DATE_CSS = "#course-end-date"
-ENROLLMENT_START_DATE_CSS = "#course-enrollment-start-date"
-ENROLLMENT_END_DATE_CSS = "#course-enrollment-end-date"
-
-COURSE_START_TIME_CSS = "#course-start-time"
-COURSE_END_TIME_CSS = "#course-end-time"
-ENROLLMENT_START_TIME_CSS = "#course-enrollment-start-time"
-ENROLLMENT_END_TIME_CSS = "#course-enrollment-end-time"
-
-DUMMY_TIME = "15:30"
-DEFAULT_TIME = "00:00"
-
-
-############### ACTIONS ####################
-@step('I select Schedule and Details$')
-def test_i_select_schedule_and_details(_step):
-    world.click_course_settings()
-    link_css = 'li.nav-course-settings-schedule a'
-    world.css_click(link_css)
-    world.wait_for_requirejs(
-        ["jquery", "js/models/course",
-         "js/models/settings/course_details", "js/views/settings/main"])
-
-
-@step('I have set course dates$')
-def test_i_have_set_course_dates(step):
-    step.given('I have opened a new course in Studio')
-    step.given('I select Schedule and Details')
-    step.given('And I set course dates')
-
-
-@step('And I set course dates$')
-def test_and_i_set_course_dates(_step):
-    set_date_or_time(COURSE_START_DATE_CSS, '12/20/2013')
-    set_date_or_time(COURSE_END_DATE_CSS, '12/26/2013')
-    set_date_or_time(ENROLLMENT_START_DATE_CSS, '12/1/2013')
-    set_date_or_time(ENROLLMENT_END_DATE_CSS, '12/10/2013')
-
-    set_date_or_time(COURSE_START_TIME_CSS, DUMMY_TIME)
-    set_date_or_time(ENROLLMENT_END_TIME_CSS, DUMMY_TIME)
-
-
-@step('And I clear all the dates except start$')
-def test_and_i_clear_all_the_dates_except_start(_step):
-    set_date_or_time(COURSE_END_DATE_CSS, '')
-    set_date_or_time(ENROLLMENT_START_DATE_CSS, '')
-    set_date_or_time(ENROLLMENT_END_DATE_CSS, '')
-
-
-@step('Then I see cleared dates$')
-def test_then_i_see_cleared_dates(_step):
-    verify_date_or_time(COURSE_END_DATE_CSS, '')
-    verify_date_or_time(ENROLLMENT_START_DATE_CSS, '')
-    verify_date_or_time(ENROLLMENT_END_DATE_CSS, '')
-
-    verify_date_or_time(COURSE_END_TIME_CSS, '')
-    verify_date_or_time(ENROLLMENT_START_TIME_CSS, '')
-    verify_date_or_time(ENROLLMENT_END_TIME_CSS, '')
-
-    # Verify course start date (required) and time still there
-    verify_date_or_time(COURSE_START_DATE_CSS, '12/20/2013')
-    verify_date_or_time(COURSE_START_TIME_CSS, DUMMY_TIME)
-
-
-@step('I clear the course start date$')
-def test_i_clear_the_course_start_date(_step):
-    set_date_or_time(COURSE_START_DATE_CSS, '')
-
-
-@step('I receive a warning about course start date$')
-def test_i_receive_a_warning_about_course_start_date(_step):
-    assert world.css_has_text('.message-error', 'The course must have an assigned start date.')
-    assert 'error' in world.css_find(COURSE_START_DATE_CSS).first._element.get_attribute('class')  # pylint: disable=protected-access
-    assert 'error' in world.css_find(COURSE_START_TIME_CSS).first._element.get_attribute('class')  # pylint: disable=protected-access
-
-
-@step('the previously set start date is shown$')
-def test_the_previously_set_start_date_is_shown(_step):
-    verify_date_or_time(COURSE_START_DATE_CSS, '12/20/2013')
-    verify_date_or_time(COURSE_START_TIME_CSS, DUMMY_TIME)
-
-
-@step('Given I have tried to clear the course start$')
-def test_i_have_tried_to_clear_the_course_start(step):
-    step.given("I have set course dates")
-    step.given("I clear the course start date")
-    step.given("I receive a warning about course start date")
-
-
-@step('I have entered a new course start date$')
-def test_i_have_entered_a_new_course_start_date(_step):
-    set_date_or_time(COURSE_START_DATE_CSS, '12/22/2013')
-
-
-@step('The warning about course start date goes away$')
-def test_the_warning_about_course_start_date_goes_away(_step):
-    assert world.is_css_not_present('.message-error')
-    assert 'error' not in world.css_find(COURSE_START_DATE_CSS).first._element.get_attribute('class')  # pylint: disable=protected-access
-    assert 'error' not in world.css_find(COURSE_START_TIME_CSS).first._element.get_attribute('class')  # pylint: disable=protected-access
-
-
-@step('my new course start date is shown$')
-def new_course_start_date_is_shown(_step):
-    verify_date_or_time(COURSE_START_DATE_CSS, '12/22/2013')
-    # Time should have stayed from before attempt to clear date.
-    verify_date_or_time(COURSE_START_TIME_CSS, DUMMY_TIME)
-
-
-@step('I change fields$')
-def test_i_change_fields(_step):
-    set_date_or_time(COURSE_START_DATE_CSS, '7/7/7777')
-    set_date_or_time(COURSE_END_DATE_CSS, '7/7/7777')
-    set_date_or_time(ENROLLMENT_START_DATE_CSS, '7/7/7777')
-    set_date_or_time(ENROLLMENT_END_DATE_CSS, '7/7/7777')
-
-
-@step('I change the course overview')
-def test_change_course_overview(_step):
-    type_in_codemirror(0, "<h1>Overview</h1>")
-
-
-############### HELPER METHODS ####################
-def set_date_or_time(css, date_or_time):
-    """
-    Sets date or time field.
-    """
-    world.css_fill(css, date_or_time)
-    e = world.css_find(css).first
-    # hit Enter to apply the changes
-    e._element.send_keys(Keys.ENTER)  # pylint: disable=protected-access
-
-
-def verify_date_or_time(css, date_or_time):
-    """
-    Verifies date or time field.
-    """
-    # We need to wait for JavaScript to fill in the field, so we use
-    # css_has_value(), which first checks that the field is not blank
-    assert world.css_has_value(css, date_or_time)
-
-
-@step('I do not see the changes')
-@step('I see the set dates')
-def i_see_the_set_dates(_step):
-    """
-    Ensure that each field has the value set in `test_and_i_set_course_dates`.
-    """
-    verify_date_or_time(COURSE_START_DATE_CSS, '12/20/2013')
-    verify_date_or_time(COURSE_END_DATE_CSS, '12/26/2013')
-    verify_date_or_time(ENROLLMENT_START_DATE_CSS, '12/01/2013')
-    verify_date_or_time(ENROLLMENT_END_DATE_CSS, '12/10/2013')
-
-    verify_date_or_time(COURSE_START_TIME_CSS, DUMMY_TIME)
-    # Unset times get set to 12 AM once the corresponding date has been set.
-    verify_date_or_time(COURSE_END_TIME_CSS, DEFAULT_TIME)
-    verify_date_or_time(ENROLLMENT_START_TIME_CSS, DEFAULT_TIME)
-    verify_date_or_time(ENROLLMENT_END_TIME_CSS, DUMMY_TIME)
diff --git a/cms/djangoapps/contentstore/features/course_import.py b/cms/djangoapps/contentstore/features/course_import.py
deleted file mode 100644
index e75db207bc0..00000000000
--- a/cms/djangoapps/contentstore/features/course_import.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# pylint: disable=missing-docstring
-# pylint: disable=redefined-outer-name
-# pylint: disable=unused-argument
-
-import os
-
-from django.conf import settings
-from lettuce import step, world
-
-
-def import_file(filename):
-    world.browser.execute_script("$('input.file-input').css('display', 'block')")
-    path = os.path.join(settings.COMMON_TEST_DATA_ROOT, "imports", filename)
-    world.browser.attach_file('course-data', os.path.abspath(path))
-    world.css_click('input.submit-button')
-    # Go to course outline
-    world.click_course_content()
-    outline_css = 'li.nav-course-courseware-outline a'
-    world.css_click(outline_css)
-
-
-@step('I go to the import page$')
-def go_to_import(step):
-    menu_css = 'li.nav-course-tools'
-    import_css = 'li.nav-course-tools-import a'
-    world.css_click(menu_css)
-    world.css_click(import_css)
diff --git a/cms/djangoapps/contentstore/features/html-editor.feature b/cms/djangoapps/contentstore/features/html-editor.feature
deleted file mode 100644
index 7b714716797..00000000000
--- a/cms/djangoapps/contentstore/features/html-editor.feature
+++ /dev/null
@@ -1,128 +0,0 @@
-@shard_2
-Feature: CMS.HTML Editor
-  As a course author, I want to be able to create HTML blocks.
-
-  Scenario: User can view metadata
-    Given I have created a Blank HTML Page
-    And I edit and select Settings
-    Then I see the HTML component settings
-
-  # Safari doesn't save the name properly
-  @skip_safari
-  Scenario: User can modify display name
-    Given I have created a Blank HTML Page
-    And I edit and select Settings
-    Then I can modify the display name
-    And my display name change is persisted on save
-
-  Scenario: TinyMCE link plugin sets urls correctly
-    Given I have created a Blank HTML Page
-    When I edit the page
-    And I add a link with static link "/static/image.jpg" via the Link Plugin Icon
-    Then the href link is rewritten to the asset link "image.jpg"
-    And the link is shown as "/static/image.jpg" in the Link Plugin
-
-  Scenario: TinyMCE and CodeMirror preserve style tags
-    Given I have created a Blank HTML Page
-    When I edit the page
-    And type "<p class='title'>pages</p><style><!-- .title { color: red; } --></style>" in the code editor and press OK
-    And I save the page
-    Then the page text contains:
-      """
-      <p class="title">pages</p>
-      <style><!--
-      .title { color: red; }
-      --></style>
-      """
-
-  Scenario: TinyMCE and CodeMirror preserve span tags
-    Given I have created a Blank HTML Page
-    When I edit the page
-    And type "<span>Test</span>" in the code editor and press OK
-    And I save the page
-    Then the page text contains:
-      """
-      <span>Test</span>
-      """
-
-  Scenario: TinyMCE and CodeMirror preserve math tags
-    Given I have created a Blank HTML Page
-    When I edit the page
-    And type "<math><msup><mi>x</mi><mn>2</mn></msup></math>" in the code editor and press OK
-    And I save the page
-    Then the page text contains:
-      """
-      <math><msup><mi>x</mi><mn>2</mn></msup></math>
-      """
-
-  Scenario: TinyMCE toolbar buttons are as expected
-    Given I have created a Blank HTML Page
-    When I edit the page
-    Then the expected toolbar buttons are displayed
-
-  Scenario: Static links are converted when switching between code editor and WYSIWYG views
-    Given I have created a Blank HTML Page
-    When I edit the page
-    And type "<img src="/static/image.jpg">" in the code editor and press OK
-    Then the src link is rewritten to the asset link "image.jpg"
-    And the code editor displays "<p><img src="/static/image.jpg" /></p>"
-
-  Scenario: Code format toolbar button wraps text with code tags
-    Given I have created a Blank HTML Page
-    When I edit the page
-    And I set the text to "display as code" and I select the text
-    And I select the code toolbar button
-    And I save the page
-    Then the page text contains:
-      """
-      <p><code>display as code</code></p>
-      """
-
-  Scenario: Raw HTML component does not change text
-    Given I have created a raw HTML component
-    When I edit the page
-    And type "<li>zzzz<ol>" into the Raw Editor
-    And I save the page
-    Then the page text contains:
-      """
-      <li>zzzz<ol>
-      """
-    And I edit the page
-    Then the Raw Editor contains exactly:
-      """
-      <li>zzzz<ol>
-      """
-
-  Scenario: Font selection dropdown contains Default font and tinyMCE builtin fonts
-    Given I have created a Blank HTML Page
-    When I edit the page
-    And I click font selection dropdown
-    Then I should see a list of available fonts
-    And "Default" option sets the expected font family
-    And all standard tinyMCE fonts should be available
-
-# Skipping in master due to brittleness JZ 05/22/2014
-#  Scenario: Can switch from Visual Editor to Raw
-#    Given I have created a Blank HTML Page
-#    When I edit the component and select the Raw Editor
-#    And I save the page
-#    When I edit the page
-#    And type "fancy html" into the Raw Editor
-#    And I save the page
-#    Then the page text contains:
-#      """
-#      fancy html
-#      """
-
-# Skipping in master due to brittleness JZ 05/22/2014
-#  Scenario: Can switch from Raw Editor to Visual
-#    Given I have created a raw HTML component
-#    And I edit the component and select the Visual Editor
-#    And I save the page
-#    When I edit the page
-#    And type "less fancy html" in the code editor and press OK
-#    And I save the page
-#    Then the page text contains:
-#      """
-#      less fancy html
-#      """
diff --git a/cms/djangoapps/contentstore/features/html-editor.py b/cms/djangoapps/contentstore/features/html-editor.py
deleted file mode 100644
index 490e7a0efb3..00000000000
--- a/cms/djangoapps/contentstore/features/html-editor.py
+++ /dev/null
@@ -1,306 +0,0 @@
-# disable missing docstring
-# pylint: disable=missing-docstring
-# pylint: disable=no-member
-
-from collections import OrderedDict
-
-from lettuce import step, world
-
-from common import get_codemirror_value, type_in_codemirror
-from openedx.core.lib.tests.tools import assert_equal, assert_in  # pylint: disable=no-name-in-module
-
-CODEMIRROR_SELECTOR_PREFIX = "$('iframe').contents().find"
-
-
-@step('I have created a Blank HTML Page$')
-def i_created_blank_html_page(step):
-    step.given('I am in Studio editing a new unit')
-    world.create_component_instance(
-        step=step,
-        category='html',
-        component_type='Text'
-    )
-
-
-@step('I have created a raw HTML component')
-def i_created_raw_html(step):
-    step.given('I am in Studio editing a new unit')
-    world.create_component_instance(
-        step=step,
-        category='html',
-        component_type='Raw HTML'
-    )
-
-
-@step('I see the HTML component settings$')
-def i_see_only_the_html_display_name(_step):
-    world.verify_all_setting_entries(
-        [
-            ['Display Name', "Text", False],
-            ['Editor', "Visual", False]
-        ]
-    )
-
-
-@step('I have created an E-text Written in LaTeX$')
-def i_created_etext_in_latex(step):
-    step.given('I am in Studio editing a new unit')
-    step.given('I have enabled latex compiler')
-    world.create_component_instance(
-        step=step,
-        category='html',
-        component_type='E-text Written in LaTeX'
-    )
-
-
-@step('I edit the page$')
-def i_click_on_edit_icon(_step):
-    world.edit_component()
-
-
-@step('I add a link with static link "(.*)" via the Link Plugin Icon$')
-def i_click_on_link_plugin_icon(_step, path):
-    def fill_in_link_fields():
-        world.css_fill('.mce-textbox', path, 0)
-        world.css_fill('.mce-textbox', 'picture', 1)
-
-    use_plugin('.mce-i-link', fill_in_link_fields)
-
-
-@step('the link is shown as "(.*)" in the Link Plugin$')
-def check_link_in_link_plugin(_step, path):
-    # Ensure caret position is within the link just created.
-    script = """
-    var editor = tinyMCE.activeEditor;
-    editor.selection.select(editor.dom.select('a')[0]);"""
-    world.browser.driver.execute_script(script)
-    world.wait_for_ajax_complete()
-
-    use_plugin(
-        '.mce-i-link',
-        lambda: assert_equal(path, world.css_find('.mce-textbox')[0].value)
-    )
-
-
-@step('type "(.*)" in the code editor and press OK$')
-def type_in_codemirror_plugin(_step, text):
-    # Verify that raw code editor is not visible.
-    assert world.css_has_class('.CodeMirror', 'is-inactive')
-    # Verify that TinyMCE editor is present
-    assert world.is_css_present('.tiny-mce')
-    use_code_editor(
-        lambda: type_in_codemirror(0, text, CODEMIRROR_SELECTOR_PREFIX)
-    )
-
-
-@step('and the code editor displays "(.*)"$')
-def verify_code_editor_text(_step, text):
-    use_code_editor(
-        lambda: assert_equal(text, get_codemirror_value(0, CODEMIRROR_SELECTOR_PREFIX))
-    )
-
-
-@step('I save the page$')
-def i_click_on_save(_step):
-    world.save_component()
-
-
-@step('the page text contains:')
-def check_page_text(step):
-    assert_in(step.multiline, world.css_find('.xmodule_HtmlModule').html)
-
-
-@step('the Raw Editor contains exactly:')
-def check_raw_editor_text(step):
-    assert_equal(step.multiline, get_codemirror_value(0))
-
-
-@step('the src link is rewritten to the asset link "(.*)"$')
-def image_static_link_is_rewritten(_step, path):
-    # Find the TinyMCE iframe within the main window
-    with world.browser.get_iframe('mce_0_ifr') as tinymce:
-        image = tinymce.find_by_tag('img').first
-        assert_in(unicode(world.scenario_dict['COURSE'].id.make_asset_key('asset', path)), image['src'])
-
-
-@step('the href link is rewritten to the asset link "(.*)"$')
-def link_static_link_is_rewritten(_step, path):
-    # Find the TinyMCE iframe within the main window
-    with world.browser.get_iframe('mce_0_ifr') as tinymce:
-        link = tinymce.find_by_tag('a').first
-        assert_in(unicode(world.scenario_dict['COURSE'].id.make_asset_key('asset', path)), link['href'])
-
-
-@step('the expected toolbar buttons are displayed$')
-def check_toolbar_buttons(_step):
-    dropdowns = world.css_find('.mce-listbox')
-    assert_equal(2, len(dropdowns))
-
-    # Format dropdown
-    assert_equal('Paragraph', dropdowns[0].text)
-    # Font dropdown
-    assert_equal('Font Family', dropdowns[1].text)
-
-    buttons = world.css_find('.mce-ico')
-
-    # Note that the code editor icon is not present because we are now showing text instead of an icon.
-    # However, other test points user the code editor, so we have already verified its presence.
-    expected_buttons = [
-        'bold',
-        'italic',
-        'underline',
-        'forecolor',
-        # This is our custom "code style" button, which uses an image instead of a class.
-        'none',
-        'alignleft',
-        'aligncenter',
-        'alignright',
-        'alignjustify',
-        'bullist',
-        'numlist',
-        'outdent',
-        'indent',
-        'blockquote',
-        'link',
-        'unlink',
-        'image'
-    ]
-
-    assert_equal(len(expected_buttons), len(buttons))
-
-    for index, button in enumerate(expected_buttons):
-        class_names = buttons[index]._element.get_attribute('class')  # pylint: disable=protected-access
-        assert_equal("mce-ico mce-i-" + button, class_names)
-
-
-@step('I set the text to "(.*)" and I select the text$')
-def set_text_and_select(_step, text):
-    script = """
-    var editor = tinyMCE.activeEditor;
-    editor.setContent(arguments[0]);
-    editor.selection.select(editor.dom.select('p')[0]);"""
-    world.browser.driver.execute_script(script, str(text))
-    world.wait_for_ajax_complete()
-
-
-@step('I select the code toolbar button$')
-def select_code_button(_step):
-    # This is our custom "code style" button. It uses an image instead of a class.
-    world.css_click(".mce-i-none")
-
-
-@step('type "(.*)" into the Raw Editor$')
-def type_in_raw_editor(_step, text):
-    # Verify that CodeMirror editor is not hidden
-    assert not world.css_has_class('.CodeMirror', 'is-inactive')
-    # Verify that TinyMCE Editor is not present
-    assert world.is_css_not_present('.tiny-mce')
-    type_in_codemirror(0, text)
-
-
-@step('I edit the component and select the (Raw|Visual) Editor$')
-def select_editor(_step, editor):
-    world.edit_component_and_select_settings()
-    world.browser.select('Editor', editor)
-
-
-@step('I click font selection dropdown')
-def click_font_dropdown(_step):
-    dropdowns = [drop for drop in world.css_find('.mce-listbox') if drop.text == 'Font Family']
-    assert_equal(len(dropdowns), 1)
-    dropdowns[0].click()
-
-
-@step('I should see a list of available fonts')
-def font_selector_dropdown_is_shown(_step):
-    font_panel = get_fonts_list_panel(world)
-    expected_fonts = list(CUSTOM_FONTS.keys()) + list(TINYMCE_FONTS.keys())
-    actual_fonts = [font.strip() for font in font_panel.text.split('\n')]
-    assert_equal(actual_fonts, expected_fonts)
-
-
-@step('"Default" option sets the expected font family')
-def default_options_sets_expected_font_family(step):  # pylint: disable=unused-argument, redefined-outer-name
-    fonts = get_available_fonts(get_fonts_list_panel(world))
-    fonts_found = fonts.get("Default", None)
-    expected_font_family = CUSTOM_FONTS.get('Default')
-    for expected_font in expected_font_family:
-        assert_in(expected_font, fonts_found)
-
-
-@step('all standard tinyMCE fonts should be available')
-def check_standard_tinyMCE_fonts(_step):
-    fonts = get_available_fonts(get_fonts_list_panel(world))
-    for label, expected_fonts in TINYMCE_FONTS.items():
-        for expected_font in expected_fonts:
-            assert_in(expected_font, fonts.get(label, None))
-
-TINYMCE_FONTS = OrderedDict([
-    ("Andale Mono", ['andale mono', 'times']),
-    ("Arial", ['arial', 'helvetica', 'sans-serif']),
-    ("Arial Black", ['arial black', 'avant garde']),
-    ("Book Antiqua", ['book antiqua', 'palatino']),
-    ("Comic Sans MS", ['comic sans ms', 'sans-serif']),
-    ("Courier New", ['courier new', 'courier']),
-    ("Georgia", ['georgia', 'palatino']),
-    ("Helvetica", ['helvetica']),
-    ("Impact", ['impact', 'chicago']),
-    ("Symbol", ['symbol']),
-    ("Tahoma", ['tahoma', 'arial', 'helvetica', 'sans-serif']),
-    ("Terminal", ['terminal', 'monaco']),
-    ("Times New Roman", ['times new roman', 'times']),
-    ("Trebuchet MS", ['trebuchet ms', 'geneva']),
-    ("Verdana", ['verdana', 'geneva']),
-    # tinyMCE does not set font-family on dropdown span for these two fonts
-    ("Webdings", [""]),  # webdings
-    ("Wingdings", [""]),  # wingdings, 'zapf dingbats'
-])
-
-CUSTOM_FONTS = OrderedDict([
-    ('Default', ['Open Sans', 'Verdana', 'Arial', 'Helvetica', 'sans-serif']),
-])
-
-
-def use_plugin(button_class, action):
-    # Click on plugin button
-    world.css_click(button_class)
-    perform_action_in_plugin(action)
-
-
-def use_code_editor(action):
-    # Click on plugin button
-    buttons = world.css_find('div.mce-widget>button')
-
-    code_editor = [button for button in buttons if button.text == 'HTML']
-    assert_equal(1, len(code_editor))
-    code_editor[0].click()
-
-    perform_action_in_plugin(action)
-
-
-def perform_action_in_plugin(action):
-    # Wait for the plugin window to open.
-    world.wait_for_visible('.mce-window')
-
-    # Trigger the action
-    action()
-
-    # Click OK
-    world.css_click('.mce-primary')
-
-
-def get_fonts_list_panel(world):
-    menus = world.css_find('.mce-menu')
-    return menus[0]
-
-
-def get_available_fonts(font_panel):
-    font_spans = font_panel.find_by_css('.mce-text')
-    return {font_span.text: get_font_family(font_span) for font_span in font_spans}
-
-
-def get_font_family(font_span):
-    # get_attribute('style').replace('font-family: ', '').replace(';', '') is equivalent to
-    # value_of_css_property('font-family'). However, for reason unknown value_of_css_property fails tests in CI
-    # while works as expected in local development environment
-    return font_span._element.get_attribute('style').replace('font-family: ', '').replace(';', '')  # pylint: disable=protected-access
diff --git a/cms/djangoapps/contentstore/features/problem-editor.feature b/cms/djangoapps/contentstore/features/problem-editor.feature
deleted file mode 100644
index a239d109012..00000000000
--- a/cms/djangoapps/contentstore/features/problem-editor.feature
+++ /dev/null
@@ -1,66 +0,0 @@
-@shard_1
-Feature: CMS.Problem Editor
-  As a course author, I want to be able to create problems and edit their settings.
-
-  Scenario: User can revert display name to unset
-    Given I have created a Blank Common Problem
-    When I edit and select Settings
-    Then I can revert the display name to unset
-    And my display name is unset on save
-
-  Scenario: User can specify html in display name and it will be escaped
-    Given I have created a Blank Common Problem
-    When I edit and select Settings
-    Then I can specify html in the display name and save
-    And the problem display name is "<script>alert('test')</script>"
-
-  # IE will not click the revert button properly
-  @skip_internetexplorer
-  Scenario: User can select values in a Select
-    Given I have created a Blank Common Problem
-    When I edit and select Settings
-    Then I can select Per Student for Randomization
-    And my change to randomization is persisted
-    And I can revert to the default value for randomization
-
-  # Safari will input it as 35.
-  @skip_safari
-  Scenario: User can modify float input values
-    Given I have created a Blank Common Problem
-    When I edit and select Settings
-    Then I can set the weight to "3.5"
-    And my change to weight is persisted
-    And I can revert to the default value of unset for weight
-
-  Scenario: User cannot type letters in float number field
-    Given I have created a Blank Common Problem
-    When I edit and select Settings
-    Then if I set the weight to "abc", it remains unset
-
-  # Safari will input it as 234.
-  @skip_safari
-  Scenario: User cannot type decimal values integer number field
-    Given I have created a Blank Common Problem
-    When I edit and select Settings
-    Then if I set the max attempts to "2.34", it will persist as a valid integer
-
-  # Safari will input it incorrectly
-  @skip_safari
-  Scenario: User cannot type out of range values in an integer number field
-    Given I have created a Blank Common Problem
-    When I edit and select Settings
-    Then if I set the max attempts to "-3", it will persist as a valid integer
-
-  # Safari will input it as 35.
-  @skip_safari
-  Scenario: Settings changes are not saved on Cancel
-    Given I have created a Blank Common Problem
-    When I edit and select Settings
-    Then I can set the weight to "3.5"
-    And I can modify the display name
-    Then If I press Cancel my changes are not persisted
-
-  Scenario: Cheat sheet visible on toggle
-    Given I have created a Blank Common Problem
-    And I can edit the problem
-    Then I can see cheatsheet
diff --git a/cms/djangoapps/contentstore/features/problem-editor.py b/cms/djangoapps/contentstore/features/problem-editor.py
deleted file mode 100644
index 72b46a733bf..00000000000
--- a/cms/djangoapps/contentstore/features/problem-editor.py
+++ /dev/null
@@ -1,391 +0,0 @@
-# disable missing docstring
-# pylint: disable=missing-docstring
-# pylint: disable=no-member
-
-import json
-
-from lettuce import step, world
-from openedx.core.lib.tests.tools import assert_equal, assert_true  # pylint: disable=no-name-in-module
-
-from cms.djangoapps.contentstore.features.advanced_settings import ADVANCED_MODULES_KEY, change_value
-from cms.djangoapps.contentstore.features.common import open_new_course, type_in_codemirror
-from cms.djangoapps.contentstore.features.course_import import import_file
-
-DISPLAY_NAME = "Display Name"
-MAXIMUM_ATTEMPTS = "Maximum Attempts"
-PROBLEM_WEIGHT = "Problem Weight"
-RANDOMIZATION = 'Randomization'
-SHOW_ANSWER = "Show Answer"
-SHOW_ANSWER_AFTER_SOME_NUMBER_OF_ATTEMPTS = 'Show Answer: Number of Attempts'
-SHOW_RESET_BUTTON = "Show Reset Button"
-TIMER_BETWEEN_ATTEMPTS = "Timer Between Attempts"
-MATLAB_API_KEY = "Matlab API key"
-
-
-@step('I have created a Blank Common Problem$')
-def i_created_blank_common_problem(step):
-    step.given('I am in Studio editing a new unit')
-    step.given("I have created another Blank Common Problem")
-
-
-@step('I have created a unit with advanced module "(.*)"$')
-def i_created_unit_with_advanced_module(step, advanced_module):
-    step.given('I am in Studio editing a new unit')
-
-    url = world.browser.url
-    step.given("I select the Advanced Settings")
-    change_value(step, ADVANCED_MODULES_KEY, '["{}"]'.format(advanced_module))
-    world.visit(url)
-    world.wait_for_xmodule()
-
-
-@step('I have created an advanced component "(.*)" of type "(.*)"')
-def i_create_new_advanced_component(step, component_type, advanced_component):
-    world.create_component_instance(
-        step=step,
-        category='advanced',
-        component_type=component_type,
-        advanced_component=advanced_component
-    )
-
-
-@step('I have created another Blank Common Problem$')
-def i_create_new_common_problem(step):
-    world.create_component_instance(
-        step=step,
-        category='problem',
-        component_type='Blank Common Problem'
-    )
-
-
-@step('when I mouseover on "(.*)"')
-def i_mouseover_on_html_component(_step, element_class):
-    action_css = '.{}'.format(element_class)
-    world.trigger_event(action_css, event='mouseover')
-
-
-@step(u'I can see Reply to Annotation link$')
-def i_see_reply_to_annotation_link(_step):
-    css_selector = 'a.annotatable-reply'
-    world.wait_for_visible(css_selector)
-
-
-@step(u'I see that page has scrolled "(.*)" when I click on "(.*)" link$')
-def i_see_annotation_problem_page_scrolls(_step, scroll_direction, link_css):
-    scroll_js = "$(window).scrollTop();"
-    scroll_height_before = world.browser.evaluate_script(scroll_js)
-    world.css_click("a.{}".format(link_css))
-    scroll_height_after = world.browser.evaluate_script(scroll_js)
-    if scroll_direction == "up":
-        assert scroll_height_after < scroll_height_before
-    elif scroll_direction == "down":
-        assert scroll_height_after > scroll_height_before
-
-
-@step('I have created an advanced problem of type "(.*)"$')
-def i_create_new_advanced_problem(step, component_type):
-    world.create_component_instance(
-        step=step,
-        category='problem',
-        component_type=component_type,
-        is_advanced=True
-    )
-
-
-@step('I edit and select Settings$')
-def i_edit_and_select_settings(_step):
-    world.edit_component_and_select_settings()
-
-
-@step('I see the advanced settings and their expected values$')
-def i_see_advanced_settings_with_values(_step):
-    world.verify_all_setting_entries(
-        [
-            [DISPLAY_NAME, "Blank Common Problem", True],
-            [MATLAB_API_KEY, "", False],
-            [MAXIMUM_ATTEMPTS, "", False],
-            [PROBLEM_WEIGHT, "", False],
-            [RANDOMIZATION, "Never", False],
-            [SHOW_ANSWER, "Finished", False],
-            [SHOW_ANSWER_AFTER_SOME_NUMBER_OF_ATTEMPTS, '0', False],
-            [SHOW_RESET_BUTTON, "False", False],
-            [TIMER_BETWEEN_ATTEMPTS, "0", False],
-        ])
-
-
-@step('I can modify the display name')
-def i_can_modify_the_display_name(_step):
-    # Verifying that the display name can be a string containing a floating point value
-    # (to confirm that we don't throw an error because it is of the wrong type).
-    index = world.get_setting_entry_index(DISPLAY_NAME)
-    world.set_field_value(index, '3.4')
-    verify_modified_display_name()
-
-
-@step('my display name change is persisted on save')
-def my_display_name_change_is_persisted_on_save(step):
-    world.save_component_and_reopen(step)
-    verify_modified_display_name()
-
-
-@step('the problem display name is "(.*)"$')
-def verify_problem_display_name(_step, name):
-    """
-    name is uppercased because the heading styles are uppercase in css
-    """
-    assert_equal(name, world.browser.find_by_css('.problem-header').text)
-
-
-@step('I can specify special characters in the display name')
-def i_can_modify_the_display_name_with_special_chars(_step):
-    index = world.get_setting_entry_index(DISPLAY_NAME)
-    world.set_field_value(index, "updated ' \" &")
-    verify_modified_display_name_with_special_chars()
-
-
-@step('I can specify html in the display name and save')
-def i_can_modify_the_display_name_with_html(_step):
-    """
-    If alert appear on save then UnexpectedAlertPresentException
-    will occur and test will fail.
-    """
-    index = world.get_setting_entry_index(DISPLAY_NAME)
-    world.set_field_value(index, "<script>alert('test')</script>")
-    verify_modified_display_name_with_html()
-    world.save_component()
-
-
-@step('my special characters and persisted on save')
-def special_chars_persisted_on_save(step):
-    world.save_component_and_reopen(step)
-    verify_modified_display_name_with_special_chars()
-
-
-@step('I can revert the display name to unset')
-def can_revert_display_name_to_unset(_step):
-    world.revert_setting_entry(DISPLAY_NAME)
-    verify_unset_display_name()
-
-
-@step('my display name is unset on save')
-def my_display_name_is_persisted_on_save(step):
-    world.save_component_and_reopen(step)
-    verify_unset_display_name()
-
-
-@step('I can select Per Student for Randomization')
-def i_can_select_per_student_for_randomization(_step):
-    world.browser.select(RANDOMIZATION, "Per Student")
-    verify_modified_randomization()
-
-
-@step('my change to randomization is persisted')
-def my_change_to_randomization_is_persisted(step):
-    world.save_component_and_reopen(step)
-    verify_modified_randomization()
-
-
-@step('I can revert to the default value for randomization')
-def i_can_revert_to_default_for_randomization(step):
-    world.revert_setting_entry(RANDOMIZATION)
-    world.save_component_and_reopen(step)
-    world.verify_setting_entry(world.get_setting_entry(RANDOMIZATION), RANDOMIZATION, "Never", False)
-
-
-@step('I can set the weight to "(.*)"?')
-def i_can_set_weight(_step, weight):
-    set_weight(weight)
-    verify_modified_weight()
-
-
-@step('my change to weight is persisted')
-def my_change_to_weight_is_persisted(step):
-    world.save_component_and_reopen(step)
-    verify_modified_weight()
-
-
-@step('I can revert to the default value of unset for weight')
-def i_can_revert_to_default_for_unset_weight(step):
-    world.revert_setting_entry(PROBLEM_WEIGHT)
-    world.save_component_and_reopen(step)
-    world.verify_setting_entry(world.get_setting_entry(PROBLEM_WEIGHT), PROBLEM_WEIGHT, "", False)
-
-
-@step('if I set the weight to "(.*)", it remains unset')
-def set_the_weight_to_abc(step, bad_weight):
-    set_weight(bad_weight)
-    # We show the clear button immediately on type, hence the "True" here.
-    world.verify_setting_entry(world.get_setting_entry(PROBLEM_WEIGHT), PROBLEM_WEIGHT, "", True)
-    world.save_component_and_reopen(step)
-    # But no change was actually ever sent to the model, so on reopen, explicitly_set is False
-    world.verify_setting_entry(world.get_setting_entry(PROBLEM_WEIGHT), PROBLEM_WEIGHT, "", False)
-
-
-@step('if I set the max attempts to "(.*)", it will persist as a valid integer$')
-def set_the_max_attempts(step, max_attempts_set):
-    # on firefox with selenium, the behavior is different.
-    # eg 2.34 displays as 2.34 and is persisted as 2
-    index = world.get_setting_entry_index(MAXIMUM_ATTEMPTS)
-    world.set_field_value(index, max_attempts_set)
-    world.save_component_and_reopen(step)
-    value = world.css_value('input.setting-input', index=index)
-    assert value != "", "max attempts is blank"
-    assert int(value) >= 0
-
-
-@step('Edit High Level Source is not visible')
-def edit_high_level_source_not_visible(step):
-    verify_high_level_source_links(step, False)
-
-
-@step('Edit High Level Source is visible')
-def edit_high_level_source_links_visible(step):
-    verify_high_level_source_links(step, True)
-
-
-@step('If I press Cancel my changes are not persisted')
-def cancel_does_not_save_changes(step):
-    world.cancel_component(step)
-    step.given("I edit and select Settings")
-    step.given("I see the advanced settings and their expected values")
-
-
-@step('I have enabled latex compiler')
-def enable_latex_compiler(step):
-    url = world.browser.url
-    step.given("I select the Advanced Settings")
-    change_value(step, 'Enable LaTeX Compiler', 'true')
-    world.visit(url)
-    world.wait_for_xmodule()
-
-
-@step('I have created a LaTeX Problem')
-def create_latex_problem(step):
-    step.given('I am in Studio editing a new unit')
-    step.given('I have enabled latex compiler')
-    world.create_component_instance(
-        step=step,
-        category='problem',
-        component_type='Problem Written in LaTeX',
-        is_advanced=True
-    )
-
-
-@step('I edit and compile the High Level Source')
-def edit_latex_source(_step):
-    open_high_level_source()
-    type_in_codemirror(1, "hi")
-    world.css_click('.hls-compile')
-
-
-@step('my change to the High Level Source is persisted')
-def high_level_source_persisted(_step):
-    def verify_text(_driver):
-        css_sel = '.problem div>span'
-        return world.css_text(css_sel) == 'hi'
-
-    world.wait_for(verify_text, timeout=10)
-
-
-@step('I view the High Level Source I see my changes')
-def high_level_source_in_editor(_step):
-    open_high_level_source()
-    assert_equal('hi', world.css_value('.source-edit-box'))
-
-
-@step(u'I have an empty course')
-def i_have_empty_course(_step):
-    open_new_course()
-
-
-@step(u'I import the file "([^"]*)"$')
-def i_import_the_file(_step, filename):
-    import_file(filename)
-
-
-@step(u'I go to the vertical "([^"]*)"$')
-def i_go_to_vertical(_step, vertical):
-    world.css_click("span:contains('{0}')".format(vertical))
-
-
-@step(u'I go to the unit "([^"]*)"$')
-def i_go_to_unit(_step, unit):
-    loc = "window.location = $(\"span:contains('{0}')\").closest('a').attr('href')".format(unit)
-    world.browser.execute_script(loc)
-
-
-@step(u'I see a message that says "([^"]*)"$')
-def i_can_see_message(_step, msg):
-    msg = json.dumps(msg)     # escape quotes
-    world.css_has_text("h2.title", msg)
-
-
-@step(u'I can edit the problem$')
-def i_can_edit_problem(_step):
-    world.edit_component()
-
-
-@step(u'I edit first blank advanced problem for annotation response$')
-def i_edit_blank_problem_for_annotation_response(_step):
-    world.edit_component(1)
-    text = """
-        <problem>
-            <annotationresponse>
-                <annotationinput><text>Text of annotation</text></annotationinput>
-            </annotationresponse>
-        </problem>"""
-    type_in_codemirror(0, text)
-    world.save_component()
-
-
-@step(u'I can see cheatsheet$')
-def verify_cheat_sheet_displaying(_step):
-    world.css_click(".cheatsheet-toggle")
-    css_selector = '.simple-editor-cheatsheet'
-    world.wait_for_visible(css_selector)
-
-
-def verify_high_level_source_links(step, visible):
-    if visible:
-        assert_true(world.is_css_present('.launch-latex-compiler'),
-                    msg="Expected to find the latex button but it is not present.")
-    else:
-        assert_true(world.is_css_not_present('.launch-latex-compiler'),
-                    msg="Expected not to find the latex button but it is present.")
-
-    world.cancel_component(step)
-
-
-def verify_modified_weight():
-    world.verify_setting_entry(world.get_setting_entry(PROBLEM_WEIGHT), PROBLEM_WEIGHT, "3.5", True)
-
-
-def verify_modified_randomization():
-    world.verify_setting_entry(world.get_setting_entry(RANDOMIZATION), RANDOMIZATION, "Per Student", True)
-
-
-def verify_modified_display_name():
-    world.verify_setting_entry(world.get_setting_entry(DISPLAY_NAME), DISPLAY_NAME, '3.4', True)
-
-
-def verify_modified_display_name_with_special_chars():
-    world.verify_setting_entry(world.get_setting_entry(DISPLAY_NAME), DISPLAY_NAME, "updated ' \" &", True)
-
-
-def verify_modified_display_name_with_html():
-    world.verify_setting_entry(world.get_setting_entry(DISPLAY_NAME),
-                               DISPLAY_NAME, "<script>alert('test')</script>", True)
-
-
-def verify_unset_display_name():
-    world.verify_setting_entry(world.get_setting_entry(DISPLAY_NAME), DISPLAY_NAME, 'Blank Advanced Problem', False)
-
-
-def set_weight(weight):
-    index = world.get_setting_entry_index(PROBLEM_WEIGHT)
-    world.set_field_value(index, weight)
-
-
-def open_high_level_source():
-    world.edit_component()
-    world.css_click('.launch-latex-compiler > a')
diff --git a/cms/djangoapps/contentstore/features/signup.py b/cms/djangoapps/contentstore/features/signup.py
deleted file mode 100644
index e0b2ca9349d..00000000000
--- a/cms/djangoapps/contentstore/features/signup.py
+++ /dev/null
@@ -1,71 +0,0 @@
-# pylint: disable=missing-docstring
-# pylint: disable=no-member
-
-from lettuce import step, world
-
-
-@step('I fill in the registration form$')
-def i_fill_in_the_registration_form(_step):
-    def fill_in_reg_form():
-        register_form = world.css_find('form#register_form')
-        register_form.find_by_name('email').fill('robot+studio@edx.org')
-        register_form.find_by_name('password').fill('test')
-        register_form.find_by_name('username').fill('robot-studio')
-        register_form.find_by_name('name').fill('Robot Studio')
-        register_form.find_by_name('terms_of_service').click()
-    world.retry_on_exception(fill_in_reg_form)
-
-
-@step('I press the Create My Account button on the registration form$')
-def i_press_the_button_on_the_registration_form(_step):
-    submit_css = 'form#register_form button#submit'
-    world.css_click(submit_css)
-
-
-@step('I should see an email verification prompt')
-def i_should_see_an_email_verification_prompt(_step):
-    world.css_has_text('h1.page-header', u'Studio Home')
-    world.css_has_text('div.msg h3.title', u'We need to verify your email address')
-
-
-@step(u'I fill in and submit the signin form$')
-def i_fill_in_the_signin_form(_step):
-    def fill_login_form():
-        login_form = world.browser.find_by_css('form#login_form')
-        login_form.find_by_name('email').fill('robot+studio@edx.org')
-        login_form.find_by_name('password').fill('test')
-        login_form.find_by_name('submit').click()
-    world.retry_on_exception(fill_login_form)
-
-
-@step(u'I should( not)? see a login error message$')
-def i_should_see_a_login_error(_step, should_not_see):
-    if should_not_see:
-        # the login error may be absent or invisible. Check absence first,
-        # because css_visible will throw an exception if the element is not present
-        if world.is_css_present('div#login_error'):
-            assert not world.css_visible('div#login_error')
-    else:
-        assert world.css_visible('div#login_error')
-
-
-@step(u'I fill in and submit the signin form incorrectly$')
-def i_goof_in_the_signin_form(_step):
-    def fill_login_form():
-        login_form = world.browser.find_by_css('form#login_form')
-        login_form.find_by_name('email').fill('robot+studio@edx.org')
-        login_form.find_by_name('password').fill('oops')
-        login_form.find_by_name('submit').click()
-    world.retry_on_exception(fill_login_form)
-
-
-@step(u'I edit the password field$')
-def i_edit_the_password_field(_step):
-    password_css = 'form#login_form input#password'
-    world.css_fill(password_css, 'test')
-
-
-@step(u'I submit the signin form$')
-def i_submit_the_signin_form(_step):
-    submit_css = 'form#login_form button#submit'
-    world.css_click(submit_css)
diff --git a/cms/envs/acceptance.py b/cms/envs/acceptance.py
deleted file mode 100644
index a37cf8d1700..00000000000
--- a/cms/envs/acceptance.py
+++ /dev/null
@@ -1,149 +0,0 @@
-"""
-This config file extends the test environment configuration
-so that we can run the lettuce acceptance tests.
-"""
-
-# We intentionally define lots of variables that aren't used, and
-# want to import all variables from base settings files
-# pylint: disable=wildcard-import, unused-wildcard-import
-
-from .test import *
-
-# You need to start the server in debug mode,
-# otherwise the browser will not render the pages correctly
-DEBUG = True
-
-# Output Django logs to a file
-import logging
-logging.basicConfig(filename=TEST_ROOT / "log" / "cms_acceptance.log", level=logging.ERROR)
-
-# set root logger level
-logging.getLogger().setLevel(logging.ERROR)
-
-import os
-
-
-def seed():
-    return os.getppid()
-
-# Silence noisy logs
-LOG_OVERRIDES = [
-    ('track.middleware', logging.CRITICAL),
-    ('codejail.safe_exec', logging.ERROR),
-    ('edx.courseware', logging.ERROR),
-    ('edxmako.shortcuts', logging.ERROR),
-    ('audit', logging.ERROR),
-    ('contentstore.views.import_export', logging.CRITICAL),
-    ('xmodule.x_module', logging.CRITICAL),
-]
-
-for log_name, log_level in LOG_OVERRIDES:
-    logging.getLogger(log_name).setLevel(log_level)
-
-update_module_store_settings(
-    MODULESTORE,
-    doc_store_settings={
-        'db': 'acceptance_xmodule',
-        'collection': 'acceptance_modulestore_%s' % seed(),
-    },
-    module_store_options={
-        'default_class': 'xmodule.raw_module.RawDescriptor',
-        'fs_root': TEST_ROOT / "data",
-    },
-    default_store=os.environ.get('DEFAULT_STORE', 'draft'),
-)
-
-CONTENTSTORE = {
-    'ENGINE': 'xmodule.contentstore.mongo.MongoContentStore',
-    'DOC_STORE_CONFIG': {
-        'host': 'localhost',
-        'db': 'acceptance_xcontent_%s' % seed(),
-    },
-    # allow for additional options that can be keyed on a name, e.g. 'trashcan'
-    'ADDITIONAL_OPTIONS': {
-        'trashcan': {
-            'bucket': 'trash_fs'
-        }
-    }
-}
-
-# Set this up so that 'paver cms --settings=acceptance' and running the
-# harvest command both use the same (test) database
-# which they can flush without messing up your dev db
-DATABASES = {
-    'default': {
-        'ENGINE': 'django.db.backends.sqlite3',
-        'NAME': TEST_ROOT / "db" / "test_edx.db",
-        'OPTIONS': {
-            'timeout': 30,
-        },
-        'ATOMIC_REQUESTS': True,
-        'TEST': {
-            'NAME': TEST_ROOT / "db" / "test_edx.db",
-        },
-    },
-    'student_module_history': {
-        'ENGINE': 'django.db.backends.sqlite3',
-        'NAME': TEST_ROOT / "db" / "test_student_module_history.db",
-        'OPTIONS': {
-            'timeout': 30,
-        },
-        'TEST': {
-            'NAME': TEST_ROOT / "db" / "test_student_module_history.db",
-        },
-    }
-}
-
-# Use the auto_auth workflow for creating users and logging them in
-FEATURES['AUTOMATIC_AUTH_FOR_TESTING'] = True
-FEATURES['RESTRICT_AUTOMATIC_AUTH'] = False
-
-# Forums are disabled in test.py to speed up unit tests, but we do not have
-# per-test control for lettuce acceptance tests.
-# If you are writing an acceptance test that needs the discussion service enabled,
-# do not write it in lettuce, but instead write it using bok-choy.
-# DO NOT CHANGE THIS SETTING HERE.
-FEATURES['ENABLE_DISCUSSION_SERVICE'] = False
-
-# HACK
-# Setting this flag to false causes imports to not load correctly in the lettuce python files
-# We do not yet understand why this occurs. Setting this to true is a stopgap measure
-USE_I18N = True
-
-# Include the lettuce app for acceptance testing, including the 'harvest' django-admin command
-# django.contrib.staticfiles used to be loaded by lettuce, now we must add it ourselves
-# django.contrib.staticfiles is not added to lms as there is a ^/static$ route built in to the app
-INSTALLED_APPS.append('lettuce.django')
-LETTUCE_APPS = ('contentstore',)
-LETTUCE_BROWSER = os.environ.get('LETTUCE_BROWSER', 'chrome')
-
-# Where to run: local, saucelabs, or grid
-LETTUCE_SELENIUM_CLIENT = os.environ.get('LETTUCE_SELENIUM_CLIENT', 'local')
-
-SELENIUM_GRID = {
-    'URL': 'http://127.0.0.1:4444/wd/hub',
-    'BROWSER': LETTUCE_BROWSER,
-}
-
-#####################################################################
-# Lastly, see if the developer has any local overrides.
-try:
-    from .private import *
-except ImportError:
-    pass
-
-# Point the URL used to test YouTube availability to our stub YouTube server
-YOUTUBE_HOSTNAME = os.environ.get('BOK_CHOY_HOSTNAME', '127.0.0.1')
-YOUTUBE['API'] = "http://{0}:{1}/get_youtube_api/".format(YOUTUBE_HOSTNAME, YOUTUBE_PORT)
-YOUTUBE['METADATA_URL'] = "http://{0}:{1}/test_youtube/".format(YOUTUBE_HOSTNAME, YOUTUBE_PORT)
-YOUTUBE['TEXT_API']['url'] = "{0}:{1}/test_transcripts_youtube/".format(YOUTUBE_HOSTNAME, YOUTUBE_PORT)
-YOUTUBE['TEST_TIMEOUT'] = 1500
-
-# Generate a random UUID so that different runs of acceptance tests don't break each other
-import uuid
-SECRET_KEY = uuid.uuid4().hex
-
-############################### PIPELINE #######################################
-
-PIPELINE_ENABLED = False
-REQUIRE_DEBUG = True
diff --git a/cms/envs/acceptance_docker.py b/cms/envs/acceptance_docker.py
deleted file mode 100644
index b00a94db5f7..00000000000
--- a/cms/envs/acceptance_docker.py
+++ /dev/null
@@ -1,61 +0,0 @@
-"""
-This config file extends the test environment configuration
-so that we can run the lettuce acceptance tests.
-"""
-
-# We intentionally define lots of variables that aren't used, and
-# want to import all variables from base settings files
-# pylint: disable=wildcard-import, unused-wildcard-import
-
-import os
-
-os.environ['EDXAPP_TEST_MONGO_HOST'] = os.environ.get('EDXAPP_TEST_MONGO_HOST', 'edx.devstack.mongo')
-
-# noinspection PyUnresolvedReferences
-from .acceptance import *
-
-update_module_store_settings(
-    MODULESTORE,
-    doc_store_settings={
-        'db': 'acceptance_xmodule',
-        'host': MONGO_HOST,
-        'port': MONGO_PORT_NUM,
-        'collection': 'acceptance_modulestore_%s' % seed(),
-    },
-    module_store_options={
-        'default_class': 'xmodule.raw_module.RawDescriptor',
-        'fs_root': TEST_ROOT / "data",
-    },
-    default_store=os.environ.get('DEFAULT_STORE', 'draft'),
-)
-
-CONTENTSTORE = {
-    'ENGINE': 'xmodule.contentstore.mongo.MongoContentStore',
-    'DOC_STORE_CONFIG': {
-        'host': MONGO_HOST,
-        'port': MONGO_PORT_NUM,
-        'db': 'acceptance_xcontent_%s' % seed(),
-    },
-    # allow for additional options that can be keyed on a name, e.g. 'trashcan'
-    'ADDITIONAL_OPTIONS': {
-        'trashcan': {
-            'bucket': 'trash_fs'
-        }
-    }
-}
-
-# Where to run: local, saucelabs, or grid
-LETTUCE_SELENIUM_CLIENT = os.environ.get('LETTUCE_SELENIUM_CLIENT', 'grid')
-SELENIUM_HOST = 'edx.devstack.{}'.format(LETTUCE_BROWSER)
-SELENIUM_PORT = os.environ.get('SELENIUM_PORT', '4444')
-
-SELENIUM_GRID = {
-    'URL': 'http://{}:{}/wd/hub'.format(SELENIUM_HOST, SELENIUM_PORT),
-    'BROWSER': LETTUCE_BROWSER,
-}
-
-# Point the URL used to test YouTube availability to our stub YouTube server
-LETTUCE_HOST = os.environ['BOK_CHOY_HOSTNAME']
-YOUTUBE['API'] = "http://{}:{}/get_youtube_api/".format(LETTUCE_HOST, YOUTUBE_PORT)
-YOUTUBE['METADATA_URL'] = "http://{}:{}/test_youtube/".format(LETTUCE_HOST, YOUTUBE_PORT)
-YOUTUBE['TEXT_API']['url'] = "{}:{}/test_transcripts_youtube/".format(LETTUCE_HOST, YOUTUBE_PORT)
diff --git a/cms/envs/test.py b/cms/envs/test.py
index a4592d6a7bc..6b64990c9f7 100644
--- a/cms/envs/test.py
+++ b/cms/envs/test.py
@@ -185,7 +185,6 @@ CLEAR_REQUEST_CACHE_ON_TASK_COMPLETION = False
 
 # These ports are carefully chosen so that if the browser needs to
 # access them, they will be available through the SauceLabs SSH tunnel
-LETTUCE_SERVER_PORT = 8003
 XQUEUE_PORT = 8040
 YOUTUBE_PORT = 8031
 LTI_PORT = 8765
diff --git a/common/djangoapps/terrain/__init__.py b/common/djangoapps/terrain/__init__.py
index b769c8414c9..e69de29bb2d 100644
--- a/common/djangoapps/terrain/__init__.py
+++ b/common/djangoapps/terrain/__init__.py
@@ -1,14 +0,0 @@
-# Use this as your lettuce terrain file so that the common steps
-# across all lms apps can be put in terrain/common
-# See https://groups.google.com/forum/?fromgroups=#!msg/lettuce-users/5VyU9B4HcX8/USgbGIJdS5QJ
-
-import lettuce
-from django.utils.functional import SimpleLazyObject
-from .browser import *  # pylint: disable=wildcard-import
-from .factories import absorb_factories
-from .steps import *  # pylint: disable=wildcard-import
-from .setup_prereqs import *  # pylint: disable=wildcard-import
-
-# Delay absorption of factories until the next access,
-# after Django apps have finished initializing
-setattr(lettuce, 'world', SimpleLazyObject(absorb_factories))
diff --git a/common/djangoapps/terrain/browser.py b/common/djangoapps/terrain/browser.py
deleted file mode 100644
index 455ba2cf251..00000000000
--- a/common/djangoapps/terrain/browser.py
+++ /dev/null
@@ -1,288 +0,0 @@
-"""
-Browser set up for acceptance tests.
-"""
-
-# pylint: disable=no-member
-# pylint: disable=unused-argument
-
-from base64 import encodestring
-from json import dumps
-from logging import getLogger
-
-import requests
-from django.conf import settings
-from django.core.management import call_command
-from lettuce import after, before, world
-from selenium.common.exceptions import WebDriverException
-from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
-from splinter.browser import Browser
-
-from xmodule.contentstore.django import _CONTENTSTORE
-
-LOGGER = getLogger(__name__)
-LOGGER.info("Loading the lettuce acceptance testing terrain file...")
-
-MAX_VALID_BROWSER_ATTEMPTS = 20
-GLOBAL_SCRIPT_TIMEOUT = 60
-
-
-def get_saucelabs_username_and_key():
-    """
-    Returns the Sauce Labs username and access ID as set by environment variables
-    """
-    return {"username": settings.SAUCE.get('USERNAME'), "access-key": settings.SAUCE.get('ACCESS_ID')}
-
-
-def set_saucelabs_job_status(jobid, passed=True):
-    """
-    Sets the job status on sauce labs
-    """
-    config = get_saucelabs_username_and_key()
-    url = 'http://saucelabs.com/rest/v1/{}/jobs/{}'.format(config['username'], world.jobid)
-    body_content = dumps({"passed": passed})
-    base64string = encodestring('{}:{}'.format(config['username'], config['access-key']))[:-1]
-    headers = {"Authorization": "Basic {}".format(base64string)}
-    result = requests.put(url, data=body_content, headers=headers)
-    return result.status_code == 200
-
-
-def make_saucelabs_desired_capabilities():
-    """
-    Returns a DesiredCapabilities object corresponding to the environment sauce parameters
-    """
-    desired_capabilities = settings.SAUCE.get('BROWSER', DesiredCapabilities.CHROME)
-    desired_capabilities['platform'] = settings.SAUCE.get('PLATFORM')
-    desired_capabilities['version'] = settings.SAUCE.get('VERSION')
-    desired_capabilities['device-type'] = settings.SAUCE.get('DEVICE')
-    desired_capabilities['name'] = settings.SAUCE.get('SESSION')
-    desired_capabilities['build'] = settings.SAUCE.get('BUILD')
-    desired_capabilities['video-upload-on-pass'] = False
-    desired_capabilities['sauce-advisor'] = False
-    desired_capabilities['capture-html'] = True
-    desired_capabilities['record-screenshots'] = True
-    desired_capabilities['selenium-version'] = "2.34.0"
-    desired_capabilities['max-duration'] = 3600
-    desired_capabilities['public'] = 'public restricted'
-    return desired_capabilities
-
-
-@before.harvest
-def initial_setup(server):
-    """
-    Launch the browser once before executing the tests.
-    """
-    world.absorb(settings.LETTUCE_SELENIUM_CLIENT, 'LETTUCE_SELENIUM_CLIENT')
-
-    if world.LETTUCE_SELENIUM_CLIENT == 'local':
-        browser_driver = getattr(settings, 'LETTUCE_BROWSER', 'chrome')
-
-        if browser_driver == 'chrome':
-            desired_capabilities = DesiredCapabilities.CHROME
-            desired_capabilities['loggingPrefs'] = {
-                'browser': 'ALL',
-            }
-        else:
-            desired_capabilities = {}
-
-        # There is an issue with ChromeDriver2 r195627 on Ubuntu
-        # in which we sometimes get an invalid browser session.
-        # This is a work-around to ensure that we get a valid session.
-        success = False
-        num_attempts = 0
-        while (not success) and num_attempts < MAX_VALID_BROWSER_ATTEMPTS:
-
-            # Load the browser and try to visit the main page
-            # If the browser couldn't be reached or
-            # the browser session is invalid, this will
-            # raise a WebDriverException
-            try:
-                if browser_driver == 'firefox':
-                    # Lettuce initializes differently for firefox, and sending
-                    # desired_capabilities will not work. So initialize without
-                    # sending desired_capabilities.
-                    world.browser = Browser(browser_driver)
-                else:
-                    world.browser = Browser(browser_driver, desired_capabilities=desired_capabilities)
-                world.browser.driver.set_script_timeout(GLOBAL_SCRIPT_TIMEOUT)
-                world.visit('/')
-
-            except WebDriverException:
-                LOGGER.warn("Error acquiring %s browser, retrying", browser_driver, exc_info=True)
-                if hasattr(world, 'browser'):
-                    world.browser.quit()
-                num_attempts += 1
-
-            else:
-                success = True
-
-        # If we were unable to get a valid session within the limit of attempts,
-        # then we cannot run the tests.
-        if not success:
-            raise IOError("Could not acquire valid {driver} browser session.".format(driver=browser_driver))
-
-        world.absorb(0, 'IMPLICIT_WAIT')
-        world.browser.driver.set_window_size(1280, 1024)
-
-    elif world.LETTUCE_SELENIUM_CLIENT == 'saucelabs':
-        config = get_saucelabs_username_and_key()
-        world.browser = Browser(
-            'remote',
-            url="http://{}:{}@ondemand.saucelabs.com:80/wd/hub".format(config['username'], config['access-key']),
-            **make_saucelabs_desired_capabilities()
-        )
-        world.absorb(30, 'IMPLICIT_WAIT')
-        world.browser.set_script_timeout(GLOBAL_SCRIPT_TIMEOUT)
-
-    elif world.LETTUCE_SELENIUM_CLIENT == 'grid':
-        world.browser = Browser(
-            'remote',
-            url=settings.SELENIUM_GRID.get('URL'),
-            browser=settings.SELENIUM_GRID.get('BROWSER'),
-        )
-        world.absorb(30, 'IMPLICIT_WAIT')
-        world.browser.driver.set_script_timeout(GLOBAL_SCRIPT_TIMEOUT)
-
-    else:
-        raise Exception("Unknown selenium client '{}'".format(world.LETTUCE_SELENIUM_CLIENT))
-
-    world.browser.driver.implicitly_wait(world.IMPLICIT_WAIT)
-    world.absorb(world.browser.driver.session_id, 'jobid')
-
-
-@before.each_scenario
-def reset_data(scenario):
-    """
-    Clean out the django test database defined in the
-    envs/acceptance.py file: edx-platform/db/test_edx.db
-    """
-    LOGGER.debug("Flushing the test database...")
-    call_command('flush', interactive=False, verbosity=0)
-    world.absorb({}, 'scenario_dict')
-
-
-@before.each_scenario
-def configure_screenshots(scenario):
-    """
-    Before each scenario, turn off automatic screenshots.
-
-    Args: str, scenario. Name of current scenario.
-    """
-    world.auto_capture_screenshots = False
-
-
-@after.each_scenario
-def clear_data(scenario):
-    world.spew('scenario_dict')
-
-
-@after.each_scenario
-def reset_databases(scenario):
-    """
-    After each scenario, all databases are cleared/dropped.  Contentstore data are stored in unique databases
-    whereas modulestore data is in unique collection names.  This data is created implicitly during the scenarios.
-    If no data is created during the test, these lines equivilently do nothing.
-    """
-    import xmodule.modulestore.django
-    xmodule.modulestore.django.modulestore()._drop_database()  # pylint: disable=protected-access
-    xmodule.modulestore.django.clear_existing_modulestores()
-    _CONTENTSTORE.clear()
-
-
-@world.absorb
-def capture_screenshot(image_name):
-    """
-    Capture a screenshot outputting it to a defined directory.
-    This function expects only the name of the file. It will generate
-    the full path of the output screenshot.
-
-    If the name contains spaces, they ill be converted to underscores.
-    """
-    output_dir = '{}/log/auto_screenshots'.format(settings.TEST_ROOT)
-    image_name = '{}/{}.png'.format(output_dir, image_name.replace(' ', '_'))
-    try:
-        world.browser.driver.save_screenshot(image_name)
-    except WebDriverException:
-        LOGGER.error("Could not capture a screenshot '{}'".format(image_name))
-
-
-@after.each_scenario
-def screenshot_on_error(scenario):
-    """
-    Save a screenshot to help with debugging.
-    """
-    if scenario.failed:
-        try:
-            output_dir = '{}/log'.format(settings.TEST_ROOT)
-            image_name = '{}/{}.png'.format(output_dir, scenario.name.replace(' ', '_'))
-            world.browser.driver.save_screenshot(image_name)
-        except WebDriverException:
-            LOGGER.error('Could not capture a screenshot')
-
-
-@after.each_scenario
-def capture_console_log(scenario):
-    """
-    Save the console log to help with debugging.
-    """
-    if scenario.failed:
-        log = world.browser.driver.get_log('browser')
-        try:
-            output_dir = '{}/log'.format(settings.TEST_ROOT)
-            file_name = '{}/{}.log'.format(output_dir, scenario.name.replace(' ', '_'))
-
-            with open(file_name, 'w') as output_file:
-                for line in log:
-                    output_file.write("{}{}".format(dumps(line), '\n'))
-
-        except WebDriverException:
-            LOGGER.error('Could not capture the console log')
-
-
-def capture_screenshot_for_step(step, when):
-    """
-    Useful method for debugging acceptance tests that are run in Vagrant.
-    This method runs automatically before and after each step of an acceptance
-    test scenario. The variable:
-
-         world.auto_capture_screenshots
-
-    either enables or disabled the taking of screenshots. To change the
-    variable there is a convenient step defined:
-
-        I (enable|disable) auto screenshots
-
-    If you just want to capture a single screenshot at a desired point in code,
-    you should use the method:
-
-        world.capture_screenshot("image_name")
-    """
-    if world.auto_capture_screenshots:
-        scenario_num = step.scenario.feature.scenarios.index(step.scenario) + 1
-        step_num = step.scenario.steps.index(step) + 1
-        step_func_name = step.defined_at.function.func_name
-        image_name = "{prefix:03d}__{num:03d}__{name}__{postfix}".format(
-            prefix=scenario_num,
-            num=step_num,
-            name=step_func_name,
-            postfix=when
-        )
-        world.capture_screenshot(image_name)
-
-
-@before.each_step
-def before_each_step(step):
-    capture_screenshot_for_step(step, '1_before')
-
-
-@after.each_step
-def after_each_step(step):
-    capture_screenshot_for_step(step, '2_after')
-
-
-@after.harvest
-def saucelabs_status(total):
-    """
-    Collect data for saucelabs.
-    """
-    if world.LETTUCE_SELENIUM_CLIENT == 'saucelabs':
-        set_saucelabs_job_status(world.jobid, total.scenarios_ran == total.scenarios_passed)
diff --git a/common/djangoapps/terrain/course_helpers.py b/common/djangoapps/terrain/course_helpers.py
deleted file mode 100644
index 94457a44fd9..00000000000
--- a/common/djangoapps/terrain/course_helpers.py
+++ /dev/null
@@ -1,77 +0,0 @@
-# pylint: disable=missing-docstring
-
-import urllib
-
-from django.apps import apps
-from django.contrib.auth import get_user_model
-from lettuce import world
-
-from xmodule.contentstore.django import _CONTENTSTORE
-
-
-@world.absorb
-def create_user(uname, password):
-
-    # If the user already exists, don't try to create it again
-    if len(get_user_model().objects.filter(username=uname)) > 0:
-        return
-
-    portal_user = world.UserFactory.build(username=uname, email=uname + '@edx.org')
-    portal_user.set_password(password)
-    portal_user.save()
-
-    registration = world.RegistrationFactory(user=portal_user)
-    registration.register(portal_user)
-    registration.activate()
-
-    world.UserProfileFactory(user=portal_user)
-
-
-@world.absorb
-def log_in(username='robot', password='test', email='robot@edx.org', name="Robot"):
-    """
-    Use the auto_auth feature to programmatically log the user in
-    """
-    url = '/auto_auth'
-    params = {'username': username, 'password': password, 'email': email, 'full_name': name}
-    url += "?" + urllib.urlencode(params)
-    world.visit(url)
-
-    # Save the user info in the world scenario_dict for use in the tests
-    user = get_user_model().objects.get(username=username)
-    world.scenario_dict['USER'] = user
-
-
-@world.absorb
-def register_by_course_key(course_key, username='robot', password='test', is_staff=False):
-    create_user(username, password)
-    user = get_user_model().objects.get(username=username)
-    # Note: this flag makes the user global staff - that is, an edX employee - not a course staff.
-    # See courseware.tests.factories for StaffFactory and InstructorFactory.
-    if is_staff:
-        user.is_staff = True
-        user.save()
-    apps.get_model('student', 'CourseEnrollment').enroll(user, course_key)
-
-
-@world.absorb
-def enroll_user(user, course_key):
-    # Activate user
-    registration = world.RegistrationFactory(user=user)
-    registration.register(user)
-    registration.activate()
-    # Enroll them in the course
-    apps.get_model('student', 'CourseEnrollment').enroll(user, course_key)
-
-
-@world.absorb
-def clear_courses():
-    # Flush and initialize the module store
-    # Note that if your test module gets in some weird state
-    # (though it shouldn't), do this manually
-    # from the bash shell to drop it:
-    # $ mongo test_xmodule --eval "db.dropDatabase()"
-    from xmodule.modulestore.django import clear_existing_modulestores, modulestore
-    modulestore()._drop_database()  # pylint: disable=protected-access
-    _CONTENTSTORE.clear()
-    clear_existing_modulestores()
diff --git a/common/djangoapps/terrain/factories.py b/common/djangoapps/terrain/factories.py
deleted file mode 100644
index 8df3f354d87..00000000000
--- a/common/djangoapps/terrain/factories.py
+++ /dev/null
@@ -1,30 +0,0 @@
-"""
-Factories are defined in other modules and absorbed here into the
-lettuce world so that they can be used by both unit tests
-and integration / BDD tests.
-"""
-from lettuce import world
-
-
-def absorb_factories():
-    """
-    Absorb the factories and return the resulting ``world`` object.
-    """
-    import course_modes.tests.factories as cmf
-    import student.tests.factories as sf
-    import xmodule.modulestore.tests.factories as xf
-
-    # Unlock XBlock factories, because we're randomizing the collection
-    # name above to prevent collisions
-    xf.XMODULE_FACTORY_LOCK.enable()
-
-    world.absorb(sf.UserFactory)
-    world.absorb(sf.UserProfileFactory)
-    world.absorb(sf.RegistrationFactory)
-    world.absorb(sf.GroupFactory)
-    world.absorb(sf.CourseEnrollmentAllowedFactory)
-    world.absorb(cmf.CourseModeFactory)
-    world.absorb(xf.CourseFactory)
-    world.absorb(xf.ItemFactory)
-
-    return world
diff --git a/common/djangoapps/terrain/setup_prereqs.py b/common/djangoapps/terrain/setup_prereqs.py
deleted file mode 100644
index 62ade035752..00000000000
--- a/common/djangoapps/terrain/setup_prereqs.py
+++ /dev/null
@@ -1,162 +0,0 @@
-"""
-Set up the prequisites for acceptance tests.
-
-This includes initialization and teardown for stub and video HTTP services
-and checking for external URLs that need to be accessible and responding.
-
-"""
-import re
-from logging import getLogger
-
-import requests
-from django.conf import settings
-from lettuce import after, before, world
-from selenium.common.exceptions import NoAlertPresentException
-
-from terrain.stubs.lti import StubLtiService
-from terrain.stubs.video_source import VideoSourceHttpService
-from terrain.stubs.xqueue import StubXQueueService
-from terrain.stubs.youtube import StubYouTubeService
-
-LOGGER = getLogger(__name__)
-
-SERVICES = {
-    "youtube": {"port": settings.YOUTUBE_PORT, "class": StubYouTubeService},
-    "xqueue": {"port": settings.XQUEUE_PORT, "class": StubXQueueService},
-    "lti": {"port": settings.LTI_PORT, "class": StubLtiService},
-}
-
-YOUTUBE_API_URLS = {
-    'main': 'https://www.youtube.com/',
-    'player': 'https://www.youtube.com/iframe_api',
-    # For transcripts, you need to check an actual video, so we will
-    # just specify our default video and see if that one is available.
-    'transcript': 'http://video.google.com/timedtext?lang=en&v=OEoXaMPEzfM',
-}
-
-
-@before.all  # pylint: disable=no-member
-def start_video_server():
-    """
-    Serve the HTML5 Video Sources from a local port
-    """
-    video_source_dir = '{}/data/video'.format(settings.TEST_ROOT)
-    video_server = VideoSourceHttpService(port_num=settings.VIDEO_SOURCE_PORT)
-    video_server.config['root_dir'] = video_source_dir
-    world.video_source = video_server
-
-
-@after.all  # pylint: disable=no-member
-def stop_video_server(_total):
-    """
-    Stop the HTML5 Video Source server after all tests have executed
-    """
-    video_server = getattr(world, 'video_source', None)
-    if video_server:
-        video_server.shutdown()
-
-
-@before.all  # pylint: disable=no-member
-def start_stub_servers():
-    """
-    Start all stub servers
-    """
-
-    for stub in SERVICES.keys():
-        start_stub(stub)
-
-
-@before.each_scenario  # pylint: disable=no-member
-def skip_youtube_if_not_available(scenario):
-    """
-
-    Scenario tags must be named with this convention:
-    @requires_stub_bar, where 'bar' is the name of the stub service to start
-
-    if 'bar' is 'youtube'
-        if 'youtube' is not available Then
-            DON'T start youtube stub server
-            ALSO DON'T start any other stub server BECAUSE we will SKIP this Scenario so no need to start any stub
-    else
-        start the stub server
-
-    """
-    tag_re = re.compile('requires_stub_(?P<server>[^_]+)')
-    for tag in scenario.tags:
-        requires = tag_re.match(tag)
-
-        if requires:
-            if requires.group('server') == 'youtube':
-                if not is_youtube_available(YOUTUBE_API_URLS):
-                    # A hackish way to skip a test in lettuce as there is no proper way to skip a test conditionally
-                    scenario.steps = []
-                    return
-
-    return
-
-
-def start_stub(name):
-    """
-    Start the required stub service running on a local port.
-    Since these services can be reconfigured on the fly,
-    we start them on a scenario basis when needed and
-    stop them at the end of the scenario.
-    """
-    service = SERVICES.get(name, None)
-    if service:
-        fake_server = service['class'](port_num=service['port'])
-        setattr(world, name, fake_server)
-
-
-def is_youtube_available(urls):
-    """
-    Check if the required youtube urls are available.
-    If they are not, then skip the scenario.
-    """
-    for name, url in urls.iteritems():
-        try:
-            response = requests.get(url, allow_redirects=False)
-        except requests.exceptions.ConnectionError:
-            LOGGER.warning("Connection Error. YouTube {0} service not available. Skipping this test.".format(name))
-            return False
-
-        status = response.status_code
-        if status >= 300:
-            LOGGER.warning(
-                "YouTube {0} service not available. Status code: {1}. Skipping this test.".format(name, status))
-
-            # No need to check all the URLs
-            return False
-
-    return True
-
-
-@after.all  # pylint: disable=no-member
-def stop_stubs(_scenario):
-    """
-    Shut down any stub services.
-    """
-    # close browser to ensure no open connections to the stub servers
-    world.browser.quit()
-    for name in SERVICES.keys():
-        stub_server = getattr(world, name, None)
-        if stub_server is not None:
-            stub_server.shutdown()
-
-
-@after.each_scenario  # pylint: disable=no-member
-def clear_alerts(_scenario):
-    """
-    Clear any alerts that might still exist, so that
-    the next scenario will not fail due to their existence.
-
-    Note that the splinter documentation indicates that
-    get_alert should return None if no alert is present,
-    however that is not the case. Instead a
-    NoAlertPresentException is raised.
-    """
-    try:
-        with world.browser.get_alert() as alert:
-            alert.dismiss()
-    except NoAlertPresentException:
-        pass
diff --git a/common/djangoapps/terrain/steps.py b/common/djangoapps/terrain/steps.py
deleted file mode 100644
index e4114ff6b99..00000000000
--- a/common/djangoapps/terrain/steps.py
+++ /dev/null
@@ -1,244 +0,0 @@
-# pylint: disable=missing-docstring
-# pylint: disable=redefined-outer-name
-
-# Disable the "wildcard import" warning so we can bring in all methods from
-# course helpers and ui helpers
-# pylint: disable=wildcard-import
-
-# Disable the "Unused import %s from wildcard import" warning
-# pylint: disable=unused-wildcard-import
-
-# Disable the "unused argument" warning because lettuce uses "step"
-# pylint: disable=unused-argument
-
-# django_url is assigned late in the process of loading lettuce,
-from logging import getLogger
-
-# so we import this as a module, and then read django_url from
-# it to get the correct value
-import lettuce.django
-from lettuce import step, world
-from opaque_keys.edx.keys import CourseKey
-
-from openedx.core.lib.tests.tools import assert_equals  # pylint: disable=no-name-in-module
-
-from .course_helpers import *
-from .ui_helpers import *
-
-logger = getLogger(__name__)
-
-
-@step(r'I wait (?:for )?"(\d+\.?\d*)" seconds?$')
-def wait_for_seconds(step, seconds):
-    world.wait(seconds)
-
-
-@step('I reload the page$')
-def reload_the_page(step):
-    world.wait_for_ajax_complete()
-    world.browser.reload()
-    world.wait_for_js_to_load()
-
-
-@step('I press the browser back button$')
-def browser_back(step):
-    world.browser.driver.back()
-
-
-@step('I (?:visit|access|open) the homepage$')
-def i_visit_the_homepage(step):
-    world.visit('/')
-    assert world.is_css_present('header.global')
-
-
-@step(u'I (?:visit|access|open) the dashboard$')
-def i_visit_the_dashboard(step):
-    world.visit('/dashboard')
-    assert world.is_css_present('.dashboard')
-
-
-@step('I should be on the dashboard page$')
-def i_should_be_on_the_dashboard(step):
-    assert world.is_css_present('.dashboard')
-    assert 'Dashboard' in world.browser.title
-
-
-@step(u'I (?:visit|access|open) the courses page$')
-def i_am_on_the_courses_page(step):
-    world.visit('/courses')
-    assert world.is_css_present('div.courses')
-
-
-@step(u'I press the "([^"]*)" button$')
-def and_i_press_the_button(step, value):
-    button_css = 'input[value="%s"]' % value
-    world.css_click(button_css)
-
-
-@step(u'I click the link with the text "([^"]*)"$')
-def click_the_link_with_the_text_group1(step, linktext):
-    world.click_link(linktext)
-
-
-@step('I should see that the path is "([^"]*)"$')
-def i_should_see_that_the_path_is(step, path):
-    if 'COURSE' in world.scenario_dict:
-        path = path.format(world.scenario_dict['COURSE'].id)
-    assert world.url_equals(path), (
-        "path should be {!r} but is {!r}".format(path, world.browser.url)
-    )
-
-
-@step(u'the page title should be "([^"]*)"$')
-def the_page_title_should_be(step, title):
-    assert_equals(world.browser.title, title)
-
-
-@step(u'the page title should contain "([^"]*)"$')
-def the_page_title_should_contain(step, title):
-    assert title in world.browser.title
-
-
-@step('I log in$')
-def i_log_in(step):
-    world.log_in(username='robot', password='test')
-
-
-@step('I am a logged in user$')
-def i_am_logged_in_user(step):
-    world.create_user('robot', 'test')
-    world.log_in(username='robot', password='test')
-
-
-@step('I am not logged in$')
-def i_am_not_logged_in(step):
-    world.visit('logout')
-
-
-@step('I am staff for course "([^"]*)"$')
-def i_am_staff_for_course_by_id(step, course_id):
-    course_key = CourseKey.from_string(course_id)
-    world.register_by_course_key(course_key, True)
-
-
-@step(r'click (?:the|a) link (?:called|with the text) "([^"]*)"$')
-def click_the_link_called(step, text):
-    world.click_link(text)
-
-
-@step(r'should see that the url is "([^"]*)"$')
-def should_have_the_url(step, url):
-    assert_equals(world.browser.url, url)
-
-
-@step(r'should see (?:the|a) link (?:called|with the text) "([^"]*)"$')
-def should_see_a_link_called(step, text):
-    assert len(world.browser.find_link_by_text(text)) > 0
-
-
-@step(r'should see (?:the|a) link with the id "([^"]*)" called "([^"]*)"$')
-def should_have_link_with_id_and_text(step, link_id, text):
-    link = world.browser.find_by_id(link_id)
-    assert len(link) > 0
-    assert_equals(link.text, text)
-
-
-@step(r'should see a link to "([^"]*)" with the text "([^"]*)"$')
-def should_have_link_with_path_and_text(step, path, text):
-    link = world.browser.find_link_by_text(text)
-    assert len(link) > 0
-    assert_equals(link.first["href"], lettuce.django.django_url(path))
-
-
-@step(r'should( not)? see "(.*)" (?:somewhere|anywhere) (?:in|on) (?:the|this) page')
-def should_see_in_the_page(step, doesnt_appear, text):
-    if world.LETTUCE_SELENIUM_CLIENT == 'saucelabs':
-        multiplier = 2
-    else:
-        multiplier = 1
-    if doesnt_appear:
-        assert world.browser.is_text_not_present(text, wait_time=5 * multiplier)
-    else:
-        assert world.browser.is_text_present(text, wait_time=5 * multiplier)
-
-
-@step('I am logged in$')
-def i_am_logged_in(step):
-    world.create_user('robot', 'test')
-    world.log_in(username='robot', password='test')
-    world.browser.visit(lettuce.django.django_url('/'))
-    dash_css = '.dashboard'
-    assert world.is_css_present(dash_css)
-
-
-@step(u'I am an edX user$')
-def i_am_an_edx_user(step):
-    world.create_user('robot', 'test')
-
-
-@step(u'User "([^"]*)" is an edX user$')
-def registered_edx_user(step, uname):
-    world.create_user(uname, 'test')
-
-
-@step(u'All dialogs should be closed$')
-def dialogs_are_closed(step):
-    assert world.dialogs_closed()
-
-
-@step(u'visit the url "([^"]*)"')
-def visit_url(step, url):
-    if 'COURSE' in world.scenario_dict:
-        url = url.format(world.scenario_dict['COURSE'].id)
-    world.browser.visit(lettuce.django.django_url(url))
-
-
-@step(u'wait for AJAX to (?:finish|complete)')
-def wait_ajax(_step):
-    wait_for_ajax_complete()
-
-
-@step('I will confirm all alerts')
-def i_confirm_all_alerts(step):
-    """
-    Please note: This method must be called RIGHT BEFORE an expected alert
-    Window variables are page local and thus all changes are removed upon navigating to a new page
-    In addition, this method changes the functionality of ONLY future alerts
-    """
-    world.browser.execute_script('window.confirm = function(){return true;} ; window.alert = function(){return;}')
-
-
-@step('I will cancel all alerts')
-def i_cancel_all_alerts(step):
-    """
-    Please note: This method must be called RIGHT BEFORE an expected alert
-    Window variables are page local and thus all changes are removed upon navigating to a new page
-    In addition, this method changes the functionality of ONLY future alerts
-    """
-    world.browser.execute_script('window.confirm = function(){return false;} ; window.alert = function(){return;}')
-
-
-@step('I will answer all prompts with "([^"]*)"')
-def i_answer_prompts_with(step, prompt):
-    """
-    Please note: This method must be called RIGHT BEFORE an expected alert
-    Window variables are page local and thus all changes are removed upon navigating to a new page
-    In addition, this method changes the functionality of ONLY future alerts
-    """
-    world.browser.execute_script('window.prompt = function(){return %s;}') % prompt
-
-
-@step('I run ipdb')
-def run_ipdb(_step):
-    """Run ipdb as step for easy debugging"""
-    import ipdb
-    ipdb.set_trace()
-    assert True
-
-
-@step(u'(I am viewing|s?he views) the course team settings$')
-def view_course_team_settings(_step, whom):
-    """ navigates to course team settings page """
-    world.click_course_settings()
-    link_css = 'li.nav-course-settings-team a'
-    world.css_click(link_css)
diff --git a/common/djangoapps/terrain/ui_helpers.py b/common/djangoapps/terrain/ui_helpers.py
deleted file mode 100644
index 57f1a987415..00000000000
--- a/common/djangoapps/terrain/ui_helpers.py
+++ /dev/null
@@ -1,681 +0,0 @@
-# pylint: disable=missing-docstring
-
-import json
-import platform
-import re
-import time
-from textwrap import dedent
-from urllib import quote_plus
-
-# django_url is assigned late in the process of loading lettuce,
-# so we import this as a module, and then read django_url from
-# it to get the correct value
-import lettuce.django
-from lettuce import world
-from selenium.common.exceptions import (
-    InvalidElementStateException,
-    StaleElementReferenceException,
-    TimeoutException,
-    WebDriverException
-)
-from selenium.webdriver.common.by import By
-from selenium.webdriver.support import expected_conditions as EC
-from selenium.webdriver.support.ui import WebDriverWait
-
-from openedx.core.lib.tests.tools import assert_true
-
-GLOBAL_WAIT_FOR_TIMEOUT = 60
-
-REQUIREJS_WAIT = {
-    # Settings - Schedule & Details
-    re.compile(r'^Schedule & Details Settings \|'): [
-        "jquery", "js/base", "js/models/course",
-        "js/models/settings/course_details", "js/views/settings/main"],
-
-    # Settings - Advanced Settings
-    re.compile(r'^Advanced Settings \|'): [
-        "jquery", "js/base", "js/models/course", "js/models/settings/advanced",
-        "js/views/settings/advanced", "codemirror"],
-
-    # Content - Outline
-    # Note that calling your org, course number, or display name, 'course' will mess this up
-    re.compile(r'^Course Outline \|'): [
-        "js/base", "js/models/course", "js/models/location", "js/models/section"],
-
-    # Dashboard
-    re.compile(r'^Studio Home \|'): [
-        "gettext", "js/base",
-        "jquery.ui", "cms/js/main", "underscore"],
-
-    # Pages
-    re.compile(r'^Pages \|'): [
-        'js/models/explicit_url', 'js/views/tabs', 'cms/js/main', 'xblock/cms.runtime.v1'
-    ],
-}
-
-TRUTHY_WAIT = {
-    # Pages
-    re.compile(r'^Pages \|'): [
-        'XBlock'
-    ],
-    # Unit page
-    re.compile(r'Unit \|'): [
-        "jQuery", "XBlock", "ContainerFactory"
-    ],
-
-}
-
-
-@world.absorb
-def wait(seconds):
-    time.sleep(float(seconds))
-
-
-@world.absorb
-def wait_for_js_to_load():
-    for test, req in REQUIREJS_WAIT.items():
-        if test.search(world.browser.title):
-            world.wait_for_requirejs(req)
-            break
-
-    for test, req in TRUTHY_WAIT.items():
-        if test.search(world.browser.title):
-            for var in req:
-                world.wait_for_js_variable_truthy(var)
-
-
-# Selenium's `execute_async_script` function pauses Selenium's execution
-# until the browser calls a specific Javascript callback; in effect,
-# Selenium goes to sleep until the JS callback function wakes it back up again.
-# This callback is passed as the last argument to the script. Any arguments
-# passed to this callback get returned from the `execute_async_script`
-# function, which allows the JS to communicate information back to Python.
-# Ref: https://selenium.googlecode.com/svn/trunk/docs/api/dotnet/html/M_OpenQA_Selenium_IJavaScriptExecutor_ExecuteAsyncScript.htm
-@world.absorb
-def wait_for_js_variable_truthy(variable):
-    """
-    Using Selenium's `execute_async_script` function, poll the Javascript
-    environment until the given variable is defined and truthy. This process
-    guards against page reloads, and seamlessly retries on the next page.
-    """
-    javascript = """
-        var callback = arguments[arguments.length - 1];
-        var unloadHandler = function() {{
-          callback("unload");
-        }}
-        addEventListener("beforeunload", unloadHandler);
-        addEventListener("unload", unloadHandler);
-        var intervalID = setInterval(function() {{
-          try {{
-            if({variable}) {{
-              clearInterval(intervalID);
-              removeEventListener("beforeunload", unloadHandler);
-              removeEventListener("unload", unloadHandler);
-              callback(true);
-            }}
-          }} catch (e) {{}}
-        }}, 10);
-    """.format(variable=variable)
-    for _ in range(5):  # 5 attempts max
-        try:
-            result = world.browser.driver.execute_async_script(dedent(javascript))
-        except WebDriverException as wde:
-            if "document unloaded while waiting for result" in wde.msg:
-                result = "unload"
-            else:
-                raise
-        if result == "unload":
-            # we ran this on the wrong page. Wait a bit, and try again, when the
-            # browser has loaded the next page.
-            world.wait(1)
-            continue
-        else:
-            return result
-
-
-@world.absorb
-def wait_for_xmodule():
-    "Wait until the XModule Javascript has loaded on the page."
-    world.wait_for_js_variable_truthy("XModule")
-    world.wait_for_js_variable_truthy("XBlock")
-
-
-@world.absorb
-def wait_for_mathjax():
-    "Wait until MathJax is loaded and set up on the page."
-    world.wait_for_js_variable_truthy("MathJax")
-
-
-class RequireJSError(Exception):
-    """
-    An error related to waiting for require.js. If require.js is unable to load
-    a dependency in the `wait_for_requirejs` function, Python will throw
-    this exception to make sure that the failure doesn't pass silently.
-    """
-    pass
-
-
-def load_requrejs_modules(dependencies, callback="callback(true);"):
-    javascript = """
-        var callback = arguments[arguments.length - 1];
-        if(window.require) {{
-          requirejs.onError = callback;
-          var unloadHandler = function() {{
-            callback("unload");
-          }}
-          addEventListener("beforeunload", unloadHandler);
-          addEventListener("unload", unloadHandler);
-          require({deps}, function($) {{
-            var modules = arguments;
-            setTimeout(function() {{
-              removeEventListener("beforeunload", unloadHandler);
-              removeEventListener("unload", unloadHandler);
-              {callback}
-            }}, 50);
-          }});
-        }} else {{
-          callback(false);
-        }}
-    """.format(deps=json.dumps(dependencies), callback=callback)
-    for _ in range(5):  # 5 attempts max
-        try:
-            result = world.browser.driver.execute_async_script(dedent(javascript))
-        except WebDriverException as wde:
-            if "document unloaded while waiting for result" in wde.msg:
-                result = "unload"
-            else:
-                raise
-        if result == "unload":
-            # we ran this on the wrong page. Wait a bit, and try again, when the
-            # browser has loaded the next page.
-            world.wait(1)
-            continue
-        elif result not in (None, True, False):
-            # We got a require.js error
-            # Sometimes requireJS will throw an error with requireType=require
-            # This doesn't seem to cause problems on the page, so we ignore it
-            if result['requireType'] == 'require':
-                world.wait(1)
-                continue
-
-            # Otherwise, fail and report the error
-            else:
-                msg = "Error loading dependencies: type={0} modules={1}".format(
-                    result['requireType'], result['requireModules'])
-                err = RequireJSError(msg)
-                err.error = result
-                raise err
-        else:
-            return result
-
-
-def wait_for_xmodules_to_load():
-    """
-    If requirejs is loaded on the page, this function will pause
-    Selenium until require is finished loading all xmodules.
-    If requirejs is not loaded on the page, this function will return
-    immediately.
-    """
-    callback = """
-        if (modules[0] && modules[0].done) {{
-            modules[0].done(function () {{callback(true)}});
-        }}
-    """
-    return load_requrejs_modules(["xmodule"], callback)
-
-
-@world.absorb
-def wait_for_requirejs(dependencies=None):
-    """
-    If requirejs is loaded on the page, this function will pause
-    Selenium until require is finished loading the given dependencies.
-    If requirejs is not loaded on the page, this function will return
-    immediately.
-
-    :param dependencies: a list of strings that identify resources that
-        we should wait for requirejs to load. By default, requirejs will only
-        wait for jquery.
-    """
-    if not dependencies:
-        dependencies = ["jquery"]
-    # stick jquery at the front
-    if dependencies[0] != "jquery":
-        dependencies.insert(0, "jquery")
-
-    result = load_requrejs_modules(dependencies)
-    if result and "xmodule" in dependencies:
-        result = wait_for_xmodules_to_load()
-
-    return result
-
-
-@world.absorb
-def wait_for_ajax_complete():
-    """
-    Wait until all jQuery AJAX calls have completed. "Complete" means that
-    either the server has sent a response (regardless of whether the response
-    indicates success or failure), or that the AJAX call timed out waiting for
-    a response. For more information about the `jQuery.active` counter that
-    keeps track of this information, go here:
-    http://stackoverflow.com/questions/3148225/jquery-active-function#3148506
-    """
-    javascript = """
-        var callback = arguments[arguments.length - 1];
-        if(!window.jQuery) {callback(false);}
-        var intervalID = setInterval(function() {
-          if(jQuery.active == 0) {
-            clearInterval(intervalID);
-            callback(true);
-          }
-        }, 100);
-    """
-    # Sometimes the ajax when it returns will make the browser reload
-    # the DOM, and throw a WebDriverException with the message:
-    # 'javascript error: document unloaded while waiting for result'
-    for _ in range(5):  # 5 attempts max
-        try:
-            result = world.browser.driver.execute_async_script(dedent(javascript))
-        except WebDriverException as wde:
-            if "document unloaded while waiting for result" in wde.msg:
-                # Wait a bit, and try again, when the browser has reloaded the page.
-                world.wait(1)
-                continue
-            else:
-                raise
-        return result
-
-
-@world.absorb
-def visit(url):
-    world.browser.visit(lettuce.django.django_url(url))
-    wait_for_js_to_load()
-
-
-@world.absorb
-def url_equals(url):
-    return world.browser.url == lettuce.django.django_url(url)
-
-
-@world.absorb
-def is_css_present(css_selector, wait_time=30):
-    return world.browser.is_element_present_by_css(css_selector, wait_time=wait_time)
-
-
-@world.absorb
-def is_css_not_present(css_selector, wait_time=5):
-    world.browser.driver.implicitly_wait(1)
-    try:
-        return world.browser.is_element_not_present_by_css(css_selector, wait_time=wait_time)
-    except:
-        raise
-    finally:
-        world.browser.driver.implicitly_wait(world.IMPLICIT_WAIT)
-
-
-@world.absorb
-def css_has_text(css_selector, text, index=0, strip=False):
-    """
-    Return a boolean indicating whether the element with `css_selector`
-    has `text`.
-
-    If `strip` is True, strip whitespace at beginning/end of both
-    strings before comparing.
-
-    If there are multiple elements matching the css selector,
-    use `index` to indicate which one.
-    """
-    # If we're expecting a non-empty string, give the page
-    # a chance to fill in text fields.
-    if text:
-        wait_for(lambda _: css_text(css_selector, index=index))
-
-    actual_text = css_text(css_selector, index=index)
-
-    if strip:
-        actual_text = actual_text.strip()
-        text = text.strip()
-
-    return actual_text == text
-
-
-@world.absorb
-def css_contains_text(css_selector, partial_text, index=0):
-    """
-    Return a boolean indicating whether the element with `css_selector`
-    contains `partial_text`.
-
-    If there are multiple elements matching the css selector,
-    use `index` to indicate which one.
-    """
-    # If we're expecting a non-empty string, give the page
-    # a chance to fill in text fields.
-    if partial_text:
-        wait_for(lambda _: css_html(css_selector, index=index), timeout=8)
-
-    actual_text = css_html(css_selector, index=index)
-
-    return partial_text in actual_text
-
-
-@world.absorb
-def css_has_value(css_selector, value, index=0):
-    """
-    Return a boolean indicating whether the element with
-    `css_selector` has the specified `value`.
-
-    If there are multiple elements matching the css selector,
-    use `index` to indicate which one.
-    """
-    # If we're expecting a non-empty string, give the page
-    # a chance to fill in values
-    if value:
-        wait_for(lambda _: css_value(css_selector, index=index))
-
-    return css_value(css_selector, index=index) == value
-
-
-@world.absorb
-def wait_for(func, timeout=5, timeout_msg=None):
-    """
-    Calls the method provided with the driver as an argument until the
-    return value is not False.
-    Throws an error if the WebDriverWait timeout clock expires.
-    Otherwise this method will return None.
-    """
-    msg = timeout_msg or "Timed out after {} seconds.".format(timeout)
-    try:
-        WebDriverWait(
-            driver=world.browser.driver,
-            timeout=timeout,
-            ignored_exceptions=(StaleElementReferenceException)
-        ).until(func)
-    except TimeoutException:
-        raise TimeoutException(msg)
-
-
-@world.absorb
-def wait_for_present(css_selector, timeout=GLOBAL_WAIT_FOR_TIMEOUT):
-    """
-    Wait for the element to be present in the DOM.
-    """
-    wait_for(
-        func=lambda _: EC.presence_of_element_located((By.CSS_SELECTOR, css_selector,)),
-        timeout=timeout,
-        timeout_msg="Timed out waiting for {} to be present.".format(css_selector)
-    )
-
-
-@world.absorb
-def wait_for_visible(css_selector, index=0, timeout=GLOBAL_WAIT_FOR_TIMEOUT):
-    """
-    Wait for the element to be visible in the DOM.
-    """
-    wait_for(
-        func=lambda _: css_visible(css_selector, index),
-        timeout=timeout,
-        timeout_msg="Timed out waiting for {} to be visible.".format(css_selector)
-    )
-
-
-@world.absorb
-def wait_for_invisible(css_selector, timeout=GLOBAL_WAIT_FOR_TIMEOUT):
-    """
-    Wait for the element to be either invisible or not present on the DOM.
-    """
-    wait_for(
-        func=lambda _: EC.invisibility_of_element_located((By.CSS_SELECTOR, css_selector,)),
-        timeout=timeout,
-        timeout_msg="Timed out waiting for {} to be invisible.".format(css_selector)
-    )
-
-
-@world.absorb
-def wait_for_clickable(css_selector, timeout=GLOBAL_WAIT_FOR_TIMEOUT):
-    """
-    Wait for the element to be present and clickable.
-    """
-    wait_for(
-        func=lambda _: EC.element_to_be_clickable((By.CSS_SELECTOR, css_selector,)),
-        timeout=timeout,
-        timeout_msg="Timed out waiting for {} to be clickable.".format(css_selector)
-    )
-
-
-@world.absorb
-def css_find(css, wait_time=GLOBAL_WAIT_FOR_TIMEOUT):
-    """
-    Wait for the element(s) as defined by css locator
-    to be present.
-
-    This method will return a WebDriverElement.
-    """
-    wait_for_present(css_selector=css, timeout=wait_time)
-    return world.browser.find_by_css(css)
-
-
-@world.absorb
-def css_click(css_selector, index=0, wait_time=GLOBAL_WAIT_FOR_TIMEOUT, dismiss_alert=False):
-    """
-    Perform a click on a CSS selector, first waiting for the element
-    to be present and clickable.
-
-    This method will return True if the click worked.
-
-    If `dismiss_alert` is true, dismiss any alerts that appear.
-    """
-    wait_for_clickable(css_selector, timeout=wait_time)
-    wait_for_visible(css_selector, index=index, timeout=wait_time)
-    assert_true(
-        css_visible(css_selector, index=index),
-        msg="Element {}[{}] is present but not visible".format(css_selector, index)
-    )
-
-    retry_on_exception(lambda: css_find(css_selector)[index].click())
-
-    # Dismiss any alerts that occur.
-    # We need to do this before calling `wait_for_js_to_load()`
-    # to avoid getting an unexpected alert exception
-    if dismiss_alert:
-        world.browser.get_alert().accept()
-
-    wait_for_js_to_load()
-    return True
-
-
-@world.absorb
-def css_check(css_selector, wait_time=GLOBAL_WAIT_FOR_TIMEOUT):
-    """
-    Checks a check box based on a CSS selector, first waiting for the element
-    to be present and clickable. This is just a wrapper for calling "click"
-    because that's how selenium interacts with check boxes and radio buttons.
-
-    Then for synchronization purposes, wait for the element to be checked.
-    This method will return True if the check worked.
-    """
-    css_click(css_selector=css_selector, wait_time=wait_time)
-    wait_for(lambda _: css_find(css_selector).selected)
-    return True
-
-
-@world.absorb
-def select_option(name, value, wait_time=GLOBAL_WAIT_FOR_TIMEOUT):
-    '''
-    A method to select an option
-    Then for synchronization purposes, wait for the option to be selected.
-    This method will return True if the selection worked.
-    '''
-    select_css = "select[name='{}']".format(name)
-    option_css = "option[value='{}']".format(value)
-
-    css_selector = "{} {}".format(select_css, option_css)
-    css_click(css_selector=css_selector, wait_time=wait_time)
-    wait_for(lambda _: css_has_value(select_css, value))
-    return True
-
-
-@world.absorb
-def id_click(elem_id):
-    """
-    Perform a click on an element as specified by its id
-    """
-    css_click('#{}'.format(elem_id))
-
-
-@world.absorb
-def css_fill(css_selector, text, index=0):
-    """
-    Set the value of the element to the specified text.
-    Note that this will replace the current value completely.
-    Then for synchronization purposes, wait for the value on the page.
-    """
-    wait_for_visible(css_selector, index=index)
-    retry_on_exception(lambda: css_find(css_selector)[index].fill(text))
-    wait_for(lambda _: css_has_value(css_selector, text, index=index))
-    return True
-
-
-@world.absorb
-def click_link(partial_text, index=0):
-    retry_on_exception(lambda: world.browser.find_link_by_partial_text(partial_text)[index].click())
-    wait_for_js_to_load()
-
-
-@world.absorb
-def click_button(data_attr, index=0):
-    xpath = '//button[text()="{button_text}"]'.format(
-        button_text=data_attr
-    )
-    world.browser.find_by_xpath(xpath)[index].click()
-
-
-@world.absorb
-def click_link_by_text(text, index=0):
-    retry_on_exception(lambda: world.browser.find_link_by_text(text)[index].click())
-
-
-@world.absorb
-def css_text(css_selector, index=0, timeout=GLOBAL_WAIT_FOR_TIMEOUT):
-    # Wait for the css selector to appear
-    if is_css_present(css_selector):
-        return retry_on_exception(lambda: css_find(css_selector, wait_time=timeout)[index].text)
-    else:
-        return ""
-
-
-@world.absorb
-def css_value(css_selector, index=0):
-    # Wait for the css selector to appear
-    if is_css_present(css_selector):
-        return retry_on_exception(lambda: css_find(css_selector)[index].value)
-    else:
-        return ""
-
-
-@world.absorb
-def css_html(css_selector, index=0):
-    """
-    Returns the HTML of a css_selector
-    """
-    assert is_css_present(css_selector)
-    return retry_on_exception(lambda: css_find(css_selector)[index].html)
-
-
-@world.absorb
-def css_has_class(css_selector, class_name, index=0):
-    return retry_on_exception(lambda: css_find(css_selector)[index].has_class(class_name))
-
-
-@world.absorb
-def css_visible(css_selector, index=0):
-    assert is_css_present(css_selector)
-    return retry_on_exception(lambda: css_find(css_selector)[index].visible)
-
-
-@world.absorb
-def dialogs_closed():
-    def are_dialogs_closed(_driver):
-        '''
-        Return True when no modal dialogs are visible
-        '''
-        return not css_visible('.modal')
-    wait_for(are_dialogs_closed)
-    return not css_visible('.modal')
-
-
-@world.absorb
-def save_the_html(path='/tmp'):
-    url = world.browser.url
-    html = world.browser.html.encode('ascii', 'ignore')
-    filename = "{path}/{name}.html".format(path=path, name=quote_plus(url))
-    with open(filename, "w") as f:
-        f.write(html)
-
-
-@world.absorb
-def click_course_content():
-    world.wait_for_js_to_load()
-    course_content_css = 'li.nav-course-courseware'
-    css_click(course_content_css)
-
-
-@world.absorb
-def click_course_settings():
-    world.wait_for_js_to_load()
-    course_settings_css = 'li.nav-course-settings'
-    css_click(course_settings_css)
-
-
-@world.absorb
-def click_tools():
-    world.wait_for_js_to_load()
-    tools_css = 'li.nav-course-tools'
-    css_click(tools_css)
-
-
-@world.absorb
-def is_mac():
-    return platform.mac_ver()[0] != ''
-
-
-@world.absorb
-def is_firefox():
-    return world.browser.driver_name == 'Firefox'
-
-
-@world.absorb
-def trigger_event(css_selector, event='change', index=0):
-    world.browser.execute_script("$('{}:eq({})').trigger('{}')".format(css_selector, index, event))
-
-
-@world.absorb
-def retry_on_exception(func, max_attempts=5, ignored_exceptions=(StaleElementReferenceException, InvalidElementStateException)):
-    """
-    Retry the interaction, ignoring the passed exceptions.
-    By default ignore StaleElementReferenceException, which happens often in our application
-    when the DOM is being manipulated by client side JS.
-    Note that ignored_exceptions is passed directly to the except block, and as such can be
-    either a single exception or multiple exceptions as a parenthesized tuple.
-    """
-    attempt = 0
-    while attempt < max_attempts:
-        try:
-            return func()
-        except ignored_exceptions:
-            world.wait(1)
-            attempt += 1
-
-    assert_true(attempt < max_attempts, 'Ran out of attempts to execute {}'.format(func))
-
-
-@world.absorb
-def disable_jquery_animations():
-    """
-    Disable JQuery animations on the page.  Any state changes
-    will occur immediately to the final state.
-    """
-
-    # Ensure that jquery is loaded
-    world.wait_for_js_to_load()
-
-    # Disable jQuery animations
-    world.browser.execute_script("jQuery.fx.off = true;")
diff --git a/common/test/acceptance/tests/lms/test_lms_problems.py b/common/test/acceptance/tests/lms/test_lms_problems.py
index 14d9af35635..af0fd9bdf50 100644
--- a/common/test/acceptance/tests/lms/test_lms_problems.py
+++ b/common/test/acceptance/tests/lms/test_lms_problems.py
@@ -1,8 +1,6 @@
 # -*- coding: utf-8 -*-
 """
 Bok choy acceptance tests for problems in the LMS
-
-See also old lettuce tests in lms/djangoapps/courseware/features/problems.feature
 """
 from textwrap import dedent
 import time
diff --git a/common/test/acceptance/tests/lms/test_problem_types.py b/common/test/acceptance/tests/lms/test_problem_types.py
index bcac5933ed5..7bc35f8e3e6 100644
--- a/common/test/acceptance/tests/lms/test_problem_types.py
+++ b/common/test/acceptance/tests/lms/test_problem_types.py
@@ -1,7 +1,5 @@
 """
 Bok choy acceptance and a11y tests for problem types in the LMS
-
-See also lettuce tests in lms/djangoapps/courseware/features/problems.feature
 """
 import random
 import textwrap
diff --git a/common/test/db_cache/lettuce.db b/common/test/db_cache/lettuce.db
deleted file mode 100644
index d69768646bccddf31867b63dd9318040f143e3e4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1842176
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
TM)H8Vsv)?CKvHP@0d)Tl8YluN

diff --git a/common/test/db_cache/lettuce_student_module_history.db b/common/test/db_cache/lettuce_student_module_history.db
deleted file mode 100644
index 20b9ae9bc68fcd49414a0c2fcbe1c675ef80378c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 41984
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
E0HCKVJpcdz

diff --git a/docs/testing.rst b/docs/testing.rst
index 6942682513a..8848e7e8e62 100644
--- a/docs/testing.rst
+++ b/docs/testing.rst
@@ -68,13 +68,7 @@ UI Acceptance Tests
 -  We use `Bok Choy`_ to write end-user acceptance tests directly in Python,
    using the framework to maximize reliability and maintainability.
 
--  We used to use `lettuce`_ to write BDD-style tests but it's now deprecated
-   in favor of Bok Choy for new tests.  Most of these tests simulate user
-   interactions through the browser using `splinter`_.
-
 .. _Bok Choy: https://bok-choy.readthedocs.org/en/latest/tutorial.html
-.. _lettuce: http://lettuce.it/
-.. _splinter: http://splinter.cobrateam.info/
 
 
 Internationalization
@@ -101,8 +95,6 @@ Test Locations
 
    -  Set up and helper methods, and stubs for external services:
       ``common/djangoapps/terrain``
-   -  Lettuce Tests: located in ``features`` subpackage within a Django
-      app. For example: ``lms/djangoapps/courseware/features``
    -  Bok Choy Acceptance Tests: located under ``common/test/acceptance/tests``
    -  Bok Choy Accessibility Tests: located under ``common/test/acceptance/tests`` and tagged with ``@attr("a11y")``
    -  Bok Choy PageObjects: located under ``common/test/acceptance/pages``
@@ -431,8 +423,7 @@ Object and Promise design patterns.
 These prerequisites are all automatically installed and available in
 `Devstack`_, the supported development enviornment for the Open edX platform.
 
-* Chromedriver and Chrome (see `Running Lettuce Acceptance Tests`_ below for
-  the latest tested versions)
+* Chromedriver and Chrome
 
 * Mongo
 
@@ -591,65 +582,6 @@ You must run BOTH `--testsonly` and `--fasttest`.
 Control-C. *Warning*: Only hit Control-C one time so the pytest framework can
 properly clean up.
 
-Running Lettuce Acceptance Tests
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Although it's deprecated now `lettuce`_ acceptance tests still exists in the
-code base. Most of our tests use `Splinter`_ to simulate UI browser
-interactions. Splinter, in turn, uses `Selenium`_ to control the Chrome
-browser.
-
-**Prerequisite**: You must have `ChromeDriver`_ installed to run the tests in
-Chrome. The tests are confirmed to run with Chrome (not Chromium) version
-34.0.1847.116 with ChromeDriver version 2.6.232917.
-
-.. _ChromeDriver: https://code.google.com/p/selenium/wiki/ChromeDriver
-
-To run all the acceptance tests, run this command::
-
-    paver test_acceptance
-
-To run only for lms or cms, run one of these commands::
-
-    paver test_acceptance -s lms
-    paver test_acceptance -s cms
-
-For example, this command tests only a specific feature::
-
-    paver test_acceptance -s lms --extra_args="lms/djangoapps/courseware/features/problems.feature"
-
-A command like this tests only a specific scenario::
-
-    paver test_acceptance -s lms --extra_args="lms/djangoapps/courseware/features/problems.feature -s 3"
-
-To start the debugger on failure, pass the ``--pdb`` option to the paver command like this::
-
-    paver test_acceptance -s lms --pdb --extra_args="lms/djangoapps/courseware/features/problems.feature"
-
-To run tests faster by not collecting static files or compiling sass, you can use
-``paver test_acceptance -s lms --fasttest`` and
-``paver test_acceptance -s cms --fasttest``.
-
-By default, all acceptance tests are run with the 'draft' ModuleStore.
-To override the modulestore that is used, use the default\_store option.
-Currently, the possible stores for acceptance tests are: 'split'
-(xmodule.modulestore.split\_mongo.split\_draft.DraftVersioningModuleStore)
-and 'draft' (xmodule.modulestore.mongo.DraftMongoModuleStore). For
-example: paver test\_acceptance --default\_store='draft' Note, however,
-all acceptance tests currently do not pass with 'split'.
-
-Acceptance tests will run on a randomized port and can be run in the
-background of paver cms and lms or unit tests. To specify the port,
-change the LETTUCE\_SERVER\_PORT constant in cms/envs/acceptance.py and
-lms/envs/acceptance.py as well as the port listed in
-cms/djangoapps/contentstore/feature/upload.py
-
-During acceptance test execution, Django log files are written to
-``test_root/log/lms_acceptance.log`` and
-``test_root/log/cms_acceptance.log``.
-
-**Note**: The acceptance tests can *not* currently run in parallel.
-
 Running Tests on Paver Scripts
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -685,50 +617,6 @@ can find those in the following locations::
 Do not commit the ``.po``, ``.mo``, ``.js`` files that are generated
 in the above locations during the dummy translation process!
 
-
-Debugging Acceptance Tests on Vagrant
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-If you are using a local Vagrant dev environment to run acceptance
-tests, then you will only get console text output. To actually see what
-is happening, you can turn on automatic screenshots. For each step two
-screenshots will be taken - before, and after. To do this, simply add
-the step::
-
-    Given I enable capturing of screenshots before and after each step
-
-to your scenario. This step can be added anywhere, and will enable
-automatic screenshots for all following steps for that scenario only.
-You can also use the step::
-
-    Given I disable capturing of screenshots before and after each step
-
-to turn off auto screenshots for all steps following it.
-
-Screenshots will be placed in the folder
-``{TEST_ROOT}/log/auto_screenshots``. Each time you launch acceptance
-tests, this folder will be cleaned. Each screenshot will be named
-according to the template string
-``{scenario_number}__{step_number}__{step_function_name}__{"1_before"|"2_after"}``.
-
-If you don't want to have screenshots be captured for all steps, but
-rather want fine grained control, you can use this decorator before any Python function in ``feature_name.py`` file::
-
-    @capture_screenshot_before_after
-
-The decorator will capture two screenshots: one before the decorated function runs,
-and one after. Also, this function is available, and can be inserted at any point in code to capture a
-screenshot specifically in that place::
-
-    from lettuce import world; world.capture_screenshot("image_name")
-
-In both cases the captured screenshots will go to the same folder as when using the step method: ``{TEST_ROOT}/log/auto_screenshot``.
-
-A totally different approach to visually seeing acceptance tests run in
-Vagrant is to redirect Vagrant X11 session to your local machine. Please
-see https://github.com/edx/edx-platform/wiki/Test-engineering-FAQ for
-instruction on how to achieve this.
-
 Viewing Test Coverage
 ---------------------
 
diff --git a/lms/djangoapps/courseware/features/__init__.py b/lms/djangoapps/courseware/features/__init__.py
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/lms/djangoapps/courseware/features/common.py b/lms/djangoapps/courseware/features/common.py
deleted file mode 100644
index f07fa08d931..00000000000
--- a/lms/djangoapps/courseware/features/common.py
+++ /dev/null
@@ -1,240 +0,0 @@
-# pylint: disable=missing-docstring
-# pylint: disable=no-member
-# pylint: disable=redefined-outer-name
-
-from __future__ import absolute_import
-
-import time
-from logging import getLogger
-
-from django.contrib.auth.models import User
-from django.urls import reverse
-from lettuce import step, world
-from lettuce.django import django_url
-
-from courseware.courses import get_course_by_id
-from student.models import CourseEnrollment
-from xmodule import seq_module, vertical_block
-from xmodule.course_module import CourseDescriptor
-from xmodule.modulestore.django import modulestore
-
-logger = getLogger(__name__)
-
-
-@step('I (.*) capturing of screenshots before and after each step$')
-def configure_screenshots_for_all_steps(_step, action):
-    """
-    A step to be used in *.feature files. Enables/disables
-    automatic saving of screenshots before and after each step in a
-    scenario.
-    """
-    action = action.strip()
-    if action == 'enable':
-        world.auto_capture_screenshots = True
-    elif action == 'disable':
-        world.auto_capture_screenshots = False
-    else:
-        raise ValueError('Parameter `action` should be one of "enable" or "disable".')
-
-
-@world.absorb
-def capture_screenshot_before_after(func):
-    """
-    A decorator that will take a screenshot before and after the applied
-    function is run. Use this if you do not want to capture screenshots
-    for each step in a scenario, but rather want to debug a single function.
-    """
-    def inner(*args, **kwargs):
-        prefix = round(time.time() * 1000)
-
-        world.capture_screenshot("{}_{}_{}".format(
-            prefix, func.func_name, 'before'
-        ))
-        ret_val = func(*args, **kwargs)
-        world.capture_screenshot("{}_{}_{}".format(
-            prefix, func.func_name, 'after'
-        ))
-        return ret_val
-    return inner
-
-
-@step(u'The course "([^"]*)" exists$')
-def create_course(_step, course):
-
-    # First clear the modulestore so we don't try to recreate
-    # the same course twice
-    # This also ensures that the necessary templates are loaded
-    world.clear_courses()
-
-    # Create the course
-    # We always use the same org and display name,
-    # but vary the course identifier (e.g. 600x or 191x)
-    world.scenario_dict['COURSE'] = world.CourseFactory.create(
-        org='edx',
-        number=course,
-        display_name='Test Course'
-    )
-
-    # Add a chapter to the course to contain problems
-    world.scenario_dict['CHAPTER'] = world.ItemFactory.create(
-        parent_location=world.scenario_dict['COURSE'].location,
-        category='chapter',
-        display_name='Test Chapter',
-        publish_item=True,  # Not needed for direct-only but I'd rather the test didn't know that
-    )
-
-    world.scenario_dict['SECTION'] = world.ItemFactory.create(
-        parent_location=world.scenario_dict['CHAPTER'].location,
-        category='sequential',
-        display_name='Test Section',
-        publish_item=True,
-    )
-
-
-@step(u'I am registered for the course "([^"]*)"$')
-def i_am_registered_for_the_course(step, course):
-    # Create the course
-    create_course(step, course)
-
-    # Create the user
-    world.create_user('robot', 'test')
-    user = User.objects.get(username='robot')
-
-    # If the user is not already enrolled, enroll the user.
-    # TODO: change to factory
-    CourseEnrollment.enroll(user, course_id(course))
-
-    world.log_in(username='robot', password='test')
-
-
-@step(u'The course "([^"]*)" has extra tab "([^"]*)"$')
-def add_tab_to_course(_step, course, extra_tab_name):
-    world.ItemFactory.create(
-        parent_location=course_location(course),
-        category="static_tab",
-        display_name=str(extra_tab_name))
-
-
-@step(u'I am in a course$')
-def go_into_course(step):
-    step.given('I am registered for the course "6.002x"')
-    step.given('And I am logged in')
-    step.given('And I click on View Courseware')
-
-
-# Do we really use these 3 w/ a different course than is in the scenario_dict? if so, why? If not,
-# then get rid of the override arg
-def course_id(course_num):
-    return world.scenario_dict['COURSE'].id.replace(course=course_num)
-
-
-def course_location(course_num):
-    return world.scenario_dict['COURSE'].location.replace(course=course_num)
-
-
-def section_location(course_num):
-    return world.scenario_dict['SECTION'].location.replace(course=course_num)
-
-
-def visit_scenario_item(item_key):
-    """
-    Go to the courseware page containing the item stored in `world.scenario_dict`
-    under the key `item_key`
-    """
-
-    url = django_url(reverse(
-        'jump_to',
-        kwargs={
-            'course_id': unicode(world.scenario_dict['COURSE'].id),
-            'location': unicode(world.scenario_dict[item_key].location),
-        }
-    ))
-
-    world.browser.visit(url)
-
-
-def get_courses():
-    '''
-    Returns dict of lists of courses available, keyed by course.org (ie university).
-    Courses are sorted by course.number.
-    '''
-    courses = [c for c in modulestore().get_courses()
-               if isinstance(c, CourseDescriptor)]  # skip error descriptors
-    courses = sorted(courses, key=lambda course: course.location.course)
-    return courses
-
-
-def get_courseware_with_tabs(course_id):
-    """
-    Given a course_id (string), return a courseware array of dictionaries for the
-    top three levels of navigation. Same as get_courseware() except include
-    the tabs on the right hand main navigation page.
-
-    This hides the appropriate courseware as defined by the hide_from_toc field:
-    chapter.hide_from_toc
-
-    Example:
-
-    [{
-        'chapter_name': 'Overview',
-        'sections': [{
-            'clickable_tab_count': 0,
-            'section_name': 'Welcome',
-            'tab_classes': []
-        }, {
-            'clickable_tab_count': 1,
-            'section_name': 'System Usage Sequence',
-            'tab_classes': ['VerticalBlock']
-        }, {
-            'clickable_tab_count': 0,
-            'section_name': 'Lab0: Using the tools',
-            'tab_classes': ['HtmlDescriptor', 'HtmlDescriptor', 'CapaDescriptor']
-        }, {
-            'clickable_tab_count': 0,
-            'section_name': 'Circuit Sandbox',
-            'tab_classes': []
-        }]
-    }, {
-        'chapter_name': 'Week 1',
-        'sections': [{
-            'clickable_tab_count': 4,
-            'section_name': 'Administrivia and Circuit Elements',
-            'tab_classes': ['VerticalBlock', 'VerticalBlock', 'VerticalBlock', 'VerticalBlock']
-        }, {
-            'clickable_tab_count': 0,
-            'section_name': 'Basic Circuit Analysis',
-            'tab_classes': ['CapaDescriptor', 'CapaDescriptor', 'CapaDescriptor']
-        }, {
-            'clickable_tab_count': 0,
-            'section_name': 'Resistor Divider',
-            'tab_classes': []
-        }, {
-            'clickable_tab_count': 0,
-            'section_name': 'Week 1 Tutorials',
-            'tab_classes': []
-        }]
-    }, {
-        'chapter_name': 'Midterm Exam',
-        'sections': [{
-            'clickable_tab_count': 2,
-            'section_name': 'Midterm Exam',
-            'tab_classes': ['VerticalBlock', 'VerticalBlock']
-        }]
-    }]
-    """
-
-    course = get_course_by_id(course_id)
-    chapters = [chapter for chapter in course.get_children() if not chapter.hide_from_toc]
-    courseware = [{
-        'chapter_name': c.display_name_with_default_escaped,
-        'sections': [{
-            'section_name': s.display_name_with_default_escaped,
-            'clickable_tab_count': len(s.get_children()) if isinstance(s, seq_module.SequenceDescriptor) else 0,
-            'tabs': [{
-                'children_count': len(t.get_children()) if isinstance(t, vertical_block.VerticalBlock) else 0,
-                'class': t.__class__.__name__} for t in s.get_children()
-            ]
-        } for s in c.get_children() if not s.hide_from_toc]
-    } for c in chapters]
-
-    return courseware
diff --git a/lms/djangoapps/courseware/features/courseware.py b/lms/djangoapps/courseware/features/courseware.py
deleted file mode 100644
index db19fd19708..00000000000
--- a/lms/djangoapps/courseware/features/courseware.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# pylint: disable=missing-docstring
-# pylint: disable=redefined-outer-name
-
-from lettuce import step, world
-from lettuce.django import django_url
-
-
-@step('I visit the courseware URL$')
-def i_visit_the_course_info_url(step):
-    url = django_url('/courses/MITx/6.002x/2012_Fall/courseware')
-    world.browser.visit(url)
diff --git a/lms/djangoapps/courseware/features/courseware_common.py b/lms/djangoapps/courseware/features/courseware_common.py
deleted file mode 100644
index ba2f2193a77..00000000000
--- a/lms/djangoapps/courseware/features/courseware_common.py
+++ /dev/null
@@ -1,46 +0,0 @@
-# pylint: disable=missing-docstring
-# pylint: disable=redefined-outer-name
-# pylint: disable=unused-argument
-
-from lettuce import step, world
-
-
-@step('I click on View Courseware')
-def i_click_on_view_courseware(step):
-    world.css_click('a.enter-course')
-
-
-@step('I click on the "([^"]*)" tab$')
-def i_click_on_the_tab(step, tab_text):
-    world.click_link(tab_text)
-
-
-@step('I click the "([^"]*)" button$')
-def i_click_on_the_button(step, data_attr):
-    world.click_button(data_attr)
-
-
-@step('I click on the "([^"]*)" link$')
-def i_click_on_the_link(step, link_text):
-    world.click_link(link_text)
-
-
-@step('I visit the courseware URL$')
-def i_visit_the_course_info_url(step):
-    world.visit('/courses/MITx/6.002x/2012_Fall/courseware')
-
-
-@step(u'I am on the dashboard page$')
-def i_am_on_the_dashboard_page(step):
-    assert world.is_css_present('section.courses')
-    assert world.url_equals('/dashboard')
-
-
-@step('the "([^"]*)" tab is active$')
-def the_tab_is_active(step, tab_text):
-    assert world.css_text('.course-tabs a.active') == tab_text
-
-
-@step('the login dialog is visible$')
-def login_dialog_visible(step):
-    assert world.css_visible('form#login_form.login_form')
diff --git a/lms/djangoapps/courseware/features/events.py b/lms/djangoapps/courseware/features/events.py
deleted file mode 100644
index 3133186fce3..00000000000
--- a/lms/djangoapps/courseware/features/events.py
+++ /dev/null
@@ -1,82 +0,0 @@
-# pylint: disable=missing-docstring
-
-from django.conf import settings
-from lettuce import before, step, world
-from pymongo import MongoClient
-
-from openedx.core.lib.tests.tools import assert_equals, assert_in  # pylint: disable=no-name-in-module
-
-REQUIRED_EVENT_FIELDS = [
-    'agent',
-    'event',
-    'event_source',
-    'event_type',
-    'host',
-    'ip',
-    'page',
-    'time',
-    'username'
-]
-
-
-@before.all  # pylint: disable=no-member
-def connect_to_mongodb():
-    world.mongo_client = MongoClient(host=settings.MONGO_HOST, port=settings.MONGO_PORT_NUM)
-    world.event_collection = world.mongo_client['track']['events']
-
-
-@before.each_scenario  # pylint: disable=no-member
-def reset_captured_events(_scenario):
-    world.event_collection.drop()
-
-
-@before.outline  # pylint: disable=no-member
-def reset_between_outline_scenarios(_scenario, _order, _outline, _reasons_to_fail):
-    world.event_collection.drop()
-
-
-@step(r'[aA]n? course url "(.*)" event is emitted$')
-def course_url_event_is_emitted(_step, url_regex):
-    event_type = url_regex.format(world.scenario_dict['COURSE'].id)  # pylint: disable=no-member
-    n_events_are_emitted(_step, 1, event_type, "server")
-
-
-@step(r'([aA]n?|\d+) "(.*)" (server|browser) events? is emitted$')
-def n_events_are_emitted(_step, count, event_type, event_source):
-
-    # Ensure all events are written out to mongo before querying.
-    world.mongo_client.fsync()
-
-    # Note that splinter makes 2 requests when you call browser.visit('/foo')
-    # the first just checks to see if the server responds with a status
-    # code of 200, the next actually uses the browser to submit the request.
-    # We filter out events associated with the status code checks by ignoring
-    # events that come directly from splinter.
-    criteria = {
-        'event_type': event_type,
-        'event_source': event_source,
-        'agent': {
-            '$ne': 'python/splinter'
-        }
-    }
-
-    cursor = world.event_collection.find(criteria)
-
-    try:
-        number_events = int(count)
-    except ValueError:
-        number_events = 1
-
-    assert_equals(cursor.count(), number_events)
-
-    event = cursor.next()
-
-    expected_field_values = {
-        "username": world.scenario_dict['USER'].username,  # pylint: disable=no-member
-        "event_type": event_type,
-    }
-    for key, value in expected_field_values.iteritems():
-        assert_equals(event[key], value)
-
-    for field in REQUIRED_EVENT_FIELDS:
-        assert_in(field, event)
diff --git a/lms/djangoapps/courseware/features/lti.feature b/lms/djangoapps/courseware/features/lti.feature
deleted file mode 100644
index 39d9b9bd6df..00000000000
--- a/lms/djangoapps/courseware/features/lti.feature
+++ /dev/null
@@ -1,150 +0,0 @@
-@shard_1 @requires_stub_lti
-Feature: LMS.LTI component
-  As a student, I want to view LTI component in LMS.
-
-  #1
-  Scenario: LTI component in LMS with no launch_url is not rendered
-  Given the course has correct LTI credentials with registered Instructor
-  And the course has an LTI component with no_launch_url fields:
-  | open_in_a_new_page |
-  | False              |
-  Then I view the LTI and error is shown
-
-  #2
-  Scenario: LTI component in LMS with incorrect lti_id is rendered incorrectly
-  Given the course has correct LTI credentials with registered Instructor
-  And the course has an LTI component with incorrect_lti_id fields:
-  | open_in_a_new_page |
-  | False              |
-  Then I view the LTI but incorrect_signature warning is rendered
-
-  #3
-  Scenario: LTI component in LMS is rendered incorrectly
-  Given the course has incorrect LTI credentials
-  And the course has an LTI component with correct fields:
-  | open_in_a_new_page |
-  | False              |
-  Then I view the LTI but incorrect_signature warning is rendered
-
-  #5
-  Scenario: LTI component in LMS is correctly rendered in iframe
-  Given the course has correct LTI credentials with registered Instructor
-  And the course has an LTI component with correct fields:
-  | open_in_a_new_page |
-  | False              |
-  Then I view the LTI and it is rendered in iframe
-
-  #6
-  Scenario: Graded LTI component in LMS is correctly works
-  Given the course has correct LTI credentials with registered Instructor
-  And the course has an LTI component with correct fields:
-  | open_in_a_new_page | weight | graded    | has_score |
-  | False              | 10     | True      | True      |
-  And I submit answer to LTI 1 question
-  And I click on the "Progress" tab
-  Then I see text "Problem Scores: 5/10"
-  And I see graph with total progress "5%"
-  Then I click on the "Instructor" tab
-  And I click the "Student Admin" button
-  And I click on the "View Gradebook" link
-  And I see in the gradebook table that "HW" is "50"
-  And I see in the gradebook table that "Total" is "5"
-
-  #7
-  Scenario: Graded LTI component in LMS role's masquerading correctly works
-  Given the course has correct LTI credentials with registered Instructor
-  And the course has an LTI component with correct fields:
-  | open_in_a_new_page | has_score |
-  | False              | True      |
-  And I view the LTI and it is rendered in iframe
-  And I see in iframe that LTI role is Instructor
-  And I switch to student
-  And I view the LTI and it is rendered in iframe
-  Then I see in iframe that LTI role is Student
-
-  #8
-  Scenario: Graded LTI component in LMS is correctly works with beta testers
-  Given the course has correct LTI credentials with registered BetaTester
-  And the course has an LTI component with correct fields:
-  | open_in_a_new_page | weight | graded    | has_score |
-  | False              | 10     | True      | True      |
-  And I submit answer to LTI 1 question
-  And I click on the "Progress" tab
-  Then I see text "Problem Scores: 5/10"
-  And I see graph with total progress "5%"
-
-  #9
-  Scenario: Graded LTI component in LMS is correctly works with LTI2v0 PUT callback
-  Given the course has correct LTI credentials with registered Instructor
-  And the course has an LTI component with correct fields:
-  | open_in_a_new_page | weight | graded    | has_score |
-  | False              | 10     | True      | True      |
-  And I submit answer to LTI 2 question
-  And I click on the "Progress" tab
-  Then I see text "Problem Scores: 8/10"
-  And I see graph with total progress "8%"
-  Then I click on the "Instructor" tab
-  And I click the "Student Admin" button
-  And I click on the "View Gradebook" link
-  And I see in the gradebook table that "HW" is "80"
-  And I see in the gradebook table that "Total" is "8"
-  And I visit the LTI component
-  Then I see LTI component progress with text "(8.0 / 10.0 points)"
-  Then I see LTI component feedback with text "This is awesome."
-
-  #10
-  Scenario: Graded LTI component in LMS is correctly works with LTI2v0 PUT delete callback
-  Given the course has correct LTI credentials with registered Instructor
-  And the course has an LTI component with correct fields:
-  | open_in_a_new_page | weight | graded    | has_score |
-  | False              | 10     | True      | True      |
-  And I submit answer to LTI 2 question
-  And I visit the LTI component
-  Then I see LTI component progress with text "(8.0 / 10.0 points)"
-  Then I see LTI component feedback with text "This is awesome."
-  And the LTI provider deletes my grade and feedback
-  And I visit the LTI component (have to reload)
-  Then I see LTI component progress with text "(10.0 points possible)"
-  Then in the LTI component I do not see feedback
-  And I click on the "Progress" tab
-  Then I see text "Problem Scores: 0/10"
-  And I see graph with total progress "0%"
-  Then I click on the "Instructor" tab
-  And I click the "Student Admin" button
-  And I click on the "View Gradebook" link
-  And I see in the gradebook table that "HW" is "0"
-  And I see in the gradebook table that "Total" is "0"
-
-  #11
-  Scenario: LTI component that set to hide_launch and open_in_a_new_page shows no button
-  Given the course has correct LTI credentials with registered Instructor
-  And the course has an LTI component with correct fields:
-  | open_in_a_new_page | hide_launch |
-  | False              | True        |
-  Then in the LTI component I do not see a launch button
-  Then I see LTI component module title with text "LTI (External resource)"
-
-  #12
-  Scenario: LTI component that set to hide_launch and not open_in_a_new_page shows no iframe
-  Given the course has correct LTI credentials with registered Instructor
-  And the course has an LTI component with correct fields:
-  | open_in_a_new_page | hide_launch |
-  | True               | True        |
-  Then in the LTI component I do not see an provider iframe
-  Then I see LTI component module title with text "LTI (External resource)"
-
-  #13
-  Scenario: LTI component button text is correctly displayed
-  Given the course has correct LTI credentials with registered Instructor
-  And the course has an LTI component with correct fields:
-  | button_text        |
-  | Launch Application |
-  Then I see LTI component button with text "Launch Application"
-
-  #14
-  Scenario: LTI component description is correctly displayed
-  Given the course has correct LTI credentials with registered Instructor
-  And the course has an LTI component with correct fields:
-  | description             |
-  | Application description |
-  Then I see LTI component description with text "Application description"
diff --git a/lms/djangoapps/courseware/features/lti.py b/lms/djangoapps/courseware/features/lti.py
deleted file mode 100644
index a0e273802ad..00000000000
--- a/lms/djangoapps/courseware/features/lti.py
+++ /dev/null
@@ -1,345 +0,0 @@
-# pylint: disable=missing-docstring
-# pylint: disable=no-member
-import datetime
-import os
-
-import pytz
-from django.conf import settings
-from lettuce import step, world
-from mock import patch
-from pytz import UTC
-from splinter.exceptions import ElementDoesNotExist
-
-from common import visit_scenario_item
-from courseware.access import has_access
-from courseware.tests.factories import BetaTesterFactory, InstructorFactory
-from openedx.core.lib.tests.tools import assert_equal, assert_in, assert_true  # pylint: disable=no-name-in-module
-from student.tests.factories import UserFactory
-
-TEST_COURSE_NAME = "test_course_a"
-
-
-@step('I view the LTI and error is shown$')
-def lti_is_not_rendered(_step):
-    # error is shown
-    assert world.is_css_present('.error_message', wait_time=0)
-
-    # iframe is not presented
-    assert not world.is_css_present('iframe', wait_time=0)
-
-    # link is not presented
-    assert not world.is_css_present('.link_lti_new_window', wait_time=0)
-
-
-def check_lti_iframe_content(text):
-    # inside iframe test content is presented
-    location = world.scenario_dict['LTI'].location.html_id()
-    iframe_name = 'ltiFrame-' + location
-    with world.browser.get_iframe(iframe_name) as iframe:
-        # iframe does not contain functions from terrain/ui_helpers.py
-        assert iframe.is_element_present_by_css('.result', wait_time=0)
-        assert (text == world.retry_on_exception(
-            lambda: iframe.find_by_css('.result')[0].text,
-            max_attempts=5
-        ))
-
-
-@step('I view the LTI and it is rendered in iframe$')
-def lti_is_rendered_iframe(_step):
-    world.wait_for_present('iframe')  # pylint: disable=no-member
-    assert world.is_css_present('iframe', wait_time=2)  # pylint: disable=no-member
-    assert not world.is_css_present('.link_lti_new_window', wait_time=0)  # pylint: disable=no-member
-    assert not world.is_css_present('.error_message', wait_time=0)  # pylint: disable=no-member
-
-    # iframe is visible
-    assert world.css_visible('iframe')  # pylint: disable=no-member
-    check_lti_iframe_content("This is LTI tool. Success.")
-
-
-@step('I view the LTI but incorrect_signature warning is rendered$')
-def incorrect_lti_is_rendered(_step):
-    assert world.is_css_present('iframe', wait_time=2)
-    assert not world.is_css_present('.link_lti_new_window', wait_time=0)
-    assert not world.is_css_present('.error_message', wait_time=0)
-
-    # inside iframe test content is presented
-    check_lti_iframe_content("Wrong LTI signature")
-
-
-@step('the course has correct LTI credentials with registered (.*)$')
-def set_correct_lti_passport(_step, user='Instructor'):
-    coursenum = TEST_COURSE_NAME
-    metadata = {
-        'lti_passports': ["correct_lti_id:test_client_key:test_client_secret"]
-    }
-
-    i_am_registered_for_the_course(coursenum, metadata, user)
-
-
-@step('the course has incorrect LTI credentials$')
-def set_incorrect_lti_passport(_step):
-    coursenum = TEST_COURSE_NAME
-    metadata = {
-        'lti_passports': ["test_lti_id:test_client_key:incorrect_lti_secret_key"]
-    }
-
-    i_am_registered_for_the_course(coursenum, metadata)
-
-
-@step(r'the course has an LTI component with (.*) fields(?:\:)?$')  # , new_page is(.*), graded is(.*)
-def add_correct_lti_to_course(_step, fields):
-    category = 'lti'
-    host = getattr(settings, 'LETTUCE_HOST', '127.0.0.1')
-    metadata = {
-        'lti_id': 'correct_lti_id',
-        'launch_url': 'http://{}:{}/correct_lti_endpoint'.format(host, settings.LTI_PORT),
-    }
-
-    if fields.strip() == 'incorrect_lti_id':  # incorrect fields
-        metadata.update({
-            'lti_id': 'incorrect_lti_id'
-        })
-    elif fields.strip() == 'correct':  # correct fields
-        pass
-    elif fields.strip() == 'no_launch_url':
-        metadata.update({
-            'launch_url': u''
-        })
-    else:  # incorrect parameter
-        assert False
-
-    if _step.hashes:
-        metadata.update(_step.hashes[0])
-
-    world.scenario_dict['LTI'] = world.ItemFactory.create(
-        parent_location=world.scenario_dict['SECTION'].location,
-        category=category,
-        display_name='LTI',
-        metadata=metadata,
-    )
-
-    visit_scenario_item('LTI')
-
-
-def create_course_for_lti(course, metadata):
-    # First clear the modulestore so we don't try to recreate
-    # the same course twice
-    # This also ensures that the necessary templates are loaded
-    world.clear_courses()
-
-    weight = 0.1
-    grading_policy = {
-        "GRADER": [
-            {
-                "type": "Homework",
-                "min_count": 1,
-                "drop_count": 0,
-                "short_label": "HW",
-                "weight": weight
-            },
-        ]
-    }
-
-    # Create the course
-    # We always use the same org and display name,
-    # but vary the course identifier (e.g. 600x or 191x)
-    world.scenario_dict['COURSE'] = world.CourseFactory.create(
-        org='edx',
-        number=course,
-        display_name='Test Course',
-        metadata=metadata,
-        grading_policy=grading_policy,
-    )
-
-    # Add a section to the course to contain problems
-    world.scenario_dict['CHAPTER'] = world.ItemFactory.create(
-        parent_location=world.scenario_dict['COURSE'].location,
-        category='chapter',
-        display_name='Test Chapter',
-    )
-    world.scenario_dict['SECTION'] = world.ItemFactory.create(
-        parent_location=world.scenario_dict['CHAPTER'].location,
-        category='sequential',
-        display_name='Test Section',
-        metadata={'graded': True, 'format': 'Homework'})
-
-
-@patch.dict('courseware.access.settings.FEATURES', {'DISABLE_START_DATES': False})
-def i_am_registered_for_the_course(coursenum, metadata, user='Instructor'):
-    # Create user
-    if user == 'BetaTester':
-        # Create the course
-        now = datetime.datetime.now(pytz.UTC)
-        tomorrow = now + datetime.timedelta(days=5)
-        metadata.update({'days_early_for_beta': 5, 'start': tomorrow})
-        create_course_for_lti(coursenum, metadata)
-        course_descriptor = world.scenario_dict['COURSE']
-
-        # create beta tester
-        user = BetaTesterFactory(course_key=course_descriptor.id)
-        normal_student = UserFactory()
-        instructor = InstructorFactory(course_key=course_descriptor.id)
-
-        assert not has_access(normal_student, 'load', course_descriptor)
-        assert has_access(user, 'load', course_descriptor)
-        assert has_access(instructor, 'load', course_descriptor)
-    else:
-        metadata.update({'start': datetime.datetime(1970, 1, 1, tzinfo=UTC)})
-        create_course_for_lti(coursenum, metadata)
-        course_descriptor = world.scenario_dict['COURSE']
-        user = InstructorFactory(course_key=course_descriptor.id)
-
-    # Enroll the user in the course and log them in
-    if has_access(user, 'load', course_descriptor):
-        world.enroll_user(user, course_descriptor.id)
-
-    world.log_in(username=user.username, password='test')
-
-
-def check_lti_popup(parent_window):
-    # You should now have 2 browser windows open, the original courseware and the LTI
-    windows = world.browser.windows
-    assert_equal(len(windows), 2)
-
-    # For verification, iterate through the window titles and make sure that
-    # both are there.
-    tabs = []
-    expected_tabs = [
-        u'LTI | Test Section | {course} Courseware | {platform}'.format(
-            course=TEST_COURSE_NAME,
-            platform=settings.PLATFORM_NAME
-        ),
-        u'TEST TITLE'
-    ]
-
-    for window in windows:
-        world.browser.switch_to_window(window)
-        tabs.append(world.browser.title)
-    assert_equal(tabs, expected_tabs)
-
-    # Now verify the contents of the LTI window (which is the 2nd window/tab)
-    # Note: The LTI opens in a new browser window, but Selenium sticks with the
-    # current window until you explicitly switch to the context of the new one.
-    world.browser.switch_to_window(windows[1])
-    url = world.browser.url
-    basename = os.path.basename(url)
-    pathname = os.path.splitext(basename)[0]
-    assert_equal(pathname, u'correct_lti_endpoint')
-
-    result = world.css_find('.result').first.text
-    assert_equal(result, u'This is LTI tool. Success.')
-
-    world.browser.driver.close()  # Close the pop-up window
-    world.browser.switch_to_window(parent_window)  # Switch to the main window again
-
-
-def click_and_check_lti_popup():
-    parent_window = world.browser.current_window  # Save the parent window
-    world.css_find('.link_lti_new_window').first.click()
-    check_lti_popup(parent_window)
-
-
-@step('visit the LTI component')
-def visit_lti_component(_step):
-    visit_scenario_item('LTI')
-
-
-@step('I see LTI component (.*) with text "([^"]*)"$')
-def see_elem_text(_step, elem, text):
-    selector_map = {
-        'progress': '.problem-progress',
-        'feedback': '.problem-feedback',
-        'module title': '.problem-header',
-        'button': '.link_lti_new_window',
-        'description': '.lti-description'
-    }
-    assert_in(elem, selector_map)
-    assert_true(world.css_has_text(selector_map[elem], text))
-
-
-@step('I see text "([^"]*)"$')
-def check_progress(_step, text):
-    assert world.browser.is_text_present(text)
-
-
-@step('I see graph with total progress "([^"]*)"$')
-def see_graph(_step, progress):
-    assert_equal(progress, world.css_find('#grade-detail-graph .overallGrade').first.text.split('\n')[1])
-
-
-@step('I see in the gradebook table that "([^"]*)" is "([^"]*)"$')
-def see_value_in_the_gradebook(_step, label, text):
-    table_selector = '.grade-table'
-    index = 0
-    table_headers = world.css_find(u'{0} thead th'.format(table_selector))
-
-    for i, element in enumerate(table_headers):
-        if element.text.strip() == label:
-            index = i
-            break
-
-    assert_true(world.css_has_text(u'{0} tbody td'.format(table_selector), text, index=index))
-
-
-@step('I submit answer to LTI (.*) question$')
-def click_grade(_step, version):
-    version_map = {
-        '1': {'selector': 'submit-button', 'expected_text': 'LTI consumer (edX) responded with XML content'},
-        '2': {'selector': 'submit-lti2-button', 'expected_text': 'LTI consumer (edX) responded with HTTP 200'},
-    }
-    assert_in(version, version_map)
-    location = world.scenario_dict['LTI'].location.html_id()
-    iframe_name = 'ltiFrame-' + location
-    with world.browser.get_iframe(iframe_name) as iframe:
-        css_ele = version_map[version]['selector']
-        css_loc = '#' + css_ele
-        world.wait_for_visible(css_loc)
-        world.css_click(css_loc)
-        assert iframe.is_text_present(version_map[version]['expected_text'])
-
-
-@step('LTI provider deletes my grade and feedback$')
-def click_delete_button(_step):
-    with world.browser.get_iframe(get_lti_frame_name()) as iframe:
-        iframe.find_by_name('submit-lti2-delete-button').first.click()
-
-
-def get_lti_frame_name():
-    location = world.scenario_dict['LTI'].location.html_id()
-    return 'ltiFrame-' + location
-
-
-@step('I see in iframe that LTI role is (.*)$')
-def check_role(_step, role):
-    world.wait_for_present('iframe')
-    location = world.scenario_dict['LTI'].location.html_id()
-    iframe_name = 'ltiFrame-' + location
-    with world.browser.get_iframe(iframe_name) as iframe:
-        expected_role = 'Role: ' + role
-        role = world.retry_on_exception(
-            lambda: iframe.find_by_tag('h5').first.value,
-            max_attempts=5,
-            ignored_exceptions=ElementDoesNotExist
-        )
-        assert_equal(expected_role, role)
-
-
-@step('I switch to (.*)$')
-def switch_view(_step, view):
-    staff_status = world.css_find('#action-preview-select').first.value
-    if staff_status != view:
-        world.browser.select("select", view)
-        world.wait_for_ajax_complete()
-        assert_equal(world.css_find('#action-preview-select').first.value, view)
-
-
-@step("in the LTI component I do not see (.*)$")
-def check_lti_component_no_elem(_step, text):
-    selector_map = {
-        'a launch button': '.link_lti_new_window',
-        'an provider iframe': '.ltiLaunchFrame',
-        'feedback': '.problem-feedback',
-        'progress': '.problem-progress',
-    }
-    assert_in(text, selector_map)
-    assert_true(world.is_css_not_present(selector_map[text]))
diff --git a/lms/djangoapps/courseware/features/problems_setup.py b/lms/djangoapps/courseware/features/problems_setup.py
deleted file mode 100644
index 1713ef0fb1b..00000000000
--- a/lms/djangoapps/courseware/features/problems_setup.py
+++ /dev/null
@@ -1,460 +0,0 @@
-# pylint: disable=missing-docstring
-
-# EVERY PROBLEM TYPE MUST HAVE THE FOLLOWING:
-# -Section in Dictionary containing:
-#   -factory
-#   -kwargs
-#   -(optional metadata)
-#   -Correct, Incorrect and Unanswered CSS selectors
-# -A way to answer the problem correctly and incorrectly
-# -A way to check the problem was answered correctly, incorrectly and blank
-
-import random
-import textwrap
-
-from lettuce import world
-
-from capa.tests.response_xml_factory import (
-    ChoiceResponseXMLFactory,
-    ChoiceTextResponseXMLFactory,
-    CodeResponseXMLFactory,
-    CustomResponseXMLFactory,
-    FormulaResponseXMLFactory,
-    ImageResponseXMLFactory,
-    MultipleChoiceResponseXMLFactory,
-    NumericalResponseXMLFactory,
-    OptionResponseXMLFactory,
-    StringResponseXMLFactory
-)
-from common import section_location
-
-# Factories from capa.tests.response_xml_factory that we will use
-# to generate the problem XML, with the keyword args used to configure
-# the output.
-# 'correct', 'incorrect', and 'unanswered' keys are lists of CSS selectors
-# the presence of any in the list is sufficient
-PROBLEM_DICT = {
-    'drop down': {
-        'factory': OptionResponseXMLFactory(),
-        'kwargs': {
-            'question_text': 'The correct answer is Option 2',
-            'options': ['Option 1', 'Option 2', 'Option 3', 'Option 4'],
-            'correct_option': 'Option 2'},
-        'correct': ['span.correct'],
-        'incorrect': ['span.incorrect'],
-        'unanswered': ['span.unanswered']},
-
-    'multiple choice': {
-        'factory': MultipleChoiceResponseXMLFactory(),
-        'kwargs': {
-            'question_text': 'The correct answer is Choice 3',
-            'choices': [False, False, True, False],
-            'choice_names': ['choice_0', 'choice_1', 'choice_2', 'choice_3']},
-        'correct': ['label.choicegroup_correct', 'span.correct'],
-        'incorrect': ['label.choicegroup_incorrect', 'span.incorrect'],
-        'unanswered': ['span.unanswered']},
-
-    'checkbox': {
-        'factory': ChoiceResponseXMLFactory(),
-        'kwargs': {
-            'question_text': 'The correct answer is Choices 1 and 3',
-            'choice_type': 'checkbox',
-            'choices': [True, False, True, False, False],
-            'choice_names': ['Choice 1', 'Choice 2', 'Choice 3', 'Choice 4']},
-        'correct': ['span.correct'],
-        'incorrect': ['span.incorrect'],
-        'unanswered': ['span.unanswered']},
-
-    'radio': {
-        'factory': ChoiceResponseXMLFactory(),
-        'kwargs': {
-            'question_text': 'The correct answer is Choice 3',
-            'choice_type': 'radio',
-            'choices': [False, False, True, False],
-            'choice_names': ['Choice 1', 'Choice 2', 'Choice 3', 'Choice 4']},
-        'correct': ['label.choicegroup_correct', 'span.correct'],
-        'incorrect': ['label.choicegroup_incorrect', 'span.incorrect'],
-        'unanswered': ['span.unanswered']},
-
-    'string': {
-        'factory': StringResponseXMLFactory(),
-        'kwargs': {
-            'question_text': 'The answer is "correct string"',
-            'case_sensitive': False,
-            'answer': 'correct string'},
-        'correct': ['div.correct'],
-        'incorrect': ['div.incorrect'],
-        'unanswered': ['div.unanswered', 'div.unsubmitted']},
-
-    'numerical': {
-        'factory': NumericalResponseXMLFactory(),
-        'kwargs': {
-            'question_text': 'The answer is pi + 1',
-            'answer': '4.14159',
-            'tolerance': '0.00001',
-            'math_display': True},
-        'correct': ['div.correct'],
-        'incorrect': ['div.incorrect'],
-        'unanswered': ['div.unanswered', 'div.unsubmitted']},
-
-    'formula': {
-        'factory': FormulaResponseXMLFactory(),
-        'kwargs': {
-            'question_text': 'The solution is [mathjax]x^2+2x+y[/mathjax]',
-            'sample_dict': {'x': (-100, 100), 'y': (-100, 100)},
-            'num_samples': 10,
-            'tolerance': 0.00001,
-            'math_display': True,
-            'answer': 'x^2+2*x+y'},
-        'correct': ['div.correct'],
-        'incorrect': ['div.incorrect'],
-        'unanswered': ['div.unanswered', 'div.unsubmitted']},
-
-    'script': {
-        'factory': CustomResponseXMLFactory(),
-        'kwargs': {
-            'question_text': 'Enter two integers that sum to 10.',
-            'cfn': 'test_add_to_ten',
-            'expect': '10',
-            'num_inputs': 2,
-            'script': textwrap.dedent("""
-                def test_add_to_ten(expect,ans):
-                    try:
-                        a1=int(ans[0])
-                        a2=int(ans[1])
-                    except ValueError:
-                        a1=0
-                        a2=0
-                    return (a1+a2)==int(expect)
-            """)},
-        'correct': ['div.correct'],
-        'incorrect': ['div.incorrect'],
-        'unanswered': ['div.unanswered', 'div.unsubmitted']},
-
-    'code': {
-        'factory': CodeResponseXMLFactory(),
-        'kwargs': {
-            'question_text': 'Submit code to an external grader',
-            'initial_display': 'print "Hello world!"',
-            'grader_payload': '{"grader": "ps1/Spring2013/test_grader.py"}', },
-        'correct': ['span.correct'],
-        'incorrect': ['span.incorrect'],
-        'unanswered': ['span.unanswered']},
-
-    'radio_text': {
-        'factory': ChoiceTextResponseXMLFactory(),
-        'kwargs': {
-            'question_text': 'The correct answer is Choice 0 and input 8',
-            'type': 'radiotextgroup',
-            'choices': [("true", {"answer": "8", "tolerance": "1"}),
-                        ("false", {"answer": "8", "tolerance": "1"})
-                        ]
-        },
-        'correct': ['section.choicetextgroup_correct'],
-        'incorrect': ['section.choicetextgroup_incorrect', 'span.incorrect'],
-        'unanswered': ['span.unanswered']},
-
-    'checkbox_text': {
-        'factory': ChoiceTextResponseXMLFactory(),
-        'kwargs': {
-            'question_text': 'The correct answer is Choice 0 and input 8',
-            'type': 'checkboxtextgroup',
-            'choices': [("true", {"answer": "8", "tolerance": "1"}),
-                        ("false", {"answer": "8", "tolerance": "1"})
-                        ]
-        },
-        'correct': ['span.correct'],
-        'incorrect': ['span.incorrect'],
-        'unanswered': ['span.unanswered']},
-
-    'image': {
-        'factory': ImageResponseXMLFactory(),
-        'kwargs': {
-            'src': '/static/images/placeholder-image.png',
-            'rectangle': '(50,50)-(100,100)'
-        },
-        'correct': ['span.correct'],
-        'incorrect': ['span.incorrect'],
-        'unanswered': ['span.unanswered']}
-}
-
-
-def answer_problem(course, problem_type, correctness):
-    # Make sure that the problem has been completely rendered before
-    # starting to input an answer.
-    world.wait_for_ajax_complete()
-
-    section_loc = section_location(course)
-
-    if problem_type == "drop down":
-        select_name = "input_{}_2_1".format(
-            section_loc.course_key.make_usage_key('problem', 'drop_down').html_id()
-        )
-        option_text = 'Option 2' if correctness == 'correct' else 'Option 3'
-        world.select_option(select_name, option_text)
-
-    elif problem_type == "multiple choice":
-        if correctness == 'correct':
-            world.css_check(inputfield(course, 'multiple choice', choice='choice_2'))
-        else:
-            world.css_check(inputfield(course, 'multiple choice', choice='choice_1'))
-
-    elif problem_type == "checkbox":
-        if correctness == 'correct':
-            world.css_check(inputfield(course, 'checkbox', choice='choice_0'))
-            world.css_check(inputfield(course, 'checkbox', choice='choice_2'))
-        else:
-            world.css_check(inputfield(course, 'checkbox', choice='choice_3'))
-
-    elif problem_type == 'radio':
-        if correctness == 'correct':
-            world.css_check(inputfield(course, 'radio', choice='choice_2'))
-        else:
-            world.css_check(inputfield(course, 'radio', choice='choice_1'))
-
-    elif problem_type == 'string':
-        textvalue = 'correct string' if correctness == 'correct' else 'incorrect'
-        world.css_fill(inputfield(course, 'string'), textvalue)
-
-    elif problem_type == 'numerical':
-        textvalue = "pi + 1" if correctness == 'correct' else str(random.randint(-2, 2))
-        world.css_fill(inputfield(course, 'numerical'), textvalue)
-
-    elif problem_type == 'formula':
-        textvalue = "x^2+2*x+y" if correctness == 'correct' else 'x^2'
-        world.css_fill(inputfield(course, 'formula'), textvalue)
-
-    elif problem_type == 'script':
-        # Correct answer is any two integers that sum to 10
-        first_addend = random.randint(-100, 100)
-        second_addend = 10 - first_addend
-
-        # If we want an incorrect answer, then change
-        # the second addend so they no longer sum to 10
-        if correctness == 'incorrect':
-            second_addend += random.randint(1, 10)
-
-        world.css_fill(inputfield(course, 'script', input_num=1), str(first_addend))
-        world.css_fill(inputfield(course, 'script', input_num=2), str(second_addend))
-
-    elif problem_type == 'code':
-        # The fake xqueue server is configured to respond
-        # correct / incorrect no matter what we submit.
-        # Furthermore, since the inline code response uses
-        # JavaScript to make the code display nicely, it's difficult
-        # to programatically input text
-        # (there's not <textarea> we can just fill text into)
-        # For this reason, we submit the initial code in the response
-        # (configured in the problem XML above)
-        pass
-
-    elif problem_type == 'radio_text' or problem_type == 'checkbox_text':
-
-        input_value = "8" if correctness == 'correct' else "5"
-        choice = "choiceinput_0bc" if correctness == 'correct' else "choiceinput_1bc"
-        world.css_fill(
-            inputfield(
-                course,
-                problem_type,
-                choice="choiceinput_0_numtolerance_input_0"
-            ),
-            input_value
-        )
-        world.css_check(inputfield(course, problem_type, choice=choice))
-    elif problem_type == 'image':
-        offset = 25 if correctness == "correct" else -25
-
-        def try_click():
-            problem_html_loc = section_loc.course_key.make_usage_key('problem', 'image').html_id()
-            image_selector = "#imageinput_{}_2_1".format(problem_html_loc)
-            input_selector = "#input_{}_2_1".format(problem_html_loc)
-
-            world.browser.execute_script('$("body").on("click", function(event) {console.log(event);})')  # pylint: disable=unicode-format-string
-            initial_input = world.css_value(input_selector)
-            world.wait_for_visible(image_selector)
-            image = world.css_find(image_selector).first
-            (image.action_chains
-                .move_to_element(image._element)
-                .move_by_offset(offset, offset)
-                .click()
-                .perform())
-
-            world.wait_for(lambda _: world.css_value(input_selector) != initial_input)
-
-        world.retry_on_exception(try_click)
-
-
-def problem_has_answer(course, problem_type, answer_class):
-    if problem_type == "drop down":
-        if answer_class == 'blank':
-            assert world.is_css_not_present('option[selected="true"]')
-        else:
-            actual = world.css_value('option[selected="true"]')
-            expected = 'Option 2' if answer_class == 'correct' else 'Option 3'
-            assert actual == expected
-
-    elif problem_type == "multiple choice":
-        if answer_class == 'correct':
-            assert_submitted(course, 'multiple choice', ['choice_2'])
-        elif answer_class == 'incorrect':
-            assert_submitted(course, 'multiple choice', ['choice_1'])
-        else:
-            assert_submitted(course, 'multiple choice', [])
-
-    elif problem_type == "checkbox":
-        if answer_class == 'correct':
-            assert_submitted(course, 'checkbox', ['choice_0', 'choice_2'])
-        elif answer_class == 'incorrect':
-            assert_submitted(course, 'checkbox', ['choice_3'])
-        else:
-            assert_submitted(course, 'checkbox', [])
-
-    elif problem_type == "radio":
-        if answer_class == 'correct':
-            assert_submitted(course, 'radio', ['choice_2'])
-        elif answer_class == 'incorrect':
-            assert_submitted(course, 'radio', ['choice_1'])
-        else:
-            assert_submitted(course, 'radio', [])
-
-    elif problem_type == 'string':
-        if answer_class == 'blank':
-            expected = ''
-        else:
-            expected = 'correct string' if answer_class == 'correct' else 'incorrect'
-        assert_textfield(course, 'string', expected)
-
-    elif problem_type == 'formula':
-        if answer_class == 'blank':
-            expected = ''
-        else:
-            expected = "x^2+2*x+y" if answer_class == 'correct' else 'x^2'
-        assert_textfield(course, 'formula', expected)
-
-    elif problem_type in ("radio_text", "checkbox_text"):
-        if answer_class == 'blank':
-            expected = ('', '')
-            assert_choicetext_values(course, problem_type, (), expected)
-        elif answer_class == 'incorrect':
-            expected = ('5', '')
-            assert_choicetext_values(course, problem_type, ["choiceinput_1bc"], expected)
-        else:
-            expected = ('8', '')
-            assert_choicetext_values(course, problem_type, ["choiceinput_0bc"], expected)
-
-    else:
-        # The other response types use random data,
-        # which would be difficult to check
-        # We trade input value coverage in the other tests for
-        # input type coverage in this test.
-        pass
-
-
-def add_problem_to_course(course, problem_type, extra_meta=None):
-    '''
-    Add a problem to the course we have created using factories.
-    '''
-
-    assert problem_type in PROBLEM_DICT
-
-    # Generate the problem XML using capa.tests.response_xml_factory
-    factory_dict = PROBLEM_DICT[problem_type]
-    problem_xml = factory_dict['factory'].build_xml(**factory_dict['kwargs'])
-    metadata = {'rerandomize': 'always'} if 'metadata' not in factory_dict else factory_dict['metadata']
-    if extra_meta:
-        metadata = dict(metadata, **extra_meta)
-
-    # Create a problem item using our generated XML
-    # We set rerandomize=always in the metadata so that the "Reset" button
-    # will appear.
-    category_name = "problem"
-    return world.ItemFactory.create(
-        parent_location=section_location(course),
-        category=category_name,
-        display_name=str(problem_type),
-        data=problem_xml,
-        metadata=metadata
-    )
-
-
-def inputfield(course, problem_type, choice=None, input_num=1):
-    """ Return the css selector for `problem_type`.
-    For example, if problem_type is 'string', return
-    the text field for the string problem in the test course.
-
-    `choice` is the name of the checkbox input in a group
-    of checkboxes. """
-
-    section_loc = section_location(course)
-
-    ptype = problem_type.replace(" ", "_")
-    # this is necessary due to naming requirement for this problem type
-    if problem_type in ("radio_text", "checkbox_text"):
-        selector_template = "input#{}_2_{input}"
-    else:
-        selector_template = "input#input_{}_2_{input}"
-
-    sel = selector_template.format(
-        section_loc.course_key.make_usage_key('problem', ptype).html_id(),
-        input=input_num,
-    )
-
-    if choice is not None:
-        base = "_choice_" if problem_type == "multiple choice" else "_"
-        sel = sel + base + str(choice)
-
-    # If the input element doesn't exist, fail immediately
-    assert world.is_css_present(sel)
-
-    # Retrieve the input element
-    return sel
-
-
-def assert_submitted(course, problem_type, choices):
-    '''
-    Assert that choice names given in *choices* are the only
-    ones submitted.
-
-    Works for both radio and checkbox problems
-    '''
-
-    all_choices = ['choice_0', 'choice_1', 'choice_2', 'choice_3']
-    for this_choice in all_choices:
-        def submit_problem():
-            element = world.css_find(inputfield(course, problem_type, choice=this_choice))
-            if this_choice in choices:
-                assert element.checked
-            else:
-                assert not element.checked
-        world.retry_on_exception(submit_problem)
-
-
-def assert_textfield(course, problem_type, expected_text, input_num=1):
-    element_value = world.css_value(inputfield(course, problem_type, input_num=input_num))
-    assert element_value == expected_text
-
-
-def assert_choicetext_values(course, problem_type, choices, expected_values):
-    """
-    Asserts that only the given choices are checked, and given
-    text fields have a desired value
-    """
-    # Names of the radio buttons or checkboxes
-    all_choices = ['choiceinput_0bc', 'choiceinput_1bc']
-    # Names of the numtolerance_inputs
-    all_inputs = [
-        "choiceinput_0_numtolerance_input_0",
-        "choiceinput_1_numtolerance_input_0"
-    ]
-    for this_choice in all_choices:
-        element = world.css_find(inputfield(course, problem_type, choice=this_choice))
-
-        if this_choice in choices:
-            assert element.checked
-        else:
-            assert not element.checked
-
-    for (name, expected) in zip(all_inputs, expected_values):
-        element = world.css_find(inputfield(course, problem_type, name))
-        # Remove any trailing spaces that may have been added
-        assert element.value.strip() == expected
diff --git a/lms/djangoapps/courseware/features/registration.py b/lms/djangoapps/courseware/features/registration.py
deleted file mode 100644
index 87e557f19c8..00000000000
--- a/lms/djangoapps/courseware/features/registration.py
+++ /dev/null
@@ -1,61 +0,0 @@
-# pylint: disable=missing-docstring
-
-import time
-
-from lettuce import step, world
-from lettuce.django import django_url
-from six import text_type
-
-
-@step('I register for the course "([^"]*)"$')
-def i_register_for_the_course(_step, course):
-    url = django_url('courses/%s/about' % text_type(world.scenario_dict['COURSE'].id))
-    world.browser.visit(url)
-    world.css_click('.intro a.register')
-    assert world.is_css_present('.dashboard')
-
-
-@step('I register to audit the course$')
-def i_register_to_audit_the_course(_step):
-    url = django_url('courses/%s/about' % text_type(world.scenario_dict['COURSE'].id))
-    world.browser.visit(url)
-    world.css_click('.intro a.register')
-    # When the page first loads some animation needs to
-    # complete before this button is in a stable location
-    world.retry_on_exception(
-        lambda: world.browser.find_by_name("honor_mode").click(),
-        max_attempts=10,
-        ignored_exceptions=AttributeError
-    )
-    time.sleep(1)
-    assert world.is_css_present('.dashboard')
-
-
-@step(u'I should see an empty dashboard message')
-def i_should_see_empty_dashboard(_step):
-    empty_dash_css = '.empty-dashboard-message'
-    assert world.is_css_present(empty_dash_css)
-
-
-@step(u'I should( NOT)? see the course numbered "([^"]*)" in my dashboard$')
-def i_should_see_that_course_in_my_dashboard(_step, doesnt_appear, course):
-    course_link_css = '.my-courses a[href*="%s"]' % course
-    if doesnt_appear:
-        assert world.is_css_not_present(course_link_css)
-    else:
-        assert world.is_css_present(course_link_css)
-
-
-@step(u'I unenroll from the course numbered "([^"]*)"')
-def i_unenroll_from_that_course(_step, course):
-    more_actions_dropdown_link_selector = '[id*=actions-dropdown-link-0]'
-    assert world.is_css_present(more_actions_dropdown_link_selector)
-    world.css_click(more_actions_dropdown_link_selector)
-
-    unregister_css = u'li.actions-item a.action-unenroll[data-course-number*="{course_number}"][href*=unenroll-modal]'.format(course_number=course)
-    assert world.is_css_present(unregister_css)
-    world.css_click(unregister_css)
-
-    button_css = '#unenroll-modal input[value="Unenroll"]'
-    assert world.is_css_present(button_css)
-    world.css_click(button_css)
diff --git a/lms/djangoapps/courseware/module_render.py b/lms/djangoapps/courseware/module_render.py
index 10acbf94473..34418052452 100644
--- a/lms/djangoapps/courseware/module_render.py
+++ b/lms/djangoapps/courseware/module_render.py
@@ -23,6 +23,7 @@ from django.views.decorators.clickjacking import xframe_options_exempt
 from django.views.decorators.csrf import csrf_exempt
 from edx_django_utils.cache import RequestCache
 from edx_django_utils.monitoring import set_custom_metrics_for_course_key, set_monitoring_transaction_name
+from edx_proctoring.api import get_attempt_status_summary
 from edx_proctoring.services import ProctoringService
 from edx_rest_framework_extensions.auth.jwt.authentication import JwtAuthentication
 from opaque_keys import InvalidKeyError
@@ -257,28 +258,12 @@ def _add_timed_exam_info(user, course, section, section_context):
         settings.FEATURES.get('ENABLE_SPECIAL_EXAMS', False)
     )
     if section_is_time_limited:
-        # We need to import this here otherwise Lettuce test
-        # harness fails. When running in 'harvest' mode, the
-        # test service appears to get into trouble with
-        # circular references (not sure which as edx_proctoring.api
-        # doesn't import anything from edx-platform). Odd thing
-        # is that running: manage.py lms runserver --settings=acceptance
-        # works just fine, it's really a combination of Lettuce and the
-        # 'harvest' management command
-        #
-        # One idea is that there is some coupling between
-        # lettuce and the 'terrain' Djangoapps projects in /common
-        # This would need more investigation
-        from edx_proctoring.api import get_attempt_status_summary
-
-        #
         # call into edx_proctoring subsystem
         # to get relevant proctoring information regarding this
         # level of the courseware
         #
         # This will return None, if (user, course_id, content_id)
         # is not applicable
-        #
         timed_exam_attempt_context = None
         try:
             timed_exam_attempt_context = get_attempt_status_summary(
diff --git a/lms/djangoapps/instructor/features/__init__.py b/lms/djangoapps/instructor/features/__init__.py
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/lms/djangoapps/instructor/features/common.py b/lms/djangoapps/instructor/features/common.py
deleted file mode 100644
index f191ba1a469..00000000000
--- a/lms/djangoapps/instructor/features/common.py
+++ /dev/null
@@ -1,136 +0,0 @@
-"""
-Define common steps for instructor dashboard acceptance tests.
-"""
-
-# pylint: disable=missing-docstring
-# pylint: disable=no-member
-# pylint: disable=redefined-outer-name
-
-from __future__ import absolute_import
-
-from lettuce import step, world
-from mock import patch
-
-from courseware.tests.factories import InstructorFactory, StaffFactory
-from openedx.core.lib.tests.tools import assert_in  # pylint: disable=no-name-in-module
-
-
-@step(u'Given I am "([^"]*)" for a very large course')
-def make_staff_or_instructor_for_large_course(step, role):
-    make_large_course(step, role)
-
-
-@patch.dict('courseware.access.settings.FEATURES', {"MAX_ENROLLMENT_INSTR_BUTTONS": 0})
-def make_large_course(step, role):
-    i_am_staff_or_instructor(step, role)
-
-
-@step(u'Given I am "([^"]*)" for a course')
-def i_am_staff_or_instructor(step, role):  # pylint: disable=unused-argument
-    ## In summary: makes a test course, makes a new Staff or Instructor user
-    ## (depending on `role`), and logs that user in to the course
-
-    # Store the role
-    assert_in(role, ['instructor', 'staff'])
-
-    # Clear existing courses to avoid conflicts
-    world.clear_courses()
-
-    # Create a new course
-    course = world.CourseFactory.create(
-        org='edx',
-        number='999',
-        display_name='Test Course'
-    )
-
-    world.course_key = course.id
-    world.role = 'instructor'
-    # Log in as the an instructor or staff for the course
-    if role == 'instructor':
-        # Make & register an instructor for the course
-        world.instructor = InstructorFactory(course_key=world.course_key)
-        world.enroll_user(world.instructor, world.course_key)
-
-        world.log_in(
-            username=world.instructor.username,
-            password='test',
-            email=world.instructor.email,
-            name=world.instructor.profile.name
-        )
-
-    else:
-        world.role = 'staff'
-        # Make & register a staff member
-        world.staff = StaffFactory(course_key=world.course_key)
-        world.enroll_user(world.staff, world.course_key)
-
-        world.log_in(
-            username=world.staff.username,
-            password='test',
-            email=world.staff.email,
-            name=world.staff.profile.name
-        )
-
-
-def go_to_section(section_name):
-    # section name should be one of
-    # course_info, membership, student_admin, data_download, analytics, send_email
-    world.visit(u'/courses/{}'.format(world.course_key))
-    world.css_click(u'a[href="/courses/{}/instructor"]'.format(world.course_key))
-    world.css_click('[data-section="{0}"]'.format(section_name))
-
-
-@step(u'I click "([^"]*)"')
-def click_a_button(step, button):  # pylint: disable=unused-argument
-
-    if button == "Generate Grade Report":
-        # Go to the data download section of the instructor dash
-        go_to_section("data_download")
-
-        # Click generate grade report button
-        world.css_click('input[name="calculate-grades-csv"]')
-
-        # Expect to see a message that grade report is being generated
-        expected_msg = "The grade report is being created." \
-                       " To view the status of the report, see" \
-                       " Pending Tasks below."
-        world.wait_for_visible('#report-request-response')
-        assert_in(
-            expected_msg, world.css_text('#report-request-response'),
-            msg="Could not find grade report generation success message."
-        )
-
-    elif button == "Grading Configuration":
-        # Go to the data download section of the instructor dash
-        go_to_section("data_download")
-
-        world.css_click('input[name="dump-gradeconf"]')
-
-    elif button == "List enrolled students' profile information":
-        # Go to the data download section of the instructor dash
-        go_to_section("data_download")
-
-        world.css_click('input[name="list-profiles"]')
-
-    elif button == "Download profile information as a CSV":
-        # Go to the data download section of the instructor dash
-        go_to_section("data_download")
-
-        world.css_click('input[name="list-profiles-csv"]')
-
-    else:
-        raise ValueError("Unrecognized button option " + button)
-
-
-@step(u'I visit the "([^"]*)" tab')
-def click_a_tab(step, tab_name):  # pylint: disable=unused-argument
-    # course_info, membership, student_admin, data_download, analytics, send_email
-    tab_name_dict = {
-        'Course Info': 'course_info',
-        'Membership': 'membership',
-        'Student Admin': 'student_admin',
-        'Data Download': 'data_download',
-        'Analytics': 'analytics',
-        'Email': 'send_email',
-    }
-    go_to_section(tab_name_dict[tab_name])
diff --git a/lms/djangoapps/instructor/features/data_download.py b/lms/djangoapps/instructor/features/data_download.py
deleted file mode 100644
index 3de43355b71..00000000000
--- a/lms/djangoapps/instructor/features/data_download.py
+++ /dev/null
@@ -1,94 +0,0 @@
-"""
-Define steps for instructor dashboard - data download tab
-acceptance tests.
-"""
-
-# pylint: disable=missing-docstring
-# pylint: disable=no-member
-# pylint: disable=redefined-outer-name
-
-from django.utils import http
-from lettuce import step, world
-
-from terrain.steps import reload_the_page
-
-from openedx.core.lib.tests.tools import assert_in, assert_regexp_matches  # pylint: disable=no-name-in-module
-
-
-@step(u'I see a table of student profiles')
-def find_student_profile_table(step):  # pylint: disable=unused-argument
-    # Find the grading configuration display
-    world.wait_for_visible('#data-student-profiles-table')
-
-    # Wait for the data table to be populated
-    world.wait_for(lambda _: world.css_text('#data-student-profiles-table') not in [u'', u'Loading'])
-
-    if world.role == 'instructor':
-        expected_data = [
-            world.instructor.username,
-            world.instructor.email,
-            world.instructor.profile.name,
-            world.instructor.profile.gender,
-            world.instructor.profile.goals
-        ]
-    elif world.role == 'staff':
-        expected_data = [
-            world.staff.username,
-            world.staff.email,
-            world.staff.profile.name,
-            world.staff.profile.gender,
-            world.staff.profile.goals
-        ]
-    for datum in expected_data:
-        assert_in(datum, world.css_text('#data-student-profiles-table'))
-
-
-@step(u"I do not see a button to 'List enrolled students' profile information'")
-def no_student_profile_table(step):  # pylint: disable=unused-argument
-    world.is_css_not_present('input[name="list-profiles"]')
-
-
-@step(u"I see the grading configuration for the course")
-def find_grading_config(step):  # pylint: disable=unused-argument
-    # Find the grading configuration display
-    world.wait_for_visible('#data-grade-config-text')
-    # expected config is the default grading configuration from common/lib/xmodule/xmodule/course_module.py
-    expected_config = u"""-----------------------------------------------------------------------------
-Course grader:
-<class 'xmodule.graders.WeightedSubsectionsGrader'>
-
-Graded sections:
-  subgrader=<class 'xmodule.graders.AssignmentFormatGrader'>, type=Homework, category=Homework, weight=0.15
-  subgrader=<class 'xmodule.graders.AssignmentFormatGrader'>, type=Lab, category=Lab, weight=0.15
-  subgrader=<class 'xmodule.graders.AssignmentFormatGrader'>, type=Midterm Exam, category=Midterm Exam, weight=0.3
-  subgrader=<class 'xmodule.graders.AssignmentFormatGrader'>, type=Final Exam, category=Final Exam, weight=0.4
------------------------------------------------------------------------------
-Listing grading context for course {}
-graded sections:
-[]
-all graded blocks:
-length=0""".format(world.course_key)
-    assert_in(expected_config, world.css_text('#data-grade-config-text'))
-
-
-def verify_report_is_generated(report_name_substring):
-    # Need to reload the page to see the reports table updated
-    reload_the_page(step)
-    world.wait_for_visible('#report-downloads-table')
-    # Find table and assert a .csv file is present
-    quoted_id = http.urlquote(world.course_key).replace('/', '_')
-    expected_file_regexp = quoted_id + '_' + report_name_substring + r'_\d{4}-\d{2}-\d{2}-\d{4}\.csv'
-    assert_regexp_matches(
-        world.css_html('#report-downloads-table'), expected_file_regexp,
-        msg="Expected report filename was not found."
-    )
-
-
-@step(u"I see a grade report csv file in the reports table")
-def find_grade_report_csv_link(step):  # pylint: disable=unused-argument
-    verify_report_is_generated('grade_report')
-
-
-@step(u"I see a student profile csv file in the reports table")
-def find_student_profile_report_csv_link(step):  # pylint: disable=unused-argument
-    verify_report_is_generated('student_profile_info')
diff --git a/lms/envs/acceptance.py b/lms/envs/acceptance.py
deleted file mode 100644
index 15f050f9558..00000000000
--- a/lms/envs/acceptance.py
+++ /dev/null
@@ -1,215 +0,0 @@
-"""
-This config file extends the test environment configuration
-so that we can run the lettuce acceptance tests.
-"""
-
-# We intentionally define lots of variables that aren't used, and
-# want to import all variables from base settings files
-# pylint: disable=wildcard-import, unused-wildcard-import
-
-from .test import *
-
-# You need to start the server in debug mode,
-# otherwise the browser will not render the pages correctly
-DEBUG = True
-SITE_NAME = 'localhost:{}'.format(LETTUCE_SERVER_PORT)
-
-# Output Django logs to a file
-import logging
-logging.basicConfig(filename=TEST_ROOT / "log" / "lms_acceptance.log", level=logging.ERROR)
-
-# set root logger level
-logging.getLogger().setLevel(logging.ERROR)
-
-import os
-from random import choice
-
-
-def seed():
-    return os.getppid()
-
-# Silence noisy logs
-LOG_OVERRIDES = [
-    ('track.middleware', logging.CRITICAL),
-    ('codejail.safe_exec', logging.ERROR),
-    ('edx.courseware', logging.ERROR),
-    ('audit', logging.ERROR),
-    ('lms.djangoapps.instructor_task.api_helper', logging.ERROR),
-]
-
-for log_name, log_level in LOG_OVERRIDES:
-    logging.getLogger(log_name).setLevel(log_level)
-
-update_module_store_settings(
-    MODULESTORE,
-    doc_store_settings={
-        'db': 'acceptance_xmodule',
-        'collection': 'acceptance_modulestore_%s' % seed(),
-    },
-    module_store_options={
-        'fs_root': TEST_ROOT / "data",
-    },
-    default_store=os.environ.get('DEFAULT_STORE', 'draft'),
-)
-CONTENTSTORE = {
-    'ENGINE': 'xmodule.contentstore.mongo.MongoContentStore',
-    'DOC_STORE_CONFIG': {
-        'host': 'localhost',
-        'db': 'acceptance_xcontent_%s' % seed(),
-    }
-}
-
-# Set this up so that 'paver lms --settings=acceptance' and running the
-# harvest command both use the same (test) database
-# which they can flush without messing up your dev db
-DATABASES = {
-    'default': {
-        'ENGINE': 'django.db.backends.sqlite3',
-        'NAME': TEST_ROOT / "db" / "test_edx.db",
-        'OPTIONS': {
-            'timeout': 30,
-        },
-        'ATOMIC_REQUESTS': True,
-        'TEST': {
-            'NAME': TEST_ROOT / "db" / "test_edx.db",
-        },
-    },
-    'student_module_history': {
-        'ENGINE': 'django.db.backends.sqlite3',
-        'NAME': TEST_ROOT / "db" / "test_student_module_history.db",
-        'OPTIONS': {
-            'timeout': 30,
-        },
-        'TEST': {
-            'NAME': TEST_ROOT / "db" / "test_student_module_history.db",
-        },
-    }
-}
-
-TRACKING_BACKENDS.update({
-    'mongo': {
-        'ENGINE': 'track.backends.mongodb.MongoBackend'
-    }
-})
-
-EVENT_TRACKING_BACKENDS['tracking_logs']['OPTIONS']['backends'].update({
-    'mongo': {
-        'ENGINE': 'eventtracking.backends.mongodb.MongoBackend',
-        'OPTIONS': {
-            'database': 'track'
-        }
-    }
-})
-
-
-BULK_EMAIL_DEFAULT_FROM_EMAIL = "test@test.org"
-
-# Forums are disabled in test.py to speed up unit tests, but we do not have
-# per-test control for lettuce acceptance tests.
-# If you are writing an acceptance test that needs the discussion service enabled,
-# do not write it in lettuce, but instead write it using bok-choy.
-# DO NOT CHANGE THIS SETTING HERE.
-FEATURES['ENABLE_DISCUSSION_SERVICE'] = False
-
-# Use the auto_auth workflow for creating users and logging them in
-FEATURES['AUTOMATIC_AUTH_FOR_TESTING'] = True
-FEATURES['RESTRICT_AUTOMATIC_AUTH'] = False
-
-# Enable third-party authentication
-FEATURES['ENABLE_THIRD_PARTY_AUTH'] = True
-THIRD_PARTY_AUTH = {
-    "Google": {
-        "SOCIAL_AUTH_GOOGLE_OAUTH2_KEY": "test",
-        "SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET": "test"
-    },
-    "Facebook": {
-        "SOCIAL_AUTH_FACEBOOK_KEY": "test",
-        "SOCIAL_AUTH_FACEBOOK_SECRET": "test"
-    }
-}
-
-# Enable fake payment processing page
-FEATURES['ENABLE_PAYMENT_FAKE'] = True
-
-# Enable special exams
-FEATURES['ENABLE_SPECIAL_EXAMS'] = True
-
-# Don't actually send any requests to Software Secure for student identity
-# verification.
-FEATURES['AUTOMATIC_VERIFY_STUDENT_IDENTITY_FOR_TESTING'] = True
-
-# HACK
-# Setting this flag to false causes imports to not load correctly in the lettuce python files
-# We do not yet understand why this occurs. Setting this to true is a stopgap measure
-USE_I18N = True
-
-FEATURES['ENABLE_FEEDBACK_SUBMISSION'] = False
-
-# Include the lettuce app for acceptance testing, including the 'harvest' django-admin command
-INSTALLED_APPS.append('lettuce.django')
-LETTUCE_APPS = ('courseware', 'instructor')
-
-# Lettuce appears to have a bug that causes it to search
-# `instructor_task` when we specify the `instructor` app.
-# This causes some pretty cryptic errors as lettuce tries
-# to parse files in `instructor_task` as features.
-# As a quick workaround, explicitly exclude the `instructor_task` app.
-# The coursewarehistoryextended app also falls prey to this fuzzy
-# for the courseware app.
-LETTUCE_AVOID_APPS = ('instructor_task', 'coursewarehistoryextended')
-
-LETTUCE_BROWSER = os.environ.get('LETTUCE_BROWSER', 'chrome')
-
-# Where to run: local, saucelabs, or grid
-LETTUCE_SELENIUM_CLIENT = os.environ.get('LETTUCE_SELENIUM_CLIENT', 'local')
-
-SELENIUM_GRID = {
-    'URL': 'http://127.0.0.1:4444/wd/hub',
-    'BROWSER': LETTUCE_BROWSER,
-}
-
-
-#####################################################################
-# See if the developer has any local overrides.
-try:
-    from .private import *
-except ImportError:
-    pass
-
-# Because an override for where to run will affect which ports to use,
-# set these up after the local overrides.
-# Configure XQueue interface to use our stub XQueue server
-XQUEUE_INTERFACE = {
-    "url": "http://127.0.0.1:{0:d}".format(XQUEUE_PORT),
-    "django_auth": {
-        "username": "lms",
-        "password": "***REMOVED***"
-    },
-    "basic_auth": ('anant', 'agarwal'),
-}
-
-# Point the URL used to test YouTube availability to our stub YouTube server
-YOUTUBE_HOSTNAME = os.environ.get('BOK_CHOY_HOSTNAME', '127.0.0.1')
-YOUTUBE['API'] = "http://{0}:{1}/get_youtube_api/".format(YOUTUBE_HOSTNAME, YOUTUBE_PORT)
-YOUTUBE['METADATA_URL'] = "http://{0}:{1}/test_youtube/".format(YOUTUBE_HOSTNAME, YOUTUBE_PORT)
-YOUTUBE['TEXT_API']['url'] = "{0}:{1}/test_transcripts_youtube/".format(YOUTUBE_HOSTNAME, YOUTUBE_PORT)
-YOUTUBE['TEST_TIMEOUT'] = 1500
-
-if FEATURES.get('ENABLE_COURSEWARE_SEARCH') or \
-   FEATURES.get('ENABLE_DASHBOARD_SEARCH') or \
-   FEATURES.get('ENABLE_COURSE_DISCOVERY'):
-    # Use MockSearchEngine as the search engine for test scenario
-    SEARCH_ENGINE = "search.tests.mock_search_engine.MockSearchEngine"
-
-# Generate a random UUID so that different runs of acceptance tests don't break each other
-import uuid
-SECRET_KEY = uuid.uuid4().hex
-
-############################### PIPELINE #######################################
-
-PIPELINE_ENABLED = False
-REQUIRE_DEBUG = True
-
-# We want to make sure that any new migrations are run
-# see https://groups.google.com/forum/#!msg/django-developers/PWPj3etj3-U/kCl6pMsQYYoJ
-MIGRATION_MODULES = {}
diff --git a/lms/envs/acceptance_docker.py b/lms/envs/acceptance_docker.py
deleted file mode 100644
index 6a9aa2da684..00000000000
--- a/lms/envs/acceptance_docker.py
+++ /dev/null
@@ -1,82 +0,0 @@
-"""
-This config file extends the test environment configuration
-so that we can run the lettuce acceptance tests.
-"""
-
-# We intentionally define lots of variables that aren't used, and
-# want to import all variables from base settings files
-# pylint: disable=wildcard-import, unused-wildcard-import
-
-import os
-
-os.environ['EDXAPP_TEST_MONGO_HOST'] = os.environ.get('EDXAPP_TEST_MONGO_HOST', 'edx.devstack.mongo')
-
-# noinspection PyUnresolvedReferences
-from .acceptance import *
-
-LETTUCE_HOST = os.environ['BOK_CHOY_HOSTNAME']
-SITE_NAME = '{}:{}'.format(LETTUCE_HOST, LETTUCE_SERVER_PORT)
-
-update_module_store_settings(
-    MODULESTORE,
-    doc_store_settings={
-        'db': 'acceptance_xmodule',
-        'host': MONGO_HOST,
-        'port': MONGO_PORT_NUM,
-        'collection': 'acceptance_modulestore_%s' % seed(),
-    },
-    module_store_options={
-        'fs_root': TEST_ROOT / "data",
-    },
-    default_store=os.environ.get('DEFAULT_STORE', 'draft'),
-)
-CONTENTSTORE = {
-    'ENGINE': 'xmodule.contentstore.mongo.MongoContentStore',
-    'DOC_STORE_CONFIG': {
-        'host': MONGO_HOST,
-        'port': MONGO_PORT_NUM,
-        'db': 'acceptance_xcontent_%s' % seed(),
-    }
-}
-
-TRACKING_BACKENDS.update({
-    'mongo': {
-        'ENGINE': 'track.backends.mongodb.MongoBackend',
-        'OPTIONS': {
-            'database': 'test',
-            'collection': 'events',
-            'host': [
-                'edx.devstack.mongo'
-            ],
-            'port': 27017
-        }
-    }
-})
-
-EVENT_TRACKING_BACKENDS['tracking_logs']['OPTIONS']['backends'].update({
-    'mongo': {
-        'ENGINE': 'eventtracking.backends.mongodb.MongoBackend',
-        'OPTIONS': {
-            'database': 'track',
-            'host': [
-                'edx.devstack.mongo'
-            ],
-            'port': 27017
-        }
-    }
-})
-
-# Where to run: local, saucelabs, or grid
-LETTUCE_SELENIUM_CLIENT = os.environ.get('LETTUCE_SELENIUM_CLIENT', 'grid')
-SELENIUM_HOST = 'edx.devstack.{}'.format(LETTUCE_BROWSER)
-SELENIUM_PORT = os.environ.get('SELENIUM_PORT', '4444')
-
-SELENIUM_GRID = {
-    'URL': 'http://{}:{}/wd/hub'.format(SELENIUM_HOST, SELENIUM_PORT),
-    'BROWSER': LETTUCE_BROWSER,
-}
-
-# Point the URL used to test YouTube availability to our stub YouTube server
-YOUTUBE['API'] = "http://{}:{}/get_youtube_api/".format(LETTUCE_HOST, YOUTUBE_PORT)
-YOUTUBE['METADATA_URL'] = "http://{}:{}/test_youtube/".format(LETTUCE_HOST, YOUTUBE_PORT)
-YOUTUBE['TEXT_API']['url'] = "{}:{}/test_transcripts_youtube/".format(LETTUCE_HOST, YOUTUBE_PORT)
diff --git a/lms/envs/test.py b/lms/envs/test.py
index 7960c91ad3c..80754cf1271 100644
--- a/lms/envs/test.py
+++ b/lms/envs/test.py
@@ -357,7 +357,6 @@ BLOCK_STRUCTURES_SETTINGS['PRUNING_ACTIVE'] = True
 
 # These ports are carefully chosen so that if the browser needs to
 # access them, they will be available through the SauceLabs SSH tunnel
-LETTUCE_SERVER_PORT = 8003
 XQUEUE_PORT = 8040
 YOUTUBE_PORT = 8031
 LTI_PORT = 8765
@@ -551,8 +550,6 @@ COMPREHENSIVE_THEME_LOCALE_PATHS = [REPO_ROOT / "themes/conf/locale", ]
 
 LMS_ROOT_URL = "http://localhost:8000"
 
-# TODO (felipemontoya): This key is only needed during lettuce tests.
-# To be removed during https://openedx.atlassian.net/browse/DEPR-19
 FRONTEND_LOGOUT_URL = LMS_ROOT_URL + '/logout'
 
 ECOMMERCE_API_URL = 'https://ecommerce.example.com/api/v2/'
diff --git a/openedx/core/lib/tests/tools.py b/openedx/core/lib/tests/tools.py
deleted file mode 100644
index 8ec7376c01e..00000000000
--- a/openedx/core/lib/tests/tools.py
+++ /dev/null
@@ -1,44 +0,0 @@
-"""
-Copy of the useful parts of nose.tools.  This is only used for lettuce test
-utility functions, which neither use pytest nor have access to a TestCase
-instance.  This module should be deleted once the last lettuce tests have
-been ported over to bok-choy.
-
-Tracebacks should not descend into these functions.
-We define the ``__unittest`` symbol in their module namespace so unittest will
-skip them when printing tracebacks, just as it does for their corresponding
-methods in ``unittest`` proper.
-"""
-from __future__ import absolute_import
-import re
-import unittest
-
-__all__ = []
-
-# Use the same flag as unittest itself to prevent descent into these functions:
-__unittest = 1
-
-# Expose assert* from unittest.TestCase
-# - give them pep8 style names
-caps = re.compile('([A-Z])')
-
-
-def pep8(name):
-    return caps.sub(lambda m: '_' + m.groups()[0].lower(), name)
-
-
-class Dummy(unittest.TestCase):
-    def noop(self):
-        pass
-
-
-_t = Dummy('noop')
-
-for at in [at for at in dir(_t) if at.startswith('assert') and '_' not in at]:
-    pepd = pep8(at)
-    vars()[pepd] = getattr(_t, at)
-    __all__.append(pepd)
-
-del Dummy
-del _t
-del pep8
diff --git a/pavelib/__init__.py b/pavelib/__init__.py
index 9d5f4845eeb..ee695d55936 100644
--- a/pavelib/__init__.py
+++ b/pavelib/__init__.py
@@ -2,6 +2,5 @@
 paver commands
 """
 from . import (
-    assets, servers, docs, prereqs, quality, tests, js_test, i18n, bok_choy,
-    acceptance_test, database
+    assets, servers, docs, prereqs, quality, tests, js_test, i18n, bok_choy, database
 )
diff --git a/pavelib/acceptance_test.py b/pavelib/acceptance_test.py
deleted file mode 100644
index afa24c56c93..00000000000
--- a/pavelib/acceptance_test.py
+++ /dev/null
@@ -1,65 +0,0 @@
-"""
-Acceptance test tasks
-"""
-from __future__ import print_function
-from optparse import make_option
-
-from paver.easy import cmdopts, needs
-
-from pavelib.utils.passthrough_opts import PassthroughTask
-from pavelib.utils.test.suites import AcceptanceTestSuite
-from pavelib.utils.timer import timed
-
-try:
-    from pygments.console import colorize
-except ImportError:
-    colorize = lambda color, text: text
-
-__test__ = False  # do not collect
-
-
-@needs(
-    'pavelib.prereqs.install_prereqs',
-    'pavelib.utils.test.utils.clean_reports_dir',
-)
-@cmdopts([
-    ("system=", "s", "System to act on"),
-    ("default-store=", "m", "Default modulestore to use for course creation"),
-    ("fasttest", "a", "Run without collectstatic"),
-    make_option("--verbose", action="store_const", const=2, dest="verbosity"),
-    make_option("-q", "--quiet", action="store_const", const=0, dest="verbosity"),
-    make_option("-v", "--verbosity", action="count", dest="verbosity"),
-    ("default_store=", None, "deprecated in favor of default-store"),
-    ('extra_args=', 'e', 'deprecated, pass extra options directly in the paver commandline'),
-])
-@PassthroughTask
-@timed
-def test_acceptance(options, passthrough_options):
-    """
-    Run the acceptance tests for either lms or cms
-    """
-    opts = {
-        'fasttest': getattr(options, 'fasttest', False),
-        'system': getattr(options, 'system', None),
-        'default_store': getattr(options, 'default_store', None),
-        'verbosity': getattr(options, 'verbosity', 3),
-        'extra_args': getattr(options, 'extra_args', ''),
-        'pdb': getattr(options, 'pdb', False),
-        'passthrough_options': passthrough_options,
-    }
-
-    if opts['system'] not in ['cms', 'lms']:
-        msg = colorize(
-            'red',
-            'No system specified, running tests for both cms and lms.'
-        )
-        print(msg)
-    if opts['default_store'] not in ['draft', 'split']:
-        msg = colorize(
-            'red',
-            'No modulestore specified, running tests for both draft and split.'
-        )
-        print(msg)
-
-    suite = AcceptanceTestSuite(u'{} acceptance'.format(opts['system']), **opts)
-    suite.run()
diff --git a/pavelib/utils/envs.py b/pavelib/utils/envs.py
index 8e7a346403f..8746d869920 100644
--- a/pavelib/utils/envs.py
+++ b/pavelib/utils/envs.py
@@ -88,9 +88,8 @@ class Env(object):
         BOK_CHOY_REPORT_DIR = BOK_CHOY_REPORT_DIR / shard_str
         BOK_CHOY_LOG_DIR = BOK_CHOY_LOG_DIR / shard_str
 
-    # For the time being, stubs are used by both the bok-choy and lettuce acceptance tests
-    # For this reason, the stubs package is currently located in the Django app called "terrain"
-    # where other lettuce configuration is stored.
+    # The stubs package is currently located in the Django app called "terrain"
+    # from when they were used by both the bok-choy and lettuce (deprecated) acceptance tests
     BOK_CHOY_STUB_DIR = REPO_ROOT / "common" / "djangoapps" / "terrain"
 
     # Directory that videos are served from
diff --git a/pavelib/utils/test/suites/__init__.py b/pavelib/utils/test/suites/__init__.py
index 70950d7ae05..9a7bcace730 100644
--- a/pavelib/utils/test/suites/__init__.py
+++ b/pavelib/utils/test/suites/__init__.py
@@ -5,5 +5,4 @@ from .suite import TestSuite
 from .pytest_suite import PytestSuite, SystemTestSuite, LibTestSuite
 from .python_suite import PythonTestSuite
 from .js_suite import JsTestSuite, JestSnapshotTestSuite
-from .acceptance_suite import AcceptanceTestSuite
 from .bokchoy_suite import BokChoyTestSuite, Pa11yCrawler
diff --git a/pavelib/utils/test/suites/acceptance_suite.py b/pavelib/utils/test/suites/acceptance_suite.py
deleted file mode 100644
index f1029dbec6f..00000000000
--- a/pavelib/utils/test/suites/acceptance_suite.py
+++ /dev/null
@@ -1,161 +0,0 @@
-"""
-Acceptance test suite
-"""
-from os import environ
-from paver.easy import sh, call_task, task
-from pavelib.utils.test import utils as test_utils
-from pavelib.utils.test.suites.suite import TestSuite
-from pavelib.utils.envs import Env
-from pavelib.utils.timer import timed
-
-__test__ = False  # do not collect
-
-
-DBS = {
-    'default': Env.REPO_ROOT / 'test_root/db/test_edx.db',
-    'student_module_history': Env.REPO_ROOT / 'test_root/db/test_student_module_history.db'
-}
-DB_CACHES = {
-    'default': Env.REPO_ROOT / 'common/test/db_cache/lettuce.db',
-    'student_module_history': Env.REPO_ROOT / 'common/test/db_cache/lettuce_student_module_history.db'
-}
-
-
-@task
-@timed
-def setup_acceptance_db():
-    """
-    TODO: Improve the following
-
-    Since the CMS depends on the existence of some database tables
-    that are now in common but used to be in LMS (Role/Permissions for Forums)
-    we need to create/migrate the database tables defined in the LMS.
-    We might be able to address this by moving out the migrations from
-    lms/django_comment_client, but then we'd have to repair all the existing
-    migrations from the upgrade tables in the DB.
-    But for now for either system (lms or cms), use the lms
-    definitions to sync and migrate.
-    """
-
-    for db in DBS:
-        if DBS[db].isfile():
-            # Since we are using SQLLite, we can reset the database by deleting it on disk.
-            DBS[db].remove()
-
-    settings = 'acceptance_docker' if Env.USING_DOCKER else 'acceptance'
-    if all(DB_CACHES[cache].isfile() for cache in DB_CACHES):
-        # To speed up migrations, we check for a cached database file and start from that.
-        # The cached database file should be checked into the repo
-
-        # Copy the cached database to the test root directory
-        for db_alias in DBS:
-            sh(u"cp {db_cache} {db}".format(db_cache=DB_CACHES[db_alias], db=DBS[db_alias]))
-
-        # Run migrations to update the db, starting from its cached state
-        for db_alias in sorted(DBS):
-            # pylint: disable=line-too-long
-            sh(u"./manage.py lms --settings {} migrate --traceback --noinput --fake-initial --database {}".format(settings, db_alias))
-            sh(u"./manage.py cms --settings {} migrate --traceback --noinput --fake-initial --database {}".format(settings, db_alias))
-    else:
-        # If no cached database exists, migrate then create the cache
-        for db_alias in sorted(DBS.keys()):
-            sh(u"./manage.py lms --settings {} migrate --traceback --noinput --database {}".format(settings, db_alias))
-            sh(u"./manage.py cms --settings {} migrate --traceback --noinput --database {}".format(settings, db_alias))
-
-        # Create the cache if it doesn't already exist
-        for db_alias in DBS.keys():
-            sh(u"cp {db} {db_cache}".format(db_cache=DB_CACHES[db_alias], db=DBS[db_alias]))
-
-
-class AcceptanceTest(TestSuite):
-    """
-    A class for running lettuce acceptance tests.
-    """
-    def __init__(self, *args, **kwargs):
-        super(AcceptanceTest, self).__init__(*args, **kwargs)
-        self.report_dir = Env.REPORT_DIR / 'acceptance'
-        self.fasttest = kwargs.get('fasttest', False)
-        self.system = kwargs.get('system')
-        self.default_store = kwargs.get('default_store')
-        self.extra_args = kwargs.get('extra_args', '')
-        self.settings = 'acceptance_docker' if Env.USING_DOCKER else 'acceptance'
-
-    def __enter__(self):
-        super(AcceptanceTest, self).__enter__()
-        self.report_dir.makedirs_p()
-        if not self.fasttest:
-            self._update_assets()
-
-    def __exit__(self, exc_type, exc_value, traceback):
-        super(AcceptanceTest, self).__exit__(exc_type, exc_value, traceback)
-        test_utils.clean_mongo()
-
-    @property
-    def cmd(self):
-
-        lettuce_host = ['LETTUCE_HOST={}'.format(Env.SERVER_HOST)] if Env.USING_DOCKER else []
-        report_file = self.report_dir / "{}.xml".format(self.system)
-        report_args = [u"--xunit-file {}".format(report_file)]
-        return lettuce_host + [
-            # set DBUS_SESSION_BUS_ADDRESS to avoid hangs on Chrome
-            "DBUS_SESSION_BUS_ADDRESS=/dev/null",
-            "DEFAULT_STORE={}".format(self.default_store),
-            "./manage.py",
-            self.system,
-            "--settings={}".format(self.settings),
-            "harvest",
-            "--traceback",
-            "--debug-mode",
-            "--verbosity={}".format(self.verbosity),
-        ] + report_args + [
-            self.extra_args
-        ] + self.passthrough_options
-
-    def _update_assets(self):
-        """
-        Internal helper method to manage asset compilation
-        """
-        args = [self.system, '--settings={}'.format(self.settings)]
-        call_task('pavelib.assets.update_assets', args=args)
-
-
-class AcceptanceTestSuite(TestSuite):
-    """
-    A class for running lettuce acceptance tests.
-    """
-    def __init__(self, *args, **kwargs):
-        super(AcceptanceTestSuite, self).__init__(*args, **kwargs)
-        self.root = 'acceptance'
-        self.fasttest = kwargs.get('fasttest', False)
-
-        # Set the environment so that webpack understands where to compile its resources.
-        # This setting is expected in other environments, so we are setting it for the
-        # bok-choy test run.
-        environ['EDX_PLATFORM_SETTINGS'] = 'test_static_optimized'
-
-        if kwargs.get('system'):
-            systems = [kwargs['system']]
-        else:
-            systems = ['lms', 'cms']
-
-        if kwargs.get('default_store'):
-            stores = [kwargs['default_store']]
-        else:
-            # TODO fix Acceptance tests with Split (LMS-11300)
-            # stores = ['split', 'draft']
-            stores = ['draft']
-
-        self.subsuites = []
-        for system in systems:
-            for default_store in stores:
-                kwargs['system'] = system
-                kwargs['default_store'] = default_store
-                self.subsuites.append(AcceptanceTest(u'{} acceptance using {}'.format(system, default_store), **kwargs))
-
-    def __enter__(self):
-        super(AcceptanceTestSuite, self).__enter__()
-        if not (self.fasttest or self.skip_clean):
-            test_utils.clean_test_files()
-
-        if not self.fasttest:
-            setup_acceptance_db()
diff --git a/requirements/constraints.txt b/requirements/constraints.txt
index 572b7520235..8338fbe8bcb 100644
--- a/requirements/constraints.txt
+++ b/requirements/constraints.txt
@@ -28,9 +28,6 @@ mysqlclient<1.5
 # Can be removed when we get to Python 3.
 pylint-plugin-utils==0.3
 
-# Browser driver used by lettuce - pinned because splinter==0.10.0 breaks lettuce tests.  EDUCATOR-3795
-splinter==0.9.0
-
 # transifex-client 0.13.6 requires urllib3<1.24, but requests will pull in urllib3==1.24 (https://github.com/transifex/transifex-client/pull/241/files)
 urllib3<1.24
 
diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt
index 9df898f5726..6d741701ab4 100644
--- a/requirements/edx/base.txt
+++ b/requirements/edx/base.txt
@@ -112,7 +112,7 @@ edx-django-release-util==0.3.1
 edx-django-sites-extensions==2.3.1
 edx-django-utils==1.0.3
 edx-drf-extensions==2.2.0
-edx-enterprise==1.4.6
+edx-enterprise==1.4.7
 edx-i18n-tools==0.4.8
 edx-milestones==0.1.13
 edx-oauth2-provider==1.2.2
diff --git a/requirements/edx/development.txt b/requirements/edx/development.txt
index 78ae2d892dc..5baa9b5aedb 100644
--- a/requirements/edx/development.txt
+++ b/requirements/edx/development.txt
@@ -21,7 +21,6 @@ git+https://github.com/edx/django-rest-framework.git@1ceda7c086fddffd1c440cc8685
 -e git+https://github.com/edx/DoneXBlock.git@01a14f3bd80ae47dd08cdbbe2f88f3eb88d00fba#egg=done-xblock
 -e git+https://github.com/jazkarta/edx-jsme.git@690dbf75441fa91c7c4899df0b83d77f7deb5458#egg=edx-jsme
 git+https://github.com/mitodl/edx-sga.git@3828ba9e413080a81b907a3381e5ffa05e063f81#egg=edx-sga==0.8.3
-git+https://github.com/edx/lettuce.git@7a04591c78ac56dac3eb3e91ca94b15cce844133#egg=lettuce==0.2.23+edx.1
 git+https://github.com/edx/xblock-lti-consumer.git@v1.1.8#egg=lti_consumer-xblock==1.1.8
 git+https://github.com/edx/MongoDBProxy.git@25b99097615bda06bd7cdfe5669ed80dc2a7fed0#egg=MongoDBProxy==0.1.0
 -e .
@@ -134,7 +133,7 @@ edx-django-release-util==0.3.1
 edx-django-sites-extensions==2.3.1
 edx-django-utils==1.0.3
 edx-drf-extensions==2.2.0
-edx-enterprise==1.4.6
+edx-enterprise==1.4.7
 edx-i18n-tools==0.4.8
 edx-lint==1.1.2
 edx-milestones==0.1.13
@@ -155,13 +154,11 @@ entrypoints==0.3
 enum34==1.1.6
 event-tracking==0.2.8
 execnet==1.6.0
-extras==1.0.0
 factory_boy==2.8.1
 faker==1.0.5
 feedparser==5.1.3
 filelock==3.0.10
 firebase-token-generator==1.3.2
-fixtures==3.0.0
 flake8-polyfill==1.0.2
 flake8==3.7.7
 flask==1.0.2
@@ -172,7 +169,6 @@ funcsigs==1.0.2
 functools32==3.2.3.post2 ; python_version == "2.7"
 future==0.17.1
 futures==3.2.0 ; python_version == "2.7"
-fuzzywuzzy==0.17.0
 geoip2==2.9.0
 glob2==0.6
 gunicorn==19.0
@@ -199,7 +195,6 @@ lazy-object-proxy==1.3.1
 lazy==1.1
 lepl==5.1.3
 libsass==0.10.0
-linecache2==1.0.0
 loremipsum==1.0.5
 lxml==3.8.0
 mailsnake==1.6.4
@@ -279,10 +274,8 @@ pytest==4.4.1
 python-dateutil==2.4.0
 python-levenshtein==0.12.0
 python-memcached==1.59
-python-mimeparse==1.6.0
 python-openid==2.2.5 ; python_version == "2.7"
 python-slugify==1.2.6
-python-subunit==1.3.0
 python-swiftclient==3.7.0
 python3-saml==1.5.0
 pytz==2019.1
@@ -320,25 +313,20 @@ sortedcontainers==2.1.0
 soupsieve==1.9.1
 sphinx==1.8.5
 sphinxcontrib-websupport==1.1.0  # via sphinx
-splinter==0.9.0
 sqlparse==0.3.0
 stevedore==1.30.1
-sure==1.4.11
 sympy==1.4
 testfixtures==6.7.0
-testtools==2.3.0
 text-unidecode==1.2
 tincan==0.0.5
 toml==0.10.0
 tox-battery==0.5.1
 tox==3.9.0
-traceback2==1.4.0
 transifex-client==0.13.6
 twisted==19.2.0
 typing==3.6.6
 unicodecsv==0.14.1
 unidecode==1.0.23
-unittest2==1.1.0
 uritemplate==3.0.0
 urllib3==1.23
 urlobject==2.4.3
diff --git a/requirements/edx/testing.in b/requirements/edx/testing.in
index 45aecbb6f77..e2999327429 100644
--- a/requirements/edx/testing.in
+++ b/requirements/edx/testing.in
@@ -45,11 +45,7 @@ pytest-xdist              # Parallel execution of tests on multiple CPU cores or
 radon                     # Calculates cyclomatic complexity of Python code (code quality utility)
 selenium                  # Browser automation library, used for acceptance tests
 singledispatch            # Backport of functools.singledispatch from Python 3.4+, used in tests of XBlock rendering
-splinter                  # Browser driver used by lettuce
 testfixtures              # Provides a LogCapture utility used by several tests
 tox                       # virtualenv management for tests
 tox-battery               # Makes tox aware of requirements file changes
 transifex-client          # Command-line interface for the Transifex localization service
-
-# Deprecated acceptance testing framework
--e git+https://github.com/edx/lettuce.git@7a04591c78ac56dac3eb3e91ca94b15cce844133#egg=lettuce==0.2.23+edx.1
diff --git a/requirements/edx/testing.txt b/requirements/edx/testing.txt
index 3b33268bc3c..336c9e61bb2 100644
--- a/requirements/edx/testing.txt
+++ b/requirements/edx/testing.txt
@@ -20,7 +20,6 @@ git+https://github.com/edx/django-rest-framework.git@1ceda7c086fddffd1c440cc8685
 -e git+https://github.com/edx/DoneXBlock.git@01a14f3bd80ae47dd08cdbbe2f88f3eb88d00fba#egg=done-xblock
 -e git+https://github.com/jazkarta/edx-jsme.git@690dbf75441fa91c7c4899df0b83d77f7deb5458#egg=edx-jsme
 git+https://github.com/mitodl/edx-sga.git@3828ba9e413080a81b907a3381e5ffa05e063f81#egg=edx-sga==0.8.3
-git+https://github.com/edx/lettuce.git@7a04591c78ac56dac3eb3e91ca94b15cce844133#egg=lettuce==0.2.23+edx.1
 git+https://github.com/edx/xblock-lti-consumer.git@v1.1.8#egg=lti_consumer-xblock==1.1.8
 git+https://github.com/edx/MongoDBProxy.git@25b99097615bda06bd7cdfe5669ed80dc2a7fed0#egg=MongoDBProxy==0.1.0
 -e .
@@ -44,7 +43,7 @@ anyjson==0.3.3
 apipkg==1.5               # via execnet
 appdirs==1.4.3
 argh==0.26.2
-argparse==1.4.0           # via caniusepython3, unittest2
+argparse==1.4.0           # via caniusepython3
 asn1crypto==0.24.0
 astroid==1.5.3            # via pylint, pylint-celery
 atomicwrites==1.3.0       # via pytest
@@ -130,7 +129,7 @@ edx-django-release-util==0.3.1
 edx-django-sites-extensions==2.3.1
 edx-django-utils==1.0.3
 edx-drf-extensions==2.2.0
-edx-enterprise==1.4.6
+edx-enterprise==1.4.7
 edx-i18n-tools==0.4.8
 edx-lint==1.1.2
 edx-milestones==0.1.13
@@ -150,13 +149,11 @@ entrypoints==0.3          # via flake8
 enum34==1.1.6
 event-tracking==0.2.8
 execnet==1.6.0            # via pytest-xdist
-extras==1.0.0             # via python-subunit, testtools
 factory_boy==2.8.1
 faker==1.0.5              # via factory-boy
 feedparser==5.1.3
 filelock==3.0.10          # via tox
 firebase-token-generator==1.3.2
-fixtures==3.0.0           # via testtools
 flake8-polyfill==1.0.2    # via radon
 flake8==3.7.7             # via flake8-polyfill
 flask==1.0.2              # via moto
@@ -167,7 +164,6 @@ funcsigs==1.0.2           # via pytest
 functools32==3.2.3.post2 ; python_version == "2.7"  # via flake8, parsel
 future==0.17.1
 futures==3.2.0 ; python_version == "2.7"
-fuzzywuzzy==0.17.0
 geoip2==2.9.0
 glob2==0.6
 gunicorn==19.0
@@ -193,7 +189,6 @@ lazy-object-proxy==1.3.1  # via astroid
 lazy==1.1
 lepl==5.1.3
 libsass==0.10.0
-linecache2==1.0.0         # via traceback2
 loremipsum==1.0.5
 lxml==3.8.0
 mailsnake==1.6.4
@@ -270,10 +265,8 @@ pytest==4.4.1
 python-dateutil==2.4.0
 python-levenshtein==0.12.0
 python-memcached==1.59
-python-mimeparse==1.6.0   # via testtools
 python-openid==2.2.5 ; python_version == "2.7"
 python-slugify==1.2.6     # via code-annotations, transifex-client
-python-subunit==1.3.0
 python-swiftclient==3.7.0
 python3-saml==1.5.0
 pytz==2019.1
@@ -307,25 +300,20 @@ social-auth-core==1.7.0
 sorl-thumbnail==12.3
 sortedcontainers==2.1.0
 soupsieve==1.9.1
-splinter==0.9.0
 sqlparse==0.3.0
 stevedore==1.30.1
-sure==1.4.11
 sympy==1.4
 testfixtures==6.7.0
-testtools==2.3.0          # via fixtures, python-subunit
 text-unidecode==1.2       # via faker
 tincan==0.0.5
 toml==0.10.0              # via tox
 tox-battery==0.5.1
 tox==3.9.0
-traceback2==1.4.0         # via testtools, unittest2
 transifex-client==0.13.6
 twisted==19.2.0           # via scrapy
 typing==3.6.6             # via flake8
 unicodecsv==0.14.1
 unidecode==1.0.23         # via python-slugify
-unittest2==1.1.0          # via testtools
 uritemplate==3.0.0
 urllib3==1.23
 urlobject==2.4.3          # via pa11ycrawler
diff --git a/scripts/Jenkinsfiles/lettuce b/scripts/Jenkinsfiles/lettuce
deleted file mode 100644
index a61f7f934b5..00000000000
--- a/scripts/Jenkinsfiles/lettuce
+++ /dev/null
@@ -1,151 +0,0 @@
-def runLettuceTests() {
-    // Determine git refspec, branch, and clone type
-    if (env.ghprbActualCommit) {
-        git_branch = "${ghprbActualCommit}"
-        git_refspec = "+refs/pull/${ghprbPullId}/*:refs/remotes/origin/pr/${ghprbPullId}/*"
-    } else {
-        git_branch = "${BRANCH_NAME}"
-        git_refspec = "+refs/heads/${BRANCH_NAME}:refs/remotes/origin/${BRANCH_NAME}"
-    }
-    sshagent(credentials: ['jenkins-worker', 'jenkins-worker-pem'], ignoreMissing: true) {
-        checkout changelog: false, poll: false, scm: [$class: 'GitSCM', branches: [[name: git_branch]],
-            doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'CloneOption', honorRefspec: true,
-            noTags: true, shallow: true]], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'jenkins-worker',
-            refspec: git_refspec, url: "git@github.com:edx/${REPO_NAME}.git"]]]
-        sh 'bash scripts/all-tests.sh'
-    }
-}
-
-def lettuceTestCleanup() {
-    archiveArtifacts allowEmptyArchive: true, artifacts: 'test_root/log/**/*.log,*.log'
-    junit '**/reports/acceptance/*.xml'
-}
-
-pipeline {
-    agent { label "jenkins-worker" }
-    options {
-        timestamps()
-        timeout(60)
-    }
-    stages {
-        stage('Mark build as pending on Github') {
-            when {
-                 // Only run github-build-status for master builds
-                 expression { env.ghprbActualCommit == null }
-            }
-            steps {
-                script {
-                    commit_sha = sh(returnStdout: true, script: 'git rev-parse HEAD').trim()
-                    build job: 'github-build-status',
-                        parameters: [
-                            string(name: 'GIT_SHA', value: commit_sha),
-                            string(name: 'GITHUB_ORG', value: 'edx'),
-                            string(name: 'GITHUB_REPO', value: "${REPO_NAME}"),
-                            string(name: 'TARGET_URL', value: "${BUILD_URL}"),
-                            string(name: 'DESCRIPTION', value: 'Pending'),
-                            string(name: 'CONTEXT', value: "${GITHUB_CONTEXT}"),
-                            string(name: 'CREATE_DEPLOYMENT', value: 'false'),
-                            string(name: 'BUILD_STATUS', value: 'pending')
-                        ],
-                        propagate: false, wait: false
-                }
-            }
-        }
-        stage('Run Tests') {
-            parallel {
-                stage("lms-acceptance") {
-                    agent { label "jenkins-worker" }
-                    environment {
-                        TEST_SUITE = "lms-acceptance"
-                    }
-                    steps {
-                        script {
-                            runLettuceTests()
-                        }
-                    }
-                    post {
-                        always {
-                            script {
-                                lettuceTestCleanup()
-                            }
-                        }
-                    }
-                }
-                stage("cms-acceptance") {
-                    agent { label "jenkins-worker" }
-                    environment {
-                        TEST_SUITE = "cms-acceptance"
-                    }
-                    steps {
-                        script {
-                            runLettuceTests()
-                        }
-                    }
-                    post {
-                        always {
-                            script {
-                                lettuceTestCleanup()
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-    post {
-        always {
-            script{
-                if (env.ghprbPullId != null) {
-                    // For PR jobs, run the edx-platform-test-notifier for PR reporting
-                    build job: 'edx-platform-test-notifier', parameters: [string(name: 'PR_NUMBER', value: "${ghprbPullId}")], wait: false
-                } else {
-                    // For master jobs run github-build-status and report to slack when necessary
-                    if (currentBuild.currentResult == "SUCCESS") {
-                        create_deployment = "true"
-                        build_status = "success"
-                        build_description = "Build Passed"
-                    }
-                    else {
-                        create_deployment = "false"
-                        build_status = "failure"
-                        build_description = "Build Failed"
-                    }
-
-                    commit_sha = sh(returnStdout: true, script: 'git rev-parse HEAD').trim()
-                    build job: 'github-build-status',
-                        parameters: [
-                            string(name: 'GIT_SHA', value: commit_sha),
-                            string(name: 'GITHUB_ORG', value: 'edx'),
-                            string(name: 'GITHUB_REPO', value: "${REPO_NAME}"),
-                            string(name: 'TARGET_URL', value: "${BUILD_URL}"),
-                            string(name: 'DESCRIPTION', value: build_description),
-                            string(name: 'CONTEXT', value: "${GITHUB_CONTEXT}"),
-                            string(name: 'CREATE_DEPLOYMENT', value: create_deployment),
-                            string(name: 'BUILD_STATUS', value: build_status)
-                        ],
-                        propagate: false, wait: false
-
-                    if (currentBuild.currentResult != "SUCCESS"){
-                        slackSend "`${JOB_NAME}` #${BUILD_NUMBER}: ${currentBuild.currentResult} after ${currentBuild.durationString.replace(' and counting', '')}\n${BUILD_URL}"
-
-                        email_body = "See: <${BUILD_URL}>\n\nChanges:\n"
-                        change_sets = currentBuild.changeSets
-                        for (int j = 0; j < change_sets.size(); j++) {
-                            change_set_items = change_sets[j].items
-                            for (int k = 0; k < change_set_items.length; k++) {
-                                item = change_set_items[k]
-                                email_body = email_body + "\n Commit: ${item.commitId} by ${item.author}: ${item.msg}"
-                            }
-                        }
-                        emailext body: email_body,
-                            subject: "Build failed in Jenkins: ${JOB_NAME} #${BUILD_NUMBER}", to: 'testeng@edx.org'
-                    } else if (currentBuild.currentResult == "SUCCESS" && currentBuild.previousBuild.currentResult != "SUCCESS") {
-                        slackSend "`${JOB_NAME}` #${BUILD_NUMBER}: Back to normal after ${currentBuild.durationString.replace(' and counting', '')}\n${BUILD_URL}"
-                        emailext body: "See <${BUILD_URL}>",
-                            subject: "Jenkins Build is back to normal: ${JOB_NAME} #${BUILD_NUMBER}", to: 'testeng@edx.org'
-                    }
-                }
-            }
-        }
-    }
-}
diff --git a/scripts/dependencies/testing.py b/scripts/dependencies/testing.py
index 8d98bc2822d..dfd4409d928 100755
--- a/scripts/dependencies/testing.py
+++ b/scripts/dependencies/testing.py
@@ -25,8 +25,6 @@ pattern_fragments = [
     r'/testutils\.py',                         # testutils.py
     r'/tests$',                                # tests/__init__.py
     r'conftest\.py',                           # conftest.py
-    r'/envs/acceptance\.py',                   # cms/envs/acceptance.py, lms/envs/acceptance.py
-    r'/envs/acceptance_docker\.py',            # cms/envs/acceptance.py, lms/envs/acceptance.py
     r'/factories\.py',                         # factories.py
     r'^terrain',                               # terrain/*
     r'/setup_models_to_send_test_emails\.py',  # setup_models_to_send_test_emails management command
diff --git a/scripts/generic-ci-tests.sh b/scripts/generic-ci-tests.sh
index 5077b338872..90a9dc17b2d 100755
--- a/scripts/generic-ci-tests.sh
+++ b/scripts/generic-ci-tests.sh
@@ -20,10 +20,6 @@ set -e
 #       - "commonlib-unit": Run Python unit tests from the common/lib directory
 #       - "commonlib-js-unit": Run the JavaScript tests and the Python unit
 #           tests from the common/lib directory
-#       - "lms-acceptance": Run the acceptance (Selenium/Lettuce) tests for
-#           the LMS
-#       - "cms-acceptance": Run the acceptance (Selenium/Lettuce) tests for
-#           Studio
 #       - "bok-choy": Run acceptance tests that use the bok-choy framework
 #
 #   `SHARD` is a number indicating which subset of the tests to build.
@@ -176,14 +172,6 @@ case "$TEST_SUITE" in
         exit $EXIT
         ;;
 
-    "lms-acceptance")
-        $TOX paver test_acceptance -s lms -vvv --with-xunit
-        ;;
-
-    "cms-acceptance")
-        $TOX paver test_acceptance -s cms -vvv --with-xunit
-        ;;
-
     "bok-choy")
 
         PAVER_ARGS="-n $NUMBER_OF_BOKCHOY_THREADS"
-- 
GitLab