diff --git a/cms/envs/common.py b/cms/envs/common.py index 2777132278..3eefa42bf6 100644 --- a/cms/envs/common.py +++ b/cms/envs/common.py @@ -94,6 +94,7 @@ from lms.envs.common import ( HELP_TOKENS_BOOKS, SUPPORT_SITE_LINK, + ACTIVATION_EMAIL_SUPPORT_LINK, CONTACT_EMAIL, diff --git a/common/djangoapps/course_modes/models.py b/common/djangoapps/course_modes/models.py index e33ee37222..ad29d2d4a8 100644 --- a/common/djangoapps/course_modes/models.py +++ b/common/djangoapps/course_modes/models.py @@ -122,6 +122,9 @@ class CourseMode(models.Model): DEFAULT_MODE = Mode(AUDIT, _('Audit'), 0, '', 'usd', None, None, None, None) DEFAULT_MODE_SLUG = AUDIT + # Modes utilized for audit/free enrollments + AUDIT_MODES = [AUDIT, HONOR] + # Modes that allow a student to pursue a verified certificate VERIFIED_MODES = [VERIFIED, PROFESSIONAL] diff --git a/common/djangoapps/course_modes/tests/test_views.py b/common/djangoapps/course_modes/tests/test_views.py index efcf0e5ac7..b60edc050e 100644 --- a/common/djangoapps/course_modes/tests/test_views.py +++ b/common/djangoapps/course_modes/tests/test_views.py @@ -133,24 +133,9 @@ class CourseModeViewTest(CatalogIntegrationMixin, UrlResetMixin, ModuleStoreTest self.assertRedirects(response, 'http://testserver/test_basket/?sku=TEST', fetch_redirect_response=False) ecomm_test_utils.update_commerce_config(enabled=False) - @httpretty.activate - def test_no_enrollment(self): - # Create the course modes - for mode in ('audit', 'honor', 'verified'): - CourseModeFactory.create(mode_slug=mode, course_id=self.course.id) - - self.mock_enterprise_learner_api() - - # User visits the track selection page directly without ever enrolling - url = reverse('course_modes_choose', args=[unicode(self.course.id)]) - response = self.client.get(url) - - self.assertEquals(response.status_code, 200) - - @httpretty.activate - def test_enterprise_learner_context(self): + def _generate_enterprise_learner_context(self, enable_audit_enrollment=False): """ - Test: Track selection page should show the enterprise context message if user belongs to the Enterprise. + Internal helper to support common pieces of test case variations """ # Create the course modes for mode in ('audit', 'honor', 'verified'): @@ -159,14 +144,27 @@ class CourseModeViewTest(CatalogIntegrationMixin, UrlResetMixin, ModuleStoreTest catalog_integration = self.create_catalog_integration() UserFactory(username=catalog_integration.service_username) - self.mock_enterprise_learner_api() - self.mock_course_discovery_api_for_catalog_contains( catalog_id=1, course_run_ids=[str(self.course.id)] ) + self.mock_enterprise_learner_api(enable_audit_enrollment=enable_audit_enrollment) + + return reverse('course_modes_choose', args=[unicode(self.course.id)]) + + @httpretty.activate + def test_no_enrollment(self): + url = self._generate_enterprise_learner_context() + response = self.client.get(url) + self.assertEquals(response.status_code, 200) + + @httpretty.activate + def test_enterprise_learner_context(self): + """ + Test: Track selection page should show the enterprise context message if user belongs to the Enterprise. + """ + url = self._generate_enterprise_learner_context() # User visits the track selection page directly without ever enrolling - url = reverse('course_modes_choose', args=[unicode(self.course.id)]) response = self.client.get(url) self.assertEquals(response.status_code, 200) self.assertContains( @@ -185,16 +183,7 @@ class CourseModeViewTest(CatalogIntegrationMixin, UrlResetMixin, ModuleStoreTest Test: Track selection page should show the enterprise context message with multiple organization names if user belongs to the Enterprise. """ - # Create the course modes - for mode in ('audit', 'honor', 'verified'): - CourseModeFactory.create(mode_slug=mode, course_id=self.course.id) - - catalog_integration = self.create_catalog_integration() - UserFactory(username=catalog_integration.service_username) - self.mock_enterprise_learner_api() - self.mock_course_discovery_api_for_catalog_contains( - catalog_id=1, course_run_ids=[str(self.course.id)] - ) + url = self._generate_enterprise_learner_context() # Creating organization for i in xrange(2): @@ -209,7 +198,6 @@ class CourseModeViewTest(CatalogIntegrationMixin, UrlResetMixin, ModuleStoreTest organizations_api.add_organization_course(organization_data=test_org, course_id=unicode(self.course.id)) # User visits the track selection page directly without ever enrolling - url = reverse('course_modes_choose', args=[unicode(self.course.id)]) response = self.client.get(url) self.assertEquals(response.status_code, 200) self.assertContains( @@ -221,6 +209,30 @@ class CourseModeViewTest(CatalogIntegrationMixin, UrlResetMixin, ModuleStoreTest ) ) + @httpretty.activate + def test_enterprise_learner_context_audit_disabled(self): + """ + Track selection page should hide the audit choice by default in an Enterprise Customer/Learner context + """ + + # User visits the track selection page directly without ever enrolling, sees only Verified track choice + url = self._generate_enterprise_learner_context() + response = self.client.get(url) + self.assertContains(response, 'Pursue a Verified Certificate') + self.assertNotContains(response, 'Audit This Course') + + @httpretty.activate + def test_enterprise_learner_context_audit_enabled(self): + """ + Track selection page should display Audit choice when specified for an Enterprise Customer + """ + + # User visits the track selection page directly without ever enrolling, sees both Verified and Audit choices + url = self._generate_enterprise_learner_context(enable_audit_enrollment=True) + response = self.client.get(url) + self.assertContains(response, 'Pursue a Verified Certificate') + self.assertContains(response, 'Audit This Course') + @httpretty.activate @ddt.data( '', diff --git a/common/djangoapps/course_modes/views.py b/common/djangoapps/course_modes/views.py index 9377021f08..69bf5a08e8 100644 --- a/common/djangoapps/course_modes/views.py +++ b/common/djangoapps/course_modes/views.py @@ -156,16 +156,17 @@ class ChooseModeView(View): ) enterprise_learner_data = enterprise_api.get_enterprise_learner_data(site=request.site, user=request.user) if enterprise_learner_data: + enterprise_learner = enterprise_learner_data[0] is_course_in_enterprise_catalog = enterprise_api.is_course_in_enterprise_catalog( site=request.site, course_id=course_id, - enterprise_catalog_id=enterprise_learner_data[0]['enterprise_customer']['catalog'] + enterprise_catalog_id=enterprise_learner['enterprise_customer']['catalog'] ) if is_course_in_enterprise_catalog: partner_names = partner_name = course.display_organization \ if course.display_organization else course.org - enterprise_name = enterprise_learner_data[0]['enterprise_customer']['name'] + enterprise_name = enterprise_learner['enterprise_customer']['name'] organizations = organization_api.get_course_organizations(course_id=course.id) if organizations: partner_names = ' and '.join([org.get('name', partner_name) for org in organizations]) @@ -178,6 +179,12 @@ class ChooseModeView(View): partner_names=partner_names, enterprise_name=enterprise_name ) + + # Hide the audit modes for this enterprise customer, if necessary + if not enterprise_learner['enterprise_customer'].get('enable_audit_enrollment'): + for audit_mode in CourseMode.AUDIT_MODES: + modes.pop(audit_mode, None) + context["title_content"] = title_content if "verified" in modes: diff --git a/common/djangoapps/student/tests/test_activate_account.py b/common/djangoapps/student/tests/test_activate_account.py index 62e89a6cbe..29876fe437 100644 --- a/common/djangoapps/student/tests/test_activate_account.py +++ b/common/djangoapps/student/tests/test_activate_account.py @@ -11,6 +11,7 @@ from uuid import uuid4 from edxmako.shortcuts import render_to_string from student.models import Registration from student.tests.factories import UserFactory +from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers @unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms') @@ -31,6 +32,11 @@ class TestActivateAccount(TestCase): self.registration.register(self.user) self.registration.save() + self.platform_name = configuration_helpers.get_value('PLATFORM_NAME', settings.PLATFORM_NAME) + self.activation_email_support_link = configuration_helpers.get_value( + 'ACTIVATION_EMAIL_SUPPORT_LINK', settings.SUPPORT_SITE_LINK # Intentional default. + ) + def login(self): """ Login with test user. @@ -118,7 +124,11 @@ class TestActivateAccount(TestCase): self.login() expected_message = render_to_string( 'registration/account_activation_sidebar_notice.html', - {'email': self.user.email} + { + 'email': self.user.email, + 'platform_name': self.platform_name, + 'activation_email_support_link': self.activation_email_support_link + } ) response = self.client.get(reverse('dashboard')) @@ -130,7 +140,11 @@ class TestActivateAccount(TestCase): self.login() expected_message = render_to_string( 'registration/account_activation_sidebar_notice.html', - {'email': self.user.email} + { + 'email': self.user.email, + 'platform_name': self.platform_name, + 'activation_email_support_link': self.activation_email_support_link + } ) response = self.client.get(reverse('dashboard')) self.assertNotContains(response, expected_message, html=True) diff --git a/common/djangoapps/student/views.py b/common/djangoapps/student/views.py index ebbd3ae0eb..d658eeb374 100644 --- a/common/djangoapps/student/views.py +++ b/common/djangoapps/student/views.py @@ -657,6 +657,9 @@ def dashboard(request): 'DISPLAY_COURSE_MODES_ON_DASHBOARD', settings.FEATURES.get('DISPLAY_COURSE_MODES_ON_DASHBOARD', True) ) + activation_email_support_link = configuration_helpers.get_value( + 'ACTIVATION_EMAIL_SUPPORT_LINK', settings.SUPPORT_SITE_LINK + ) # Let's filter out any courses in an "org" that has been declared to be # in a configuration @@ -712,12 +715,16 @@ def dashboard(request): if display_account_activation_message_on_sidebar and not user.is_active: sidebar_account_activation_message = render_to_string( 'registration/account_activation_sidebar_notice.html', - {'email': user.email} + { + 'email': user.email, + 'platform_name': platform_name, + 'activation_email_support_link': activation_email_support_link + } ) elif not user.is_active: banner_account_activation_message = render_to_string( 'registration/activate_account_notice.html', - {'email': user.email, 'platform_name': platform_name} + {'email': user.email} ) enterprise_message = get_dashboard_consent_notification(request, user, course_enrollments) @@ -727,11 +734,11 @@ def dashboard(request): message for message in messages.get_messages(request) if 'account-activation' in message.tags ] - # Global staff can see what courses errored on their dashboard + # Global staff can see what courses encountered an error on their dashboard staff_access = False errored_courses = {} if has_access(user, 'staff', 'global'): - # Show any courses that errored on load + # Show any courses that encountered an error on load staff_access = True errored_courses = modulestore().get_errored_courses() diff --git a/common/test/acceptance/fixtures/base.py b/common/test/acceptance/fixtures/base.py index 7acf8b0cb0..ee08fd77d6 100644 --- a/common/test/acceptance/fixtures/base.py +++ b/common/test/acceptance/fixtures/base.py @@ -1,9 +1,10 @@ """ Common code shared by course and library fixtures. """ -import re -import requests import json +import re + +import requests from lazy import lazy from common.test.acceptance.fixtures import STUDIO_BASE_URL diff --git a/common/test/acceptance/fixtures/config.py b/common/test/acceptance/fixtures/config.py index ceb039f32b..6d5b87661f 100644 --- a/common/test/acceptance/fixtures/config.py +++ b/common/test/acceptance/fixtures/config.py @@ -1,11 +1,12 @@ """ Fixture to manipulate configuration models. """ -import requests -import re import json +import re +import requests from lazy import lazy + from common.test.acceptance.fixtures import LMS_BASE_URL diff --git a/common/test/acceptance/fixtures/course.py b/common/test/acceptance/fixtures/course.py index 00321fd672..4d16d5bbf6 100644 --- a/common/test/acceptance/fixtures/course.py +++ b/common/test/acceptance/fixtures/course.py @@ -2,19 +2,17 @@ Fixture to create a course and course components (XBlocks). """ -import mimetypes -import json - import datetime - -from textwrap import dedent +import json +import mimetypes from collections import namedtuple -from path import Path as path +from textwrap import dedent from opaque_keys.edx.keys import CourseKey +from path import Path from common.test.acceptance.fixtures import STUDIO_BASE_URL -from common.test.acceptance.fixtures.base import XBlockContainerFixture, FixtureError +from common.test.acceptance.fixtures.base import FixtureError, XBlockContainerFixture class XBlockFixtureDesc(object): @@ -392,7 +390,7 @@ class CourseFixture(XBlockContainerFixture): """ url = STUDIO_BASE_URL + self._assets_url - test_dir = path(__file__).abspath().dirname().dirname().dirname() + test_dir = Path(__file__).abspath().dirname().dirname().dirname() for asset_name in self._assets: asset_file_path = test_dir + '/data/uploads/' + asset_name diff --git a/common/test/acceptance/fixtures/discussion.py b/common/test/acceptance/fixtures/discussion.py index 4b1b0e70e5..b55de7ea84 100644 --- a/common/test/acceptance/fixtures/discussion.py +++ b/common/test/acceptance/fixtures/discussion.py @@ -2,8 +2,8 @@ Tools for creating discussion content fixture data. """ -from datetime import datetime import json +from datetime import datetime import factory import requests diff --git a/common/test/acceptance/fixtures/edxnotes.py b/common/test/acceptance/fixtures/edxnotes.py index 7469d481d6..1fa20fd9f9 100644 --- a/common/test/acceptance/fixtures/edxnotes.py +++ b/common/test/acceptance/fixtures/edxnotes.py @@ -3,6 +3,7 @@ Tools for creating edxnotes content fixture data. """ import json + import factory import requests diff --git a/common/test/acceptance/fixtures/library.py b/common/test/acceptance/fixtures/library.py index 7e55e9dd77..b22b09bb8e 100644 --- a/common/test/acceptance/fixtures/library.py +++ b/common/test/acceptance/fixtures/library.py @@ -5,7 +5,7 @@ Fixture to create a Content Library from opaque_keys.edx.keys import CourseKey from common.test.acceptance.fixtures import STUDIO_BASE_URL -from common.test.acceptance.fixtures.base import XBlockContainerFixture, FixtureError +from common.test.acceptance.fixtures.base import FixtureError, XBlockContainerFixture class LibraryFixture(XBlockContainerFixture): diff --git a/common/test/acceptance/fixtures/xqueue.py b/common/test/acceptance/fixtures/xqueue.py index 7fc6567c89..c99a1afff5 100644 --- a/common/test/acceptance/fixtures/xqueue.py +++ b/common/test/acceptance/fixtures/xqueue.py @@ -2,9 +2,10 @@ Fixture to configure XQueue response. """ -import requests import json +import requests + from common.test.acceptance.fixtures import XQUEUE_STUB_URL diff --git a/common/test/acceptance/pages/common/logout.py b/common/test/acceptance/pages/common/logout.py index 735e46aa81..1079068ae3 100644 --- a/common/test/acceptance/pages/common/logout.py +++ b/common/test/acceptance/pages/common/logout.py @@ -2,6 +2,7 @@ Logout Page. """ from bok_choy.page_object import PageObject + from common.test.acceptance.pages.common import BASE_URL diff --git a/common/test/acceptance/pages/common/utils.py b/common/test/acceptance/pages/common/utils.py index d763d56a3e..92d98d8c8d 100644 --- a/common/test/acceptance/pages/common/utils.py +++ b/common/test/acceptance/pages/common/utils.py @@ -2,11 +2,12 @@ Utility methods common to Studio and the LMS. """ from bok_choy.promise import BrokenPromise -from common.test.acceptance.tests.helpers import disable_animations from selenium.webdriver.common.action_chains import ActionChains -from common.test.acceptance.pages.lms.pay_and_verify import PaymentAndVerificationFlow, FakePaymentPage -from common.test.acceptance.pages.lms.track_selection import TrackSelectionPage + from common.test.acceptance.pages.lms.create_mode import ModeCreationPage +from common.test.acceptance.pages.lms.pay_and_verify import FakePaymentPage, PaymentAndVerificationFlow +from common.test.acceptance.pages.lms.track_selection import TrackSelectionPage +from common.test.acceptance.tests.helpers import disable_animations def sync_on_notification(page, style='default', wait_for_hide=False): diff --git a/common/test/acceptance/pages/lms/account_settings.py b/common/test/acceptance/pages/lms/account_settings.py index a65461e3cc..c13907efc7 100644 --- a/common/test/acceptance/pages/lms/account_settings.py +++ b/common/test/acceptance/pages/lms/account_settings.py @@ -1,11 +1,10 @@ """ Base class for account settings page. """ -from common.test.acceptance.pages.lms import BASE_URL - from bok_choy.page_object import PageObject from bok_choy.promise import EmptyPromise +from common.test.acceptance.pages.lms import BASE_URL from common.test.acceptance.pages.lms.fields import FieldsMixin diff --git a/common/test/acceptance/pages/lms/auto_auth.py b/common/test/acceptance/pages/lms/auto_auth.py index 601a6bf83c..4567ac7ad1 100644 --- a/common/test/acceptance/pages/lms/auto_auth.py +++ b/common/test/acceptance/pages/lms/auto_auth.py @@ -4,7 +4,9 @@ Auto-auth page (used to automatically log in during testing). import re import urllib -from bok_choy.page_object import PageObject, unguarded, XSS_INJECTION + +from bok_choy.page_object import XSS_INJECTION, PageObject, unguarded + from common.test.acceptance.pages.lms import AUTH_BASE_URL diff --git a/common/test/acceptance/pages/lms/bookmarks.py b/common/test/acceptance/pages/lms/bookmarks.py index 66c0fb66d1..eebd61efb8 100644 --- a/common/test/acceptance/pages/lms/bookmarks.py +++ b/common/test/acceptance/pages/lms/bookmarks.py @@ -1,9 +1,8 @@ """ Courseware Boomarks """ -from bok_choy.promise import EmptyPromise -from common.test.acceptance.pages.lms.course_page import CoursePage from common.test.acceptance.pages.common.paging import PaginatedUIMixin +from common.test.acceptance.pages.lms.course_page import CoursePage class BookmarksPage(CoursePage, PaginatedUIMixin): diff --git a/common/test/acceptance/pages/lms/ccx_dashboard_page.py b/common/test/acceptance/pages/lms/ccx_dashboard_page.py index 0f2be9bce0..02a5fea010 100644 --- a/common/test/acceptance/pages/lms/ccx_dashboard_page.py +++ b/common/test/acceptance/pages/lms/ccx_dashboard_page.py @@ -3,6 +3,7 @@ CCX coach dashboard page """ from bok_choy.promise import EmptyPromise + from common.test.acceptance.pages.lms.course_page import CoursePage diff --git a/common/test/acceptance/pages/lms/certificate_page.py b/common/test/acceptance/pages/lms/certificate_page.py index 0a2d1ac4e0..d9007998c9 100644 --- a/common/test/acceptance/pages/lms/certificate_page.py +++ b/common/test/acceptance/pages/lms/certificate_page.py @@ -4,6 +4,7 @@ Module for Certificates pages. """ from bok_choy.page_object import PageObject + from common.test.acceptance.pages.lms import BASE_URL diff --git a/common/test/acceptance/pages/lms/course_home.py b/common/test/acceptance/pages/lms/course_home.py index 081753bca7..fba7b3f1f2 100644 --- a/common/test/acceptance/pages/lms/course_home.py +++ b/common/test/acceptance/pages/lms/course_home.py @@ -3,6 +3,7 @@ LMS Course Home page object """ from collections import OrderedDict + from bok_choy.page_object import PageObject from .bookmarks import BookmarksPage diff --git a/common/test/acceptance/pages/lms/course_page.py b/common/test/acceptance/pages/lms/course_page.py index 4c856500ce..f4f3241ac8 100644 --- a/common/test/acceptance/pages/lms/course_page.py +++ b/common/test/acceptance/pages/lms/course_page.py @@ -3,6 +3,7 @@ Base class for pages in courseware. """ from bok_choy.page_object import PageObject + from common.test.acceptance.pages.lms import BASE_URL from common.test.acceptance.pages.lms.tab_nav import TabNavPage diff --git a/common/test/acceptance/pages/lms/courseware.py b/common/test/acceptance/pages/lms/courseware.py index 571225ac38..63679b2286 100644 --- a/common/test/acceptance/pages/lms/courseware.py +++ b/common/test/acceptance/pages/lms/courseware.py @@ -2,9 +2,10 @@ Courseware page. """ +import re + from bok_choy.page_object import PageObject, unguarded from bok_choy.promise import EmptyPromise -import re from selenium.webdriver.common.action_chains import ActionChains from common.test.acceptance.pages.lms.bookmarks import BookmarksPage diff --git a/common/test/acceptance/pages/lms/create_mode.py b/common/test/acceptance/pages/lms/create_mode.py index 412035ed99..d50e4630a1 100644 --- a/common/test/acceptance/pages/lms/create_mode.py +++ b/common/test/acceptance/pages/lms/create_mode.py @@ -4,6 +4,7 @@ import re import urllib from bok_choy.page_object import PageObject + from common.test.acceptance.pages.lms import BASE_URL diff --git a/common/test/acceptance/pages/lms/dashboard.py b/common/test/acceptance/pages/lms/dashboard.py index 82f0d4fbf4..b8c2408df2 100644 --- a/common/test/acceptance/pages/lms/dashboard.py +++ b/common/test/acceptance/pages/lms/dashboard.py @@ -3,6 +3,7 @@ Student dashboard page. """ from bok_choy.page_object import PageObject + from common.test.acceptance.pages.lms import BASE_URL diff --git a/common/test/acceptance/pages/lms/dashboard_search.py b/common/test/acceptance/pages/lms/dashboard_search.py index a4d16c4e15..9b25a7dfab 100644 --- a/common/test/acceptance/pages/lms/dashboard_search.py +++ b/common/test/acceptance/pages/lms/dashboard_search.py @@ -3,6 +3,7 @@ Dashboard search """ from bok_choy.page_object import PageObject + from common.test.acceptance.pages.lms import BASE_URL diff --git a/common/test/acceptance/pages/lms/discovery.py b/common/test/acceptance/pages/lms/discovery.py index 59ae95d7d0..35c414e329 100644 --- a/common/test/acceptance/pages/lms/discovery.py +++ b/common/test/acceptance/pages/lms/discovery.py @@ -2,9 +2,10 @@ Course discovery page. """ -from common.test.acceptance.pages.lms import BASE_URL from bok_choy.page_object import PageObject +from common.test.acceptance.pages.lms import BASE_URL + class CourseDiscoveryPage(PageObject): """ diff --git a/common/test/acceptance/pages/lms/discussion.py b/common/test/acceptance/pages/lms/discussion.py index dcb1d83275..e194fdfc33 100644 --- a/common/test/acceptance/pages/lms/discussion.py +++ b/common/test/acceptance/pages/lms/discussion.py @@ -2,12 +2,11 @@ from contextlib import contextmanager from bok_choy.javascript import wait_for_js from bok_choy.page_object import PageObject -from bok_choy.promise import EmptyPromise, Promise +from bok_choy.promise import EmptyPromise -from common.test.acceptance.tests.helpers import is_focused_on_element from common.test.acceptance.pages.common.utils import hover - from common.test.acceptance.pages.lms.course_page import CoursePage +from common.test.acceptance.tests.helpers import is_focused_on_element class DiscussionPageMixin(object): diff --git a/common/test/acceptance/pages/lms/edxnotes.py b/common/test/acceptance/pages/lms/edxnotes.py index 980efdc8c2..dc31ebe681 100644 --- a/common/test/acceptance/pages/lms/edxnotes.py +++ b/common/test/acceptance/pages/lms/edxnotes.py @@ -1,10 +1,11 @@ -from bok_choy.page_object import PageObject, PageLoadError, unguarded +from bok_choy.page_object import PageLoadError, PageObject, unguarded from bok_choy.promise import BrokenPromise, EmptyPromise -from common.test.acceptance.pages.lms.course_page import CoursePage -from common.test.acceptance.pages.common.paging import PaginatedUIMixin -from common.test.acceptance.tests.helpers import disable_animations from selenium.webdriver.common.action_chains import ActionChains +from common.test.acceptance.pages.common.paging import PaginatedUIMixin +from common.test.acceptance.pages.lms.course_page import CoursePage +from common.test.acceptance.tests.helpers import disable_animations + class NoteChild(PageObject): url = None diff --git a/common/test/acceptance/pages/lms/find_courses.py b/common/test/acceptance/pages/lms/find_courses.py index e7a29601c8..e69d292937 100644 --- a/common/test/acceptance/pages/lms/find_courses.py +++ b/common/test/acceptance/pages/lms/find_courses.py @@ -3,6 +3,7 @@ Find courses page (main page of the LMS). """ from bok_choy.page_object import PageObject + from common.test.acceptance.pages.lms import BASE_URL diff --git a/common/test/acceptance/pages/lms/index.py b/common/test/acceptance/pages/lms/index.py index 4b8222b8ee..e6dcb84d67 100644 --- a/common/test/acceptance/pages/lms/index.py +++ b/common/test/acceptance/pages/lms/index.py @@ -3,6 +3,7 @@ LMS index (home) page. """ from bok_choy.page_object import PageObject + from common.test.acceptance.pages.lms import BASE_URL BANNER_SELECTOR = 'section.home header div.outer-wrapper div.title .heading-group h1' diff --git a/common/test/acceptance/pages/lms/instructor_dashboard.py b/common/test/acceptance/pages/lms/instructor_dashboard.py index 7a7a82735a..b6000e0e3f 100644 --- a/common/test/acceptance/pages/lms/instructor_dashboard.py +++ b/common/test/acceptance/pages/lms/instructor_dashboard.py @@ -3,11 +3,13 @@ Instructor (2) dashboard page. """ -from bok_choy.page_object import PageObject -from common.test.acceptance.pages.lms.course_page import CoursePage import os + +from bok_choy.page_object import PageObject from bok_choy.promise import EmptyPromise, Promise -from common.test.acceptance.tests.helpers import select_option_by_text, get_selected_option_text, get_options + +from common.test.acceptance.pages.lms.course_page import CoursePage +from common.test.acceptance.tests.helpers import get_options, get_selected_option_text, select_option_by_text class InstructorDashboardPage(CoursePage): diff --git a/common/test/acceptance/pages/lms/learner_profile.py b/common/test/acceptance/pages/lms/learner_profile.py index 5edc33c8e6..73751e0f30 100644 --- a/common/test/acceptance/pages/lms/learner_profile.py +++ b/common/test/acceptance/pages/lms/learner_profile.py @@ -1,16 +1,15 @@ """ Bok-Choy PageObject class for learner profile page. """ -from bok_choy.query import BrowserQuery - -from common.test.acceptance.pages.lms import BASE_URL from bok_choy.page_object import PageObject -from common.test.acceptance.pages.lms.fields import FieldsMixin from bok_choy.promise import EmptyPromise -from common.test.acceptance.pages.lms.instructor_dashboard import InstructorDashboardPage -from common.test.acceptance.tests.helpers import select_option_by_value +from bok_choy.query import BrowserQuery from selenium.webdriver import ActionChains +from common.test.acceptance.pages.lms import BASE_URL +from common.test.acceptance.pages.lms.fields import FieldsMixin +from common.test.acceptance.pages.lms.instructor_dashboard import InstructorDashboardPage +from common.test.acceptance.tests.helpers import select_option_by_value PROFILE_VISIBILITY_SELECTOR = '#u-field-select-account_privacy option[value="{}"]' PROFILE_VISIBILITY_INPUT = '#u-field-select-account_privacy' diff --git a/common/test/acceptance/pages/lms/login.py b/common/test/acceptance/pages/lms/login.py index a67bd797f9..2f948e2900 100644 --- a/common/test/acceptance/pages/lms/login.py +++ b/common/test/acceptance/pages/lms/login.py @@ -4,6 +4,7 @@ Login page for the LMS. from bok_choy.page_object import PageObject from bok_choy.promise import EmptyPromise + from common.test.acceptance.pages.lms import BASE_URL from common.test.acceptance.pages.lms.dashboard import DashboardPage diff --git a/common/test/acceptance/pages/lms/login_and_register.py b/common/test/acceptance/pages/lms/login_and_register.py index 83f89a8380..e4f400cb80 100644 --- a/common/test/acceptance/pages/lms/login_and_register.py +++ b/common/test/acceptance/pages/lms/login_and_register.py @@ -1,8 +1,10 @@ """Login and Registration pages """ from urllib import urlencode + from bok_choy.page_object import PageObject, unguarded -from bok_choy.promise import Promise, EmptyPromise +from bok_choy.promise import EmptyPromise, Promise + from common.test.acceptance.pages.lms import BASE_URL from common.test.acceptance.pages.lms.dashboard import DashboardPage diff --git a/common/test/acceptance/pages/lms/oauth2_confirmation.py b/common/test/acceptance/pages/lms/oauth2_confirmation.py index f949b3267f..8608142d36 100644 --- a/common/test/acceptance/pages/lms/oauth2_confirmation.py +++ b/common/test/acceptance/pages/lms/oauth2_confirmation.py @@ -1,8 +1,8 @@ """Pages relevant for OAuth2 confirmation.""" -from common.test.acceptance.pages.lms import BASE_URL - from bok_choy.page_object import PageObject +from common.test.acceptance.pages.lms import BASE_URL + class OAuth2Confirmation(PageObject): """Page for OAuth2 confirmation view.""" diff --git a/common/test/acceptance/pages/lms/pay_and_verify.py b/common/test/acceptance/pages/lms/pay_and_verify.py index 4d057995c3..8e97e9b22f 100644 --- a/common/test/acceptance/pages/lms/pay_and_verify.py +++ b/common/test/acceptance/pages/lms/pay_and_verify.py @@ -4,6 +4,7 @@ import re from bok_choy.page_object import PageObject from bok_choy.promise import Promise + from common.test.acceptance.pages.lms import BASE_URL from common.test.acceptance.pages.lms.dashboard import DashboardPage diff --git a/common/test/acceptance/pages/lms/problem.py b/common/test/acceptance/pages/lms/problem.py index 4abe520abd..fb9d3dcd73 100644 --- a/common/test/acceptance/pages/lms/problem.py +++ b/common/test/acceptance/pages/lms/problem.py @@ -2,9 +2,10 @@ Problem Page. """ from bok_choy.page_object import PageObject -from common.test.acceptance.pages.common.utils import click_css from selenium.webdriver.common.keys import Keys +from common.test.acceptance.pages.common.utils import click_css + class ProblemPage(PageObject): """ diff --git a/common/test/acceptance/pages/lms/staff_view.py b/common/test/acceptance/pages/lms/staff_view.py index bb474d21fe..34976325ef 100644 --- a/common/test/acceptance/pages/lms/staff_view.py +++ b/common/test/acceptance/pages/lms/staff_view.py @@ -2,6 +2,7 @@ Staff views of various tabs (e.g. courseware, course home) """ from bok_choy.page_object import PageObject + from common.test.acceptance.pages.lms.courseware import CoursewarePage diff --git a/common/test/acceptance/pages/lms/tab_nav.py b/common/test/acceptance/pages/lms/tab_nav.py index c9bf15c529..53368d6e2b 100644 --- a/common/test/acceptance/pages/lms/tab_nav.py +++ b/common/test/acceptance/pages/lms/tab_nav.py @@ -3,7 +3,7 @@ High-level tab navigation. """ from bok_choy.page_object import PageObject -from bok_choy.promise import Promise, EmptyPromise +from bok_choy.promise import EmptyPromise, Promise class TabNavPage(PageObject): diff --git a/common/test/acceptance/pages/lms/teams.py b/common/test/acceptance/pages/lms/teams.py index 2443d3950c..9068c43add 100644 --- a/common/test/acceptance/pages/lms/teams.py +++ b/common/test/acceptance/pages/lms/teams.py @@ -3,14 +3,12 @@ Teams pages. """ +from common.test.acceptance.pages.common.paging import PaginatedUIMixin +from common.test.acceptance.pages.common.utils import click_css, confirm_prompt from common.test.acceptance.pages.lms.course_page import CoursePage from common.test.acceptance.pages.lms.discussion import InlineDiscussionPage -from common.test.acceptance.pages.common.paging import PaginatedUIMixin -from common.test.acceptance.pages.common.utils import confirm_prompt, click_css - from common.test.acceptance.pages.lms.fields import FieldsMixin - TOPIC_CARD_CSS = 'div.wrapper-card-core' CARD_TITLE_CSS = 'h3.card-title' MY_TEAMS_BUTTON_CSS = '.nav-item[data-index="0"]' diff --git a/common/test/acceptance/pages/lms/textbook_view.py b/common/test/acceptance/pages/lms/textbook_view.py index a22ff627b8..11c0ad3036 100644 --- a/common/test/acceptance/pages/lms/textbook_view.py +++ b/common/test/acceptance/pages/lms/textbook_view.py @@ -2,9 +2,10 @@ Course Textbooks page. """ -from common.test.acceptance.pages.lms.course_page import CoursePage from bok_choy.promise import EmptyPromise +from common.test.acceptance.pages.lms.course_page import CoursePage + class TextbookViewPage(CoursePage): """ diff --git a/common/test/acceptance/pages/lms/track_selection.py b/common/test/acceptance/pages/lms/track_selection.py index d651fcd734..42fe1a8140 100644 --- a/common/test/acceptance/pages/lms/track_selection.py +++ b/common/test/acceptance/pages/lms/track_selection.py @@ -1,5 +1,6 @@ """Track selection page""" from bok_choy.page_object import PageObject + from common.test.acceptance.pages.lms import BASE_URL from common.test.acceptance.pages.lms.dashboard import DashboardPage from common.test.acceptance.pages.lms.pay_and_verify import PaymentAndVerificationFlow diff --git a/common/test/acceptance/pages/lms/video/video.py b/common/test/acceptance/pages/lms/video/video.py index 0daaa73c08..db6ca969bd 100644 --- a/common/test/acceptance/pages/lms/video/video.py +++ b/common/test/acceptance/pages/lms/video/video.py @@ -2,15 +2,16 @@ Video player in the courseware. """ -import time import json +import logging +import time + import requests -from selenium.webdriver.common.action_chains import ActionChains +from bok_choy.javascript import js_defined, wait_for_js from bok_choy.page_object import PageObject from bok_choy.promise import EmptyPromise, Promise -from bok_choy.javascript import wait_for_js, js_defined +from selenium.webdriver.common.action_chains import ActionChains -import logging log = logging.getLogger('VideoPage') VIDEO_BUTTONS = { diff --git a/common/test/acceptance/pages/studio/asset_index.py b/common/test/acceptance/pages/studio/asset_index.py index 35d2449272..7ed8f5068c 100644 --- a/common/test/acceptance/pages/studio/asset_index.py +++ b/common/test/acceptance/pages/studio/asset_index.py @@ -2,12 +2,14 @@ The Files and Uploads page for a course in Studio """ -import urllib import os +import urllib + +from bok_choy.javascript import wait_for_js from opaque_keys.edx.locator import CourseLocator + from common.test.acceptance.pages.studio import BASE_URL from common.test.acceptance.pages.studio.course_page import CoursePage -from bok_choy.javascript import wait_for_js class AssetIndexPage(CoursePage): diff --git a/common/test/acceptance/pages/studio/auto_auth.py b/common/test/acceptance/pages/studio/auto_auth.py index cbc9f275e6..a9ac5ff56e 100644 --- a/common/test/acceptance/pages/studio/auto_auth.py +++ b/common/test/acceptance/pages/studio/auto_auth.py @@ -4,7 +4,9 @@ Auto-auth page (used to automatically log in during testing). import re import urllib + from bok_choy.page_object import PageObject + from common.test.acceptance.pages.studio import BASE_URL diff --git a/common/test/acceptance/pages/studio/component_editor.py b/common/test/acceptance/pages/studio/component_editor.py index 6534ff7e70..6136ec8d07 100644 --- a/common/test/acceptance/pages/studio/component_editor.py +++ b/common/test/acceptance/pages/studio/component_editor.py @@ -1,9 +1,10 @@ from bok_choy.page_object import PageObject from selenium.webdriver.common.keys import Keys -from common.test.acceptance.pages.common.utils import click_css -from common.test.acceptance.tests.helpers import select_option_by_text, get_selected_option_text from selenium.webdriver.support.ui import Select +from common.test.acceptance.pages.common.utils import click_css +from common.test.acceptance.tests.helpers import get_selected_option_text, select_option_by_text + class BaseComponentEditorView(PageObject): """ diff --git a/common/test/acceptance/pages/studio/container.py b/common/test/acceptance/pages/studio/container.py index bf0c89487f..f4dcdbba22 100644 --- a/common/test/acceptance/pages/studio/container.py +++ b/common/test/acceptance/pages/studio/container.py @@ -3,13 +3,11 @@ Container page in Studio """ from bok_choy.page_object import PageObject -from bok_choy.promise import Promise, EmptyPromise -from common.test.acceptance.pages.studio import BASE_URL -from common.test.acceptance.pages.studio.utils import HelpMixin +from bok_choy.promise import EmptyPromise, Promise from common.test.acceptance.pages.common.utils import click_css, confirm_prompt - -from common.test.acceptance.pages.studio.utils import type_in_codemirror +from common.test.acceptance.pages.studio import BASE_URL +from common.test.acceptance.pages.studio.utils import HelpMixin, type_in_codemirror class ContainerPage(PageObject, HelpMixin): diff --git a/common/test/acceptance/pages/studio/course_info.py b/common/test/acceptance/pages/studio/course_info.py index b5a381ecd7..7ceccb4c92 100644 --- a/common/test/acceptance/pages/studio/course_info.py +++ b/common/test/acceptance/pages/studio/course_info.py @@ -3,7 +3,7 @@ Course Updates page. """ from common.test.acceptance.pages.common.utils import click_css, confirm_prompt from common.test.acceptance.pages.studio.course_page import CoursePage -from common.test.acceptance.pages.studio.utils import type_in_codemirror, set_input_value +from common.test.acceptance.pages.studio.utils import set_input_value, type_in_codemirror class CourseUpdatesPage(CoursePage): diff --git a/common/test/acceptance/pages/studio/course_page.py b/common/test/acceptance/pages/studio/course_page.py index a03c0355c4..e04be870ee 100644 --- a/common/test/acceptance/pages/studio/course_page.py +++ b/common/test/acceptance/pages/studio/course_page.py @@ -1,10 +1,12 @@ """ Base class for pages specific to a course in Studio. """ -from abc import abstractmethod import os -from opaque_keys.edx.locator import CourseLocator +from abc import abstractmethod + from bok_choy.page_object import PageObject +from opaque_keys.edx.locator import CourseLocator + from common.test.acceptance.pages.studio import BASE_URL from common.test.acceptance.pages.studio.utils import HelpMixin diff --git a/common/test/acceptance/pages/studio/html_component_editor.py b/common/test/acceptance/pages/studio/html_component_editor.py index cc6fc0a9fd..6456bde4e3 100644 --- a/common/test/acceptance/pages/studio/html_component_editor.py +++ b/common/test/acceptance/pages/studio/html_component_editor.py @@ -1,5 +1,5 @@ -from component_editor import ComponentEditorView from common.test.acceptance.pages.studio.utils import type_in_codemirror +from component_editor import ComponentEditorView class HtmlComponentEditorView(ComponentEditorView): diff --git a/common/test/acceptance/pages/studio/import_export.py b/common/test/acceptance/pages/studio/import_export.py index d49f66704b..6fd98a7d07 100644 --- a/common/test/acceptance/pages/studio/import_export.py +++ b/common/test/acceptance/pages/studio/import_export.py @@ -1,19 +1,18 @@ """ Import/Export pages. """ +import os +import re import time from datetime import datetime -from bok_choy.promise import EmptyPromise -import os -import re import requests +from bok_choy.promise import EmptyPromise from common.test.acceptance.pages.common.utils import click_css - -from common.test.acceptance.pages.studio.library import LibraryPage -from common.test.acceptance.pages.studio.course_page import CoursePage from common.test.acceptance.pages.studio import BASE_URL +from common.test.acceptance.pages.studio.course_page import CoursePage +from common.test.acceptance.pages.studio.library import LibraryPage class TemplateCheckMixin(object): diff --git a/common/test/acceptance/pages/studio/library.py b/common/test/acceptance/pages/studio/library.py index 007f1080ad..45419505cb 100644 --- a/common/test/acceptance/pages/studio/library.py +++ b/common/test/acceptance/pages/studio/library.py @@ -4,16 +4,16 @@ Library edit page in Studio from bok_choy.javascript import js_defined, wait_for_js from bok_choy.page_object import PageObject from bok_choy.promise import EmptyPromise +from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.select import Select + +from common.test.acceptance.pages.common.utils import confirm_prompt, sync_on_notification +from common.test.acceptance.pages.studio import BASE_URL from common.test.acceptance.pages.studio.component_editor import ComponentEditorView from common.test.acceptance.pages.studio.container import XBlockWrapper -from common.test.acceptance.pages.studio.users import UsersPageMixin from common.test.acceptance.pages.studio.pagination import PaginatedMixin -from selenium.webdriver.common.keys import Keys +from common.test.acceptance.pages.studio.users import UsersPageMixin from common.test.acceptance.pages.studio.utils import HelpMixin -from common.test.acceptance.pages.common.utils import confirm_prompt, sync_on_notification - -from common.test.acceptance.pages.studio import BASE_URL class LibraryPage(PageObject, HelpMixin): diff --git a/common/test/acceptance/pages/studio/move_xblock.py b/common/test/acceptance/pages/studio/move_xblock.py index 3072bb2b96..96f794c4f1 100644 --- a/common/test/acceptance/pages/studio/move_xblock.py +++ b/common/test/acceptance/pages/studio/move_xblock.py @@ -2,6 +2,7 @@ Move XBlock Modal Page Object """ from bok_choy.page_object import PageObject + from common.test.acceptance.pages.common.utils import click_css diff --git a/common/test/acceptance/pages/studio/overview.py b/common/test/acceptance/pages/studio/overview.py index 02f181f969..16b131d298 100644 --- a/common/test/acceptance/pages/studio/overview.py +++ b/common/test/acceptance/pages/studio/overview.py @@ -3,20 +3,18 @@ Course Outline page in Studio. """ import datetime +from bok_choy.javascript import js_defined, wait_for_js from bok_choy.page_object import PageObject from bok_choy.promise import EmptyPromise -from bok_choy.javascript import js_defined, wait_for_js - from selenium.webdriver import ActionChains -from selenium.webdriver.support.ui import Select from selenium.webdriver.common.keys import Keys +from selenium.webdriver.support.ui import Select from common.test.acceptance.pages.common.utils import click_css, confirm_prompt -from common.test.acceptance.tests.helpers import disable_animations, enable_animations - -from common.test.acceptance.pages.studio.course_page import CoursePage from common.test.acceptance.pages.studio.container import ContainerPage -from common.test.acceptance.pages.studio.utils import set_input_value_and_save, set_input_value +from common.test.acceptance.pages.studio.course_page import CoursePage +from common.test.acceptance.pages.studio.utils import set_input_value, set_input_value_and_save +from common.test.acceptance.tests.helpers import disable_animations, enable_animations @js_defined('jQuery') diff --git a/common/test/acceptance/pages/studio/settings.py b/common/test/acceptance/pages/studio/settings.py index 7ba3d8fc88..8a6e164239 100644 --- a/common/test/acceptance/pages/studio/settings.py +++ b/common/test/acceptance/pages/studio/settings.py @@ -3,16 +3,15 @@ Course Schedule and Details Settings page. """ from __future__ import unicode_literals + import os -from bok_choy.promise import EmptyPromise + from bok_choy.javascript import requirejs +from bok_choy.promise import EmptyPromise from common.test.acceptance.pages.studio.course_page import CoursePage from common.test.acceptance.pages.studio.users import wait_for_ajax_or_reload -from common.test.acceptance.pages.studio.utils import ( - press_the_notification_button, - type_in_codemirror -) +from common.test.acceptance.pages.studio.utils import press_the_notification_button, type_in_codemirror @requirejs('js/factories/settings') diff --git a/common/test/acceptance/pages/studio/settings_advanced.py b/common/test/acceptance/pages/studio/settings_advanced.py index eb47bd007a..6e56ca7a61 100644 --- a/common/test/acceptance/pages/studio/settings_advanced.py +++ b/common/test/acceptance/pages/studio/settings_advanced.py @@ -3,14 +3,14 @@ Course Advanced Settings page """ from bok_choy.promise import EmptyPromise + from common.test.acceptance.pages.studio.course_page import CoursePage from common.test.acceptance.pages.studio.utils import ( - press_the_notification_button, - type_in_codemirror, get_codemirror_value, + press_the_notification_button, + type_in_codemirror ) - KEY_CSS = '.key h3.title' UNDO_BUTTON_SELECTOR = ".action-item .action-undo" MANUAL_BUTTON_SELECTOR = ".action-item .action-cancel" diff --git a/common/test/acceptance/pages/studio/settings_certificates.py b/common/test/acceptance/pages/studio/settings_certificates.py index 7e6de2da4b..f785ecfcde 100644 --- a/common/test/acceptance/pages/studio/settings_certificates.py +++ b/common/test/acceptance/pages/studio/settings_certificates.py @@ -11,9 +11,10 @@ The methods in these classes are organized into several conceptual buckets: import os from bok_choy.promise import EmptyPromise +from selenium.webdriver import ActionChains + from common.test.acceptance.pages.studio.course_page import CoursePage from common.test.acceptance.tests.helpers import disable_animations -from selenium.webdriver import ActionChains class CertificatesPage(CoursePage): diff --git a/common/test/acceptance/pages/studio/signup.py b/common/test/acceptance/pages/studio/signup.py index d3bbac1b94..0178f66ca3 100644 --- a/common/test/acceptance/pages/studio/signup.py +++ b/common/test/acceptance/pages/studio/signup.py @@ -3,9 +3,9 @@ Signup page for studio """ from bok_choy.page_object import PageObject -from common.test.acceptance.pages.studio import BASE_URL -from common.test.acceptance.pages.studio.utils import set_input_value, HelpMixin from common.test.acceptance.pages.common.utils import click_css +from common.test.acceptance.pages.studio import BASE_URL +from common.test.acceptance.pages.studio.utils import HelpMixin, set_input_value class SignupPage(PageObject, HelpMixin): diff --git a/common/test/acceptance/pages/studio/textbook_upload.py b/common/test/acceptance/pages/studio/textbook_upload.py index cfb893fef0..3b5a7317f5 100644 --- a/common/test/acceptance/pages/studio/textbook_upload.py +++ b/common/test/acceptance/pages/studio/textbook_upload.py @@ -4,6 +4,7 @@ Course Textbooks page. import requests from path import Path as path + from common.test.acceptance.pages.common.utils import click_css from common.test.acceptance.pages.studio.course_page import CoursePage diff --git a/common/test/acceptance/pages/studio/users.py b/common/test/acceptance/pages/studio/users.py index 29c237b282..751a4b9ba3 100644 --- a/common/test/acceptance/pages/studio/users.py +++ b/common/test/acceptance/pages/studio/users.py @@ -2,13 +2,15 @@ Page classes to test either the Course Team page or the Library Team page. """ import os -from opaque_keys.edx.locator import CourseLocator -from bok_choy.promise import EmptyPromise + from bok_choy.page_object import PageObject -from common.test.acceptance.tests.helpers import disable_animations -from common.test.acceptance.pages.studio.course_page import CoursePage +from bok_choy.promise import EmptyPromise +from opaque_keys.edx.locator import CourseLocator + from common.test.acceptance.pages.studio import BASE_URL +from common.test.acceptance.pages.studio.course_page import CoursePage from common.test.acceptance.pages.studio.utils import HelpMixin +from common.test.acceptance.tests.helpers import disable_animations def wait_for_ajax_or_reload(browser): diff --git a/common/test/acceptance/pages/studio/utils.py b/common/test/acceptance/pages/studio/utils.py index 17eaea68c7..90c694a3e0 100644 --- a/common/test/acceptance/pages/studio/utils.py +++ b/common/test/acceptance/pages/studio/utils.py @@ -1,14 +1,13 @@ """ Utility methods useful for Studio page tests. """ -from selenium.webdriver.common.action_chains import ActionChains -from selenium.webdriver.common.keys import Keys from bok_choy.javascript import js_defined from bok_choy.promise import EmptyPromise +from selenium.webdriver.common.action_chains import ActionChains +from selenium.webdriver.common.keys import Keys from common.test.acceptance.pages.common.utils import click_css, sync_on_notification - NAV_HELP_NOT_SIGNED_IN_CSS = '.nav-item.nav-not-signedin-help a' NAV_HELP_CSS = '.nav-item.nav-account-help a' SIDE_BAR_HELP_AS_LIST_ITEM = '.bit li.action-item a' diff --git a/common/test/acceptance/pages/studio/video/video.py b/common/test/acceptance/pages/studio/video/video.py index 0d6bb616ce..1b6f75d8a8 100644 --- a/common/test/acceptance/pages/studio/video/video.py +++ b/common/test/acceptance/pages/studio/video/video.py @@ -1,17 +1,18 @@ """ CMS Video """ -import time import os -import requests -from bok_choy.promise import EmptyPromise, Promise -from bok_choy.javascript import wait_for_js, js_defined -from common.test.acceptance.tests.helpers import YouTubeStubConfig -from common.test.acceptance.pages.lms.video.video import VideoPage -from common.test.acceptance.pages.common.utils import sync_on_notification -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.common.action_chains import ActionChains +import time +import requests +from bok_choy.javascript import js_defined, wait_for_js +from bok_choy.promise import EmptyPromise, Promise +from selenium.webdriver.common.action_chains import ActionChains +from selenium.webdriver.common.keys import Keys + +from common.test.acceptance.pages.common.utils import sync_on_notification +from common.test.acceptance.pages.lms.video.video import VideoPage +from common.test.acceptance.tests.helpers import YouTubeStubConfig CLASS_SELECTORS = { 'video_container': '.video', diff --git a/common/test/acceptance/pages/xblock/acid.py b/common/test/acceptance/pages/xblock/acid.py index efc9c94293..2153b9c798 100644 --- a/common/test/acceptance/pages/xblock/acid.py +++ b/common/test/acceptance/pages/xblock/acid.py @@ -3,7 +3,8 @@ PageObjects related to the AcidBlock """ from bok_choy.page_object import PageObject -from bok_choy.promise import EmptyPromise, BrokenPromise +from bok_choy.promise import BrokenPromise, EmptyPromise + from common.test.acceptance.pages.xblock.utils import wait_for_xblock_initialization diff --git a/common/test/acceptance/performance/test_lms_performance.py b/common/test/acceptance/performance/test_lms_performance.py index 7ed9280bc5..db00c745a9 100644 --- a/common/test/acceptance/performance/test_lms_performance.py +++ b/common/test/acceptance/performance/test_lms_performance.py @@ -2,16 +2,17 @@ Single page performance tests for LMS. """ from bok_choy.web_app_test import with_cache +from nose.plugins.attrib import attr + +from common.test.acceptance.fixtures.course import CourseFixture, CourseUpdateDesc, XBlockFixtureDesc +from common.test.acceptance.pages.common.logout import LogoutPage from common.test.acceptance.pages.lms.auto_auth import AutoAuthPage +from common.test.acceptance.pages.lms.course_info import CourseInfoPage from common.test.acceptance.pages.lms.courseware import CoursewarePage from common.test.acceptance.pages.lms.dashboard import DashboardPage -from common.test.acceptance.pages.lms.course_info import CourseInfoPage from common.test.acceptance.pages.lms.login import LoginPage from common.test.acceptance.pages.lms.progress import ProgressPage -from common.test.acceptance.pages.common.logout import LogoutPage -from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc, CourseUpdateDesc from common.test.acceptance.tests.helpers import UniqueCourseTest, load_data_str -from nose.plugins.attrib import attr @attr(har_mode='explicit') diff --git a/common/test/acceptance/performance/test_studio_performance.py b/common/test/acceptance/performance/test_studio_performance.py index d68e391f8f..1fac54b8bd 100644 --- a/common/test/acceptance/performance/test_studio_performance.py +++ b/common/test/acceptance/performance/test_studio_performance.py @@ -4,11 +4,11 @@ Single page performance tests for Studio. from bok_choy.web_app_test import with_cache from nose.plugins.attrib import attr -from ..tests.helpers import AcceptanceTest - from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage from common.test.acceptance.pages.studio.overview import CourseOutlinePage +from ..tests.helpers import AcceptanceTest + @attr(har_mode='explicit') class StudioPagePerformanceTest(AcceptanceTest): diff --git a/common/test/acceptance/setup.py b/common/test/acceptance/setup.py index 4a25ecb38e..75a03fe51a 100644 --- a/common/test/acceptance/setup.py +++ b/common/test/acceptance/setup.py @@ -5,6 +5,7 @@ Install bok-choy page objects for acceptance and end-to-end tests. """ import os + from setuptools import setup VERSION = '0.0.1' diff --git a/common/test/acceptance/tests/discussion/helpers.py b/common/test/acceptance/tests/discussion/helpers.py index 58fdf99cf6..95c4543c91 100644 --- a/common/test/acceptance/tests/discussion/helpers.py +++ b/common/test/acceptance/tests/discussion/helpers.py @@ -2,17 +2,17 @@ Helper functions and classes for discussion tests. """ -from uuid import uuid4 import json +from uuid import uuid4 from common.test.acceptance.fixtures import LMS_BASE_URL -from common.test.acceptance.fixtures.course import (CourseFixture, XBlockFixtureDesc) +from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc from common.test.acceptance.fixtures.discussion import ( - SingleThreadViewFixture, - Thread, - Response, ForumsConfigMixin, MultipleThreadFixture, + Response, + SingleThreadViewFixture, + Thread ) from common.test.acceptance.pages.lms.discussion import DiscussionTabSingleThreadPage from common.test.acceptance.tests.helpers import UniqueCourseTest diff --git a/common/test/acceptance/tests/discussion/test_cohort_management.py b/common/test/acceptance/tests/discussion/test_cohort_management.py index 0acb2d8c6b..2c93172ab4 100644 --- a/common/test/acceptance/tests/discussion/test_cohort_management.py +++ b/common/test/acceptance/tests/discussion/test_cohort_management.py @@ -9,15 +9,16 @@ from datetime import datetime import unicodecsv from bok_choy.promise import EmptyPromise +from nose.plugins.attrib import attr +from pytz import UTC, utc + from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc from common.test.acceptance.pages.lms.auto_auth import AutoAuthPage from common.test.acceptance.pages.lms.instructor_dashboard import DataDownloadPage, InstructorDashboardPage from common.test.acceptance.pages.studio.settings_group_configurations import GroupConfigurationsPage from common.test.acceptance.tests.discussion.helpers import CohortTestMixin from common.test.acceptance.tests.helpers import EventsTestMixin, UniqueCourseTest, create_user_partition_json -from nose.plugins.attrib import attr from openedx.core.lib.partitions.partitions import Group -from pytz import UTC, utc @attr(shard=8) diff --git a/common/test/acceptance/tests/discussion/test_cohorts.py b/common/test/acceptance/tests/discussion/test_cohorts.py index c26d709a35..6f0cbab97e 100644 --- a/common/test/acceptance/tests/discussion/test_cohorts.py +++ b/common/test/acceptance/tests/discussion/test_cohorts.py @@ -3,20 +3,15 @@ Tests related to the cohorting feature. """ from uuid import uuid4 -from common.test.acceptance.tests.discussion.helpers import BaseDiscussionMixin, BaseDiscussionTestCase -from common.test.acceptance.tests.discussion.helpers import CohortTestMixin -from common.test.acceptance.tests.helpers import UniqueCourseTest -from common.test.acceptance.pages.lms.auto_auth import AutoAuthPage -from common.test.acceptance.fixtures.course import (CourseFixture, XBlockFixtureDesc) - -from common.test.acceptance.pages.lms.discussion import ( - DiscussionTabSingleThreadPage, - InlineDiscussionThreadPage, - InlineDiscussionPage) -from common.test.acceptance.pages.lms.courseware import CoursewarePage - from nose.plugins.attrib import attr +from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc +from common.test.acceptance.pages.lms.auto_auth import AutoAuthPage +from common.test.acceptance.pages.lms.courseware import CoursewarePage +from common.test.acceptance.pages.lms.discussion import DiscussionTabSingleThreadPage, InlineDiscussionPage +from common.test.acceptance.tests.discussion.helpers import BaseDiscussionMixin, BaseDiscussionTestCase, CohortTestMixin +from common.test.acceptance.tests.helpers import UniqueCourseTest + class NonCohortedDiscussionTestMixin(BaseDiscussionMixin): """ diff --git a/common/test/acceptance/tests/discussion/test_discussion.py b/common/test/acceptance/tests/discussion/test_discussion.py index 65096562a8..566292f731 100644 --- a/common/test/acceptance/tests/discussion/test_discussion.py +++ b/common/test/acceptance/tests/discussion/test_discussion.py @@ -5,40 +5,34 @@ Tests for discussion pages import datetime from uuid import uuid4 +from flaky import flaky from nose.plugins.attrib import attr from nose.tools import nottest from pytz import UTC -from flaky import flaky - -from common.test.acceptance.tests.discussion.helpers import BaseDiscussionTestCase -from common.test.acceptance.tests.helpers import UniqueCourseTest, get_modal_alert -from common.test.acceptance.pages.lms.auto_auth import AutoAuthPage -from common.test.acceptance.pages.lms.courseware import CoursewarePage -from common.test.acceptance.pages.lms.discussion import ( - DiscussionTabSingleThreadPage, - InlineDiscussionPage, - InlineDiscussionThreadPage, - DiscussionUserProfilePage, - DiscussionTabHomePage, - DiscussionSortPreferencePage, -) -from common.test.acceptance.pages.lms.learner_profile import LearnerProfilePage -from common.test.acceptance.pages.lms.tab_nav import TabNavPage from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc from common.test.acceptance.fixtures.discussion import ( - SingleThreadViewFixture, - UserProfileViewFixture, - SearchResultFixture, - Thread, - Response, Comment, + Response, SearchResult, - MultipleThreadFixture, + SearchResultFixture, + SingleThreadViewFixture, + Thread, + UserProfileViewFixture ) - -from common.test.acceptance.tests.discussion.helpers import BaseDiscussionMixin -from common.test.acceptance.tests.helpers import skip_if_browser +from common.test.acceptance.pages.lms.auto_auth import AutoAuthPage +from common.test.acceptance.pages.lms.courseware import CoursewarePage +from common.test.acceptance.pages.lms.discussion import ( + DiscussionSortPreferencePage, + DiscussionTabHomePage, + DiscussionTabSingleThreadPage, + DiscussionUserProfilePage, + InlineDiscussionPage +) +from common.test.acceptance.pages.lms.learner_profile import LearnerProfilePage +from common.test.acceptance.pages.lms.tab_nav import TabNavPage +from common.test.acceptance.tests.discussion.helpers import BaseDiscussionMixin, BaseDiscussionTestCase +from common.test.acceptance.tests.helpers import UniqueCourseTest, get_modal_alert, skip_if_browser THREAD_CONTENT_WITH_LATEX = """Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt diff --git a/common/test/acceptance/tests/helpers.py b/common/test/acceptance/tests/helpers.py index d026814c18..174b9fd4ce 100644 --- a/common/test/acceptance/tests/helpers.py +++ b/common/test/acceptance/tests/helpers.py @@ -19,14 +19,7 @@ from bok_choy.javascript import js_defined from bok_choy.page_object import XSS_INJECTION from bok_choy.promise import EmptyPromise, Promise from bok_choy.web_app_test import WebAppTest -from capa.tests.response_xml_factory import MultipleChoiceResponseXMLFactory -from common.test.acceptance.fixtures.course import XBlockFixtureDesc -from common.test.acceptance.pages.common import BASE_URL -from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage from opaque_keys.edx.locator import CourseLocator -from openedx.core.lib.partitions.partitions import UserPartition -from openedx.core.lib.tests.assertions.events import EventMatchTolerates, assert_event_matches, is_matching_event -from openedx.core.release import RELEASE_LINE, doc_version from path import Path as path from pymongo import ASCENDING, MongoClient from selenium.common.exceptions import StaleElementReferenceException @@ -36,6 +29,14 @@ from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.select import Select from selenium.webdriver.support.ui import WebDriverWait +from capa.tests.response_xml_factory import MultipleChoiceResponseXMLFactory +from common.test.acceptance.fixtures.course import XBlockFixtureDesc +from common.test.acceptance.pages.common import BASE_URL +from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage +from openedx.core.lib.partitions.partitions import UserPartition +from openedx.core.lib.tests.assertions.events import EventMatchTolerates, assert_event_matches, is_matching_event +from openedx.core.release import RELEASE_LINE, doc_version + MAX_EVENTS_IN_FAILURE_OUTPUT = 20 diff --git a/common/test/acceptance/tests/lms/test_bookmarks.py b/common/test/acceptance/tests/lms/test_bookmarks.py index 60a9e8e3a2..47ba0e5911 100644 --- a/common/test/acceptance/tests/lms/test_bookmarks.py +++ b/common/test/acceptance/tests/lms/test_bookmarks.py @@ -3,18 +3,19 @@ End-to-end tests for the courseware unit bookmarks. """ import json -from nose.plugins.attrib import attr + import requests -from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage as StudioAutoAuthPage +from nose.plugins.attrib import attr + +from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc +from common.test.acceptance.pages.common import BASE_URL +from common.test.acceptance.pages.common.logout import LogoutPage from common.test.acceptance.pages.lms.auto_auth import AutoAuthPage as LmsAutoAuthPage from common.test.acceptance.pages.lms.bookmarks import BookmarksPage from common.test.acceptance.pages.lms.course_home import CourseHomePage from common.test.acceptance.pages.lms.courseware import CoursewarePage +from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage as StudioAutoAuthPage from common.test.acceptance.pages.studio.overview import CourseOutlinePage as StudioCourseOutlinePage -from common.test.acceptance.pages.common.logout import LogoutPage -from common.test.acceptance.pages.common import BASE_URL - -from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc from common.test.acceptance.tests.helpers import EventsTestMixin, UniqueCourseTest, is_404_page diff --git a/common/test/acceptance/tests/lms/test_ccx.py b/common/test/acceptance/tests/lms/test_ccx.py index 2a1105aa0e..a181035be5 100644 --- a/common/test/acceptance/tests/lms/test_ccx.py +++ b/common/test/acceptance/tests/lms/test_ccx.py @@ -5,9 +5,9 @@ End-to-end tests for the CCX dashboard. from nose.plugins.attrib import attr from common.test.acceptance.fixtures.course import CourseFixture -from common.test.acceptance.tests.helpers import UniqueCourseTest, EventsTestMixin from common.test.acceptance.pages.lms.auto_auth import AutoAuthPage from common.test.acceptance.pages.lms.ccx_dashboard_page import CoachDashboardPage +from common.test.acceptance.tests.helpers import EventsTestMixin, UniqueCourseTest @attr(shard=7) diff --git a/common/test/acceptance/tests/lms/test_certificate_web_view.py b/common/test/acceptance/tests/lms/test_certificate_web_view.py index acc1e12ad1..35bf75d0b9 100644 --- a/common/test/acceptance/tests/lms/test_certificate_web_view.py +++ b/common/test/acceptance/tests/lms/test_certificate_web_view.py @@ -1,10 +1,10 @@ """ Acceptance tests for the certificate web view feature. """ -from common.test.acceptance.tests.helpers import UniqueCourseTest, EventsTestMixin, load_data_str, get_element_padding from nose.plugins.attrib import attr -from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc, CourseUpdateDesc + from common.test.acceptance.fixtures.certificates import CertificateConfigFixture +from common.test.acceptance.fixtures.course import CourseFixture, CourseUpdateDesc, XBlockFixtureDesc from common.test.acceptance.pages.lms.auto_auth import AutoAuthPage from common.test.acceptance.pages.lms.certificate_page import CertificatePage from common.test.acceptance.pages.lms.course_home import CourseHomePage @@ -13,6 +13,8 @@ from common.test.acceptance.pages.lms.courseware import CoursewarePage from common.test.acceptance.pages.lms.progress import ProgressPage from common.test.acceptance.pages.lms.tab_nav import TabNavPage from common.test.acceptance.pages.lms.instructor_dashboard import InstructorDashboardPage +from common.test.acceptance.tests.helpers import EventsTestMixin, UniqueCourseTest, get_element_padding, load_data_str + @attr(shard=5) diff --git a/common/test/acceptance/tests/lms/test_conditional.py b/common/test/acceptance/tests/lms/test_conditional.py index 662a0fd9cf..dfd6741014 100644 --- a/common/test/acceptance/tests/lms/test_conditional.py +++ b/common/test/acceptance/tests/lms/test_conditional.py @@ -3,12 +3,12 @@ Bok choy acceptance tests for conditionals in the LMS """ from capa.tests.response_xml_factory import StringResponseXMLFactory -from common.test.acceptance.tests.helpers import UniqueCourseTest from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc +from common.test.acceptance.pages.lms.conditional import POLL_ANSWER, ConditionalPage from common.test.acceptance.pages.lms.courseware import CoursewarePage -from common.test.acceptance.pages.lms.conditional import ConditionalPage, POLL_ANSWER from common.test.acceptance.pages.lms.problem import ProblemPage from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage +from common.test.acceptance.tests.helpers import UniqueCourseTest class ConditionalTest(UniqueCourseTest): diff --git a/common/test/acceptance/tests/lms/test_learner_profile.py b/common/test/acceptance/tests/lms/test_learner_profile.py index a721221228..dbda1becf2 100644 --- a/common/test/acceptance/tests/lms/test_learner_profile.py +++ b/common/test/acceptance/tests/lms/test_learner_profile.py @@ -3,16 +3,15 @@ End-to-end tests for Student's Profile Page. """ from contextlib import contextmanager - from datetime import datetime + from nose.plugins.attrib import attr from common.test.acceptance.pages.common.logout import LogoutPage from common.test.acceptance.pages.lms.account_settings import AccountSettingsPage from common.test.acceptance.pages.lms.auto_auth import AutoAuthPage -from common.test.acceptance.pages.lms.learner_profile import LearnerProfilePage from common.test.acceptance.pages.lms.dashboard import DashboardPage - +from common.test.acceptance.pages.lms.learner_profile import LearnerProfilePage from common.test.acceptance.tests.helpers import AcceptanceTest, EventsTestMixin diff --git a/common/test/acceptance/tests/lms/test_library.py b/common/test/acceptance/tests/lms/test_library.py index f3ea494639..8bd5649398 100644 --- a/common/test/acceptance/tests/lms/test_library.py +++ b/common/test/acceptance/tests/lms/test_library.py @@ -2,20 +2,21 @@ """ End-to-end tests for LibraryContent block in LMS """ -import ddt import textwrap +import ddt from nose.plugins.attrib import attr -from common.test.acceptance.tests.helpers import UniqueCourseTest, TestWithSearchIndexMixin -from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage -from common.test.acceptance.pages.studio.overview import CourseOutlinePage as StudioCourseOutlinePage -from common.test.acceptance.pages.studio.library import StudioLibraryContentEditor, StudioLibraryContainerXBlockWrapper + +from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc +from common.test.acceptance.fixtures.library import LibraryFixture +from common.test.acceptance.pages.common.logout import LogoutPage from common.test.acceptance.pages.lms.course_home import CourseHomePage from common.test.acceptance.pages.lms.courseware import CoursewarePage from common.test.acceptance.pages.lms.library import LibraryContentXBlockWrapper -from common.test.acceptance.pages.common.logout import LogoutPage -from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc -from common.test.acceptance.fixtures.library import LibraryFixture +from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage +from common.test.acceptance.pages.studio.library import StudioLibraryContainerXBlockWrapper, StudioLibraryContentEditor +from common.test.acceptance.pages.studio.overview import CourseOutlinePage as StudioCourseOutlinePage +from common.test.acceptance.tests.helpers import TestWithSearchIndexMixin, UniqueCourseTest SECTION_NAME = 'Test Section' SUBSECTION_NAME = 'Test Subsection' diff --git a/common/test/acceptance/tests/lms/test_lms.py b/common/test/acceptance/tests/lms/test_lms.py index c3c5095666..84fd3a4010 100644 --- a/common/test/acceptance/tests/lms/test_lms.py +++ b/common/test/acceptance/tests/lms/test_lms.py @@ -2,46 +2,50 @@ """ End-to-end tests for the LMS. """ +import urllib from datetime import datetime, timedelta -from flaky import flaky from textwrap import dedent from unittest import skip -from nose.plugins.attrib import attr -import pytz -import urllib +import pytz from bok_choy.promise import EmptyPromise -from common.test.acceptance.tests.helpers import ( - UniqueCourseTest, - EventsTestMixin, - load_data_str, - generate_course_key, - select_option_by_value, - element_has_text, - select_option_by_text, - get_selected_option_text -) +from flaky import flaky +from nose.plugins.attrib import attr + +from common.test.acceptance.fixtures.course import CourseFixture, CourseUpdateDesc, XBlockFixtureDesc from common.test.acceptance.pages.common.logout import LogoutPage +from common.test.acceptance.pages.common.utils import enroll_user_track from common.test.acceptance.pages.lms import BASE_URL from common.test.acceptance.pages.lms.account_settings import AccountSettingsPage from common.test.acceptance.pages.lms.auto_auth import AutoAuthPage -from common.test.acceptance.pages.lms.create_mode import ModeCreationPage from common.test.acceptance.pages.lms.course_home import CourseHomePage from common.test.acceptance.pages.lms.course_info import CourseInfoPage from common.test.acceptance.pages.lms.course_wiki import ( - CourseWikiPage, CourseWikiEditPage, CourseWikiHistoryPage, CourseWikiChildrenPage + CourseWikiChildrenPage, + CourseWikiEditPage, + CourseWikiHistoryPage, + CourseWikiPage ) from common.test.acceptance.pages.lms.courseware import CoursewarePage +from common.test.acceptance.pages.lms.create_mode import ModeCreationPage from common.test.acceptance.pages.lms.dashboard import DashboardPage from common.test.acceptance.pages.lms.login_and_register import CombinedLoginAndRegisterPage, ResetPasswordPage -from common.test.acceptance.pages.lms.pay_and_verify import PaymentAndVerificationFlow, FakePaymentPage -from common.test.acceptance.pages.lms.progress import ProgressPage +from common.test.acceptance.pages.lms.pay_and_verify import FakePaymentPage, PaymentAndVerificationFlow from common.test.acceptance.pages.lms.problem import ProblemPage +from common.test.acceptance.pages.lms.progress import ProgressPage from common.test.acceptance.pages.lms.tab_nav import TabNavPage from common.test.acceptance.pages.lms.video.video import VideoPage -from common.test.acceptance.pages.common.utils import enroll_user_track from common.test.acceptance.pages.studio.settings import SettingsPage -from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc, CourseUpdateDesc +from common.test.acceptance.tests.helpers import ( + EventsTestMixin, + UniqueCourseTest, + element_has_text, + generate_course_key, + get_selected_option_text, + load_data_str, + select_option_by_text, + select_option_by_value +) @attr(shard=8) diff --git a/common/test/acceptance/tests/lms/test_lms_acid_xblock.py b/common/test/acceptance/tests/lms/test_lms_acid_xblock.py index f064a73610..7b52fb47bc 100644 --- a/common/test/acceptance/tests/lms/test_lms_acid_xblock.py +++ b/common/test/acceptance/tests/lms/test_lms_acid_xblock.py @@ -5,11 +5,11 @@ End-to-end tests for the LMS. from unittest import expectedFailure -from common.test.acceptance.tests.helpers import UniqueCourseTest +from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc from common.test.acceptance.pages.lms.auto_auth import AutoAuthPage from common.test.acceptance.pages.lms.courseware import CoursewarePage from common.test.acceptance.pages.xblock.acid import AcidView -from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc +from common.test.acceptance.tests.helpers import UniqueCourseTest class XBlockAcidBase(UniqueCourseTest): diff --git a/common/test/acceptance/tests/lms/test_lms_cohorted_courseware_search.py b/common/test/acceptance/tests/lms/test_lms_cohorted_courseware_search.py index 7b97ed4fad..fada8c7a2d 100644 --- a/common/test/acceptance/tests/lms/test_lms_cohorted_courseware_search.py +++ b/common/test/acceptance/tests/lms/test_lms_cohorted_courseware_search.py @@ -5,24 +5,20 @@ Test courseware search import json import uuid -from common.test.acceptance.tests.helpers import remove_file -from common.test.acceptance.pages.common.logout import LogoutPage -from common.test.acceptance.pages.studio.overview import CourseOutlinePage as StudioCourseOutlinePage -from common.test.acceptance.pages.lms.courseware_search import CoursewareSearchPage -from common.test.acceptance.pages.lms.staff_view import StaffCoursewarePage -from common.test.acceptance.fixtures.course import XBlockFixtureDesc - from nose.plugins.attrib import attr -from common.test.acceptance.tests.studio.base_studio_test import ContainerBase - -from common.test.acceptance.pages.studio.settings_group_configurations import GroupConfigurationsPage -from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage as StudioAutoAuthPage from common.test.acceptance.fixtures import LMS_BASE_URL -from common.test.acceptance.pages.studio.component_editor import ComponentVisibilityEditorView +from common.test.acceptance.fixtures.course import XBlockFixtureDesc +from common.test.acceptance.pages.common.logout import LogoutPage +from common.test.acceptance.pages.lms.courseware_search import CoursewareSearchPage from common.test.acceptance.pages.lms.instructor_dashboard import InstructorDashboardPage - -from bok_choy.promise import EmptyPromise +from common.test.acceptance.pages.lms.staff_view import StaffCoursewarePage +from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage as StudioAutoAuthPage +from common.test.acceptance.pages.studio.component_editor import ComponentVisibilityEditorView +from common.test.acceptance.pages.studio.overview import CourseOutlinePage as StudioCourseOutlinePage +from common.test.acceptance.pages.studio.settings_group_configurations import GroupConfigurationsPage +from common.test.acceptance.tests.helpers import remove_file +from common.test.acceptance.tests.studio.base_studio_test import ContainerBase @attr(shard=1) diff --git a/common/test/acceptance/tests/lms/test_lms_course_discovery.py b/common/test/acceptance/tests/lms/test_lms_course_discovery.py index d7ea863a7c..7da3c78b3e 100644 --- a/common/test/acceptance/tests/lms/test_lms_course_discovery.py +++ b/common/test/acceptance/tests/lms/test_lms_course_discovery.py @@ -5,11 +5,11 @@ import datetime import json import uuid -from common.test.acceptance.tests.helpers import AcceptanceTest, remove_file -from common.test.acceptance.pages.common.logout import LogoutPage -from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage -from common.test.acceptance.pages.lms.discovery import CourseDiscoveryPage from common.test.acceptance.fixtures.course import CourseFixture +from common.test.acceptance.pages.common.logout import LogoutPage +from common.test.acceptance.pages.lms.discovery import CourseDiscoveryPage +from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage +from common.test.acceptance.tests.helpers import AcceptanceTest, remove_file class CourseDiscoveryTest(AcceptanceTest): diff --git a/common/test/acceptance/tests/lms/test_lms_course_home.py b/common/test/acceptance/tests/lms/test_lms_course_home.py index b5118f21df..bff6f6dd2e 100644 --- a/common/test/acceptance/tests/lms/test_lms_course_home.py +++ b/common/test/acceptance/tests/lms/test_lms_course_home.py @@ -2,14 +2,13 @@ """ End-to-end tests for the LMS that utilize the course home page and course outline. """ -from contextlib import contextmanager from nose.plugins.attrib import attr -from ..helpers import auto_auth, load_data_str, UniqueCourseTest from ...fixtures.course import CourseFixture, XBlockFixtureDesc from ...pages.lms.bookmarks import BookmarksPage from ...pages.lms.course_home import CourseHomePage from ...pages.lms.courseware import CoursewarePage +from ..helpers import UniqueCourseTest, auto_auth, load_data_str class CourseHomeBaseTest(UniqueCourseTest): diff --git a/common/test/acceptance/tests/lms/test_lms_courseware.py b/common/test/acceptance/tests/lms/test_lms_courseware.py index e8120bc662..6c309eba8d 100644 --- a/common/test/acceptance/tests/lms/test_lms_courseware.py +++ b/common/test/acceptance/tests/lms/test_lms_courseware.py @@ -10,20 +10,20 @@ import ddt from flaky import flaky from nose.plugins.attrib import attr -from ..helpers import UniqueCourseTest, EventsTestMixin, auto_auth, create_multiple_choice_problem from ...fixtures.course import CourseFixture, XBlockFixtureDesc from ...pages.common.logout import LogoutPage from ...pages.lms.course_home import CourseHomePage from ...pages.lms.courseware import CoursewarePage, CoursewareSequentialTabPage from ...pages.lms.create_mode import ModeCreationPage from ...pages.lms.dashboard import DashboardPage -from ...pages.lms.pay_and_verify import PaymentAndVerificationFlow, FakePaymentPage, FakeSoftwareSecureVerificationPage +from ...pages.lms.pay_and_verify import FakePaymentPage, FakeSoftwareSecureVerificationPage, PaymentAndVerificationFlow from ...pages.lms.problem import ProblemPage from ...pages.lms.progress import ProgressPage from ...pages.lms.staff_view import StaffCoursewarePage from ...pages.lms.track_selection import TrackSelectionPage from ...pages.studio.auto_auth import AutoAuthPage from ...pages.studio.overview import CourseOutlinePage as StudioCourseOutlinePage +from ..helpers import EventsTestMixin, UniqueCourseTest, auto_auth, create_multiple_choice_problem @attr(shard=9) diff --git a/common/test/acceptance/tests/lms/test_lms_courseware_search.py b/common/test/acceptance/tests/lms/test_lms_courseware_search.py index b4fbdc78d4..3a04dc7ded 100644 --- a/common/test/acceptance/tests/lms/test_lms_courseware_search.py +++ b/common/test/acceptance/tests/lms/test_lms_courseware_search.py @@ -6,15 +6,15 @@ import json from flaky import flaky from nose.plugins.attrib import attr -from common.test.acceptance.tests.helpers import UniqueCourseTest, remove_file +from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc from common.test.acceptance.pages.common.logout import LogoutPage from common.test.acceptance.pages.common.utils import click_css -from common.test.acceptance.pages.studio.utils import add_html_component, type_in_codemirror -from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage -from common.test.acceptance.pages.studio.overview import CourseOutlinePage as StudioCourseOutlinePage -from common.test.acceptance.pages.studio.container import ContainerPage from common.test.acceptance.pages.lms.courseware_search import CoursewareSearchPage -from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc +from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage +from common.test.acceptance.pages.studio.container import ContainerPage +from common.test.acceptance.pages.studio.overview import CourseOutlinePage as StudioCourseOutlinePage +from common.test.acceptance.pages.studio.utils import add_html_component, type_in_codemirror +from common.test.acceptance.tests.helpers import UniqueCourseTest, remove_file @attr(shard=5) diff --git a/common/test/acceptance/tests/lms/test_lms_dashboard.py b/common/test/acceptance/tests/lms/test_lms_dashboard.py index b37e90980e..a3f79e6816 100644 --- a/common/test/acceptance/tests/lms/test_lms_dashboard.py +++ b/common/test/acceptance/tests/lms/test_lms_dashboard.py @@ -3,12 +3,13 @@ End-to-end tests for the main LMS Dashboard (aka, Student Dashboard). """ import datetime + from nose.plugins.attrib import attr -from common.test.acceptance.tests.helpers import UniqueCourseTest, generate_course_key from common.test.acceptance.fixtures.course import CourseFixture from common.test.acceptance.pages.lms.auto_auth import AutoAuthPage from common.test.acceptance.pages.lms.dashboard import DashboardPage +from common.test.acceptance.tests.helpers import UniqueCourseTest, generate_course_key DEFAULT_SHORT_DATE_FORMAT = '{dt:%b} {dt.day}, {dt.year}' TEST_DATE_FORMAT = '{dt:%b} {dt.day}, {dt.year} {dt.hour:02}:{dt.minute:02}' diff --git a/common/test/acceptance/tests/lms/test_lms_dashboard_search.py b/common/test/acceptance/tests/lms/test_lms_dashboard_search.py index a4cd036a8d..61559db092 100644 --- a/common/test/acceptance/tests/lms/test_lms_dashboard_search.py +++ b/common/test/acceptance/tests/lms/test_lms_dashboard_search.py @@ -1,18 +1,18 @@ """ Test dashboard search """ -import os import json +import os -from common.test.acceptance.tests.helpers import AcceptanceTest, generate_course_key +from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc from common.test.acceptance.pages.common.logout import LogoutPage from common.test.acceptance.pages.common.utils import click_css -from common.test.acceptance.pages.studio.utils import add_html_component, type_in_codemirror -from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage -from common.test.acceptance.pages.studio.overview import CourseOutlinePage as StudioCourseOutlinePage -from common.test.acceptance.pages.studio.container import ContainerPage from common.test.acceptance.pages.lms.dashboard_search import DashboardSearchPage -from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc +from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage +from common.test.acceptance.pages.studio.container import ContainerPage +from common.test.acceptance.pages.studio.overview import CourseOutlinePage as StudioCourseOutlinePage +from common.test.acceptance.pages.studio.utils import add_html_component, type_in_codemirror +from common.test.acceptance.tests.helpers import AcceptanceTest, generate_course_key class DashboardSearchTest(AcceptanceTest): diff --git a/common/test/acceptance/tests/lms/test_lms_edxnotes.py b/common/test/acceptance/tests/lms/test_lms_edxnotes.py index ea5bed40f9..99ec8bcd0e 100644 --- a/common/test/acceptance/tests/lms/test_lms_edxnotes.py +++ b/common/test/acceptance/tests/lms/test_lms_edxnotes.py @@ -1,19 +1,21 @@ """ Test LMS Notes """ -from unittest import skip import random -from uuid import uuid4 from datetime import datetime +from unittest import skip +from uuid import uuid4 + +from flaky import flaky from nose.plugins.attrib import attr -from common.test.acceptance.tests.helpers import UniqueCourseTest, EventsTestMixin + from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc +from common.test.acceptance.fixtures.edxnotes import EdxNotesFixture, Note, Range from common.test.acceptance.pages.lms.auto_auth import AutoAuthPage from common.test.acceptance.pages.lms.course_home import CourseHomePage from common.test.acceptance.pages.lms.courseware import CoursewarePage -from common.test.acceptance.pages.lms.edxnotes import EdxNotesUnitPage, EdxNotesPage, EdxNotesPageNoContent -from common.test.acceptance.fixtures.edxnotes import EdxNotesFixture, Note, Range -from flaky import flaky +from common.test.acceptance.pages.lms.edxnotes import EdxNotesPage, EdxNotesPageNoContent, EdxNotesUnitPage +from common.test.acceptance.tests.helpers import EventsTestMixin, UniqueCourseTest class EdxNotesTestMixin(UniqueCourseTest): diff --git a/common/test/acceptance/tests/lms/test_lms_entrance_exams.py b/common/test/acceptance/tests/lms/test_lms_entrance_exams.py index f965c0e66a..d5c790ba5e 100644 --- a/common/test/acceptance/tests/lms/test_lms_entrance_exams.py +++ b/common/test/acceptance/tests/lms/test_lms_entrance_exams.py @@ -4,12 +4,12 @@ Bok choy acceptance tests for Entrance exams in the LMS """ from textwrap import dedent -from common.test.acceptance.tests.helpers import UniqueCourseTest -from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage +from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc from common.test.acceptance.pages.lms.course_home import CourseHomePage from common.test.acceptance.pages.lms.courseware import CoursewarePage from common.test.acceptance.pages.lms.problem import ProblemPage -from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc +from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage +from common.test.acceptance.tests.helpers import UniqueCourseTest class EntranceExamTest(UniqueCourseTest): diff --git a/common/test/acceptance/tests/lms/test_lms_gating.py b/common/test/acceptance/tests/lms/test_lms_gating.py index 07339b48f7..67953d25dd 100644 --- a/common/test/acceptance/tests/lms/test_lms_gating.py +++ b/common/test/acceptance/tests/lms/test_lms_gating.py @@ -4,14 +4,14 @@ End-to-end tests for the gating feature. """ from textwrap import dedent -from common.test.acceptance.tests.helpers import UniqueCourseTest -from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage -from common.test.acceptance.pages.studio.overview import CourseOutlinePage as StudioCourseOutlinePage +from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc +from common.test.acceptance.pages.common.logout import LogoutPage from common.test.acceptance.pages.lms.course_home import CourseHomePage from common.test.acceptance.pages.lms.courseware import CoursewarePage from common.test.acceptance.pages.lms.problem import ProblemPage -from common.test.acceptance.pages.common.logout import LogoutPage -from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc +from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage +from common.test.acceptance.pages.studio.overview import CourseOutlinePage as StudioCourseOutlinePage +from common.test.acceptance.tests.helpers import UniqueCourseTest class GatingTest(UniqueCourseTest): diff --git a/common/test/acceptance/tests/lms/test_lms_help.py b/common/test/acceptance/tests/lms/test_lms_help.py index e4620a65a5..b0e8bf27b5 100644 --- a/common/test/acceptance/tests/lms/test_lms_help.py +++ b/common/test/acceptance/tests/lms/test_lms_help.py @@ -4,17 +4,12 @@ Test Help links in LMS import json -from common.test.acceptance.tests.lms.test_lms_instructor_dashboard import BaseInstructorDashboardTest -from common.test.acceptance.pages.lms.instructor_dashboard import InstructorDashboardPage -from common.test.acceptance.tests.studio.base_studio_test import ContainerBase from common.test.acceptance.fixtures import LMS_BASE_URL from common.test.acceptance.fixtures.course import CourseFixture - -from common.test.acceptance.tests.helpers import ( - assert_link, - assert_opened_help_link_is_correct, - url_for_help, -) +from common.test.acceptance.pages.lms.instructor_dashboard import InstructorDashboardPage +from common.test.acceptance.tests.helpers import assert_opened_help_link_is_correct, url_for_help +from common.test.acceptance.tests.lms.test_lms_instructor_dashboard import BaseInstructorDashboardTest +from common.test.acceptance.tests.studio.base_studio_test import ContainerBase class TestCohortHelp(ContainerBase): diff --git a/common/test/acceptance/tests/lms/test_lms_instructor_dashboard.py b/common/test/acceptance/tests/lms/test_lms_instructor_dashboard.py index 9b03d69de0..204a64b901 100644 --- a/common/test/acceptance/tests/lms/test_lms_instructor_dashboard.py +++ b/common/test/acceptance/tests/lms/test_lms_instructor_dashboard.py @@ -4,30 +4,32 @@ End-to-end tests for the LMS Instructor Dashboard. """ import ddt - -from nose.plugins.attrib import attr from bok_choy.promise import EmptyPromise -from flaky import flaky +from nose.plugins.attrib import attr -from common.test.acceptance.tests.helpers import UniqueCourseTest, get_modal_alert, EventsTestMixin -from common.test.acceptance.pages.common.logout import LogoutPage -from common.test.acceptance.pages.lms.auto_auth import AutoAuthPage -from common.test.acceptance.pages.studio.overview import CourseOutlinePage as StudioCourseOutlinePage -from common.test.acceptance.pages.lms.create_mode import ModeCreationPage -from common.test.acceptance.pages.lms.courseware import CoursewarePage -from common.test.acceptance.pages.lms.instructor_dashboard import ( - InstructorDashboardPage, - EntranceExamAdmin, - StudentSpecificAdmin, -) -from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc -from common.test.acceptance.pages.lms.dashboard import DashboardPage -from common.test.acceptance.pages.lms.problem import ProblemPage -from common.test.acceptance.pages.lms.pay_and_verify import PaymentAndVerificationFlow -from common.test.acceptance.pages.lms.login_and_register import CombinedLoginAndRegisterPage -from common.test.acceptance.pages.common.utils import enroll_user_track -from common.test.acceptance.tests.helpers import disable_animations, create_multiple_choice_problem from common.test.acceptance.fixtures.certificates import CertificateConfigFixture +from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc +from common.test.acceptance.pages.common.logout import LogoutPage +from common.test.acceptance.pages.common.utils import enroll_user_track +from common.test.acceptance.pages.lms.auto_auth import AutoAuthPage +from common.test.acceptance.pages.lms.courseware import CoursewarePage +from common.test.acceptance.pages.lms.create_mode import ModeCreationPage +from common.test.acceptance.pages.lms.dashboard import DashboardPage +from common.test.acceptance.pages.lms.instructor_dashboard import ( + EntranceExamAdmin, + InstructorDashboardPage, + StudentSpecificAdmin +) +from common.test.acceptance.pages.lms.login_and_register import CombinedLoginAndRegisterPage +from common.test.acceptance.pages.lms.problem import ProblemPage +from common.test.acceptance.pages.studio.overview import CourseOutlinePage as StudioCourseOutlinePage +from common.test.acceptance.tests.helpers import ( + EventsTestMixin, + UniqueCourseTest, + create_multiple_choice_problem, + disable_animations, + get_modal_alert +) class BaseInstructorDashboardTest(EventsTestMixin, UniqueCourseTest): diff --git a/common/test/acceptance/tests/lms/test_lms_matlab_problem.py b/common/test/acceptance/tests/lms/test_lms_matlab_problem.py index 3d296e8b9a..50c0ff0522 100644 --- a/common/test/acceptance/tests/lms/test_lms_matlab_problem.py +++ b/common/test/acceptance/tests/lms/test_lms_matlab_problem.py @@ -2,14 +2,14 @@ """ Test for matlab problems """ -from textwrap import dedent import time +from textwrap import dedent from flaky import flaky -from common.test.acceptance.pages.lms.matlab_problem import MatlabProblemPage from common.test.acceptance.fixtures.course import XBlockFixtureDesc from common.test.acceptance.fixtures.xqueue import XQueueResponseFixture +from common.test.acceptance.pages.lms.matlab_problem import MatlabProblemPage from common.test.acceptance.tests.lms.test_lms_problems import ProblemsTest diff --git a/common/test/acceptance/tests/lms/test_lms_problems.py b/common/test/acceptance/tests/lms/test_lms_problems.py index 49a6056bb0..054711a794 100644 --- a/common/test/acceptance/tests/lms/test_lms_problems.py +++ b/common/test/acceptance/tests/lms/test_lms_problems.py @@ -4,16 +4,16 @@ Bok choy acceptance tests for problems in the LMS See also old lettuce tests in lms/djangoapps/courseware/features/problems.feature """ -from nose.plugins.attrib import attr from textwrap import dedent -from common.test.acceptance.tests.helpers import UniqueCourseTest -from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage -from common.test.acceptance.pages.lms.courseware import CoursewarePage -from common.test.acceptance.pages.lms.problem import ProblemPage -from common.test.acceptance.pages.lms.login_and_register import CombinedLoginAndRegisterPage +from nose.plugins.attrib import attr + from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc -from common.test.acceptance.tests.helpers import EventsTestMixin +from common.test.acceptance.pages.lms.courseware import CoursewarePage +from common.test.acceptance.pages.lms.login_and_register import CombinedLoginAndRegisterPage +from common.test.acceptance.pages.lms.problem import ProblemPage +from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage +from common.test.acceptance.tests.helpers import EventsTestMixin, UniqueCourseTest class ProblemsTest(UniqueCourseTest): diff --git a/common/test/acceptance/tests/lms/test_lms_split_test_courseware_search.py b/common/test/acceptance/tests/lms/test_lms_split_test_courseware_search.py index 28c0403fc2..5b7c1a4035 100644 --- a/common/test/acceptance/tests/lms/test_lms_split_test_courseware_search.py +++ b/common/test/acceptance/tests/lms/test_lms_split_test_courseware_search.py @@ -4,6 +4,8 @@ Test courseware search import json +from nose.plugins.attrib import attr + from common.test.acceptance.fixtures.course import XBlockFixtureDesc from common.test.acceptance.pages.common.logout import LogoutPage from common.test.acceptance.pages.lms.courseware_search import CoursewareSearchPage @@ -11,7 +13,6 @@ from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage as Studio from common.test.acceptance.pages.studio.overview import CourseOutlinePage as StudioCourseOutlinePage from common.test.acceptance.tests.helpers import create_user_partition_json, remove_file from common.test.acceptance.tests.studio.base_studio_test import ContainerBase -from nose.plugins.attrib import attr from openedx.core.lib.partitions.partitions import Group diff --git a/common/test/acceptance/tests/lms/test_lms_user_preview.py b/common/test/acceptance/tests/lms/test_lms_user_preview.py index 2a0e4979e2..7939ada94e 100644 --- a/common/test/acceptance/tests/lms/test_lms_user_preview.py +++ b/common/test/acceptance/tests/lms/test_lms_user_preview.py @@ -6,14 +6,14 @@ Tests the "preview" selector in the LMS that allows changing between Staff, Lear from textwrap import dedent -from bok_choy.promise import EmptyPromise +from nose.plugins.attrib import attr + from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc from common.test.acceptance.pages.lms.courseware import CoursewarePage from common.test.acceptance.pages.lms.instructor_dashboard import InstructorDashboardPage from common.test.acceptance.pages.lms.staff_view import StaffCoursewarePage from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage from common.test.acceptance.tests.helpers import UniqueCourseTest, create_user_partition_json -from nose.plugins.attrib import attr from openedx.core.lib.partitions.partitions import ENROLLMENT_TRACK_PARTITION_ID, MINIMUM_STATIC_PARTITION_ID, Group diff --git a/common/test/acceptance/tests/lms/test_oauth2.py b/common/test/acceptance/tests/lms/test_oauth2.py index d3139ab6b2..36b6ef09fd 100644 --- a/common/test/acceptance/tests/lms/test_oauth2.py +++ b/common/test/acceptance/tests/lms/test_oauth2.py @@ -1,10 +1,10 @@ # -*- coding: utf-8 -*- """Tests for OAuth2 permission delegation.""" -from urlparse import urlparse, parse_qsl +from urlparse import parse_qsl, urlparse -from common.test.acceptance.pages.lms.oauth2_confirmation import OAuth2Confirmation from common.test.acceptance.pages.lms.auto_auth import AutoAuthPage +from common.test.acceptance.pages.lms.oauth2_confirmation import OAuth2Confirmation from common.test.acceptance.tests.helpers import AcceptanceTest diff --git a/common/test/acceptance/tests/lms/test_problem_types.py b/common/test/acceptance/tests/lms/test_problem_types.py index c14bf0c1ea..bea14adae7 100644 --- a/common/test/acceptance/tests/lms/test_problem_types.py +++ b/common/test/acceptance/tests/lms/test_problem_types.py @@ -3,11 +3,11 @@ Bok choy acceptance and a11y tests for problem types in the LMS See also lettuce tests in lms/djangoapps/courseware/features/problems.feature """ -import ddt import random import textwrap - from abc import ABCMeta, abstractmethod + +import ddt from nose import SkipTest from nose.plugins.attrib import attr from selenium.webdriver import ActionChains @@ -25,13 +25,11 @@ from capa.tests.response_xml_factory import ( NumericalResponseXMLFactory, OptionResponseXMLFactory, StringResponseXMLFactory, - SymbolicResponseXMLFactory, + SymbolicResponseXMLFactory ) - from common.test.acceptance.fixtures.course import XBlockFixtureDesc from common.test.acceptance.pages.lms.problem import ProblemPage -from common.test.acceptance.tests.helpers import select_option_by_text -from common.test.acceptance.tests.helpers import EventsTestMixin +from common.test.acceptance.tests.helpers import EventsTestMixin, select_option_by_text from common.test.acceptance.tests.lms.test_lms_problems import ProblemsTest diff --git a/common/test/acceptance/tests/lms/test_programs.py b/common/test/acceptance/tests/lms/test_programs.py index 5eada0135e..1e6aa5d4cc 100644 --- a/common/test/acceptance/tests/lms/test_programs.py +++ b/common/test/acceptance/tests/lms/test_programs.py @@ -2,15 +2,13 @@ from nose.plugins.attrib import attr from common.test.acceptance.fixtures.catalog import CatalogFixture, CatalogIntegrationMixin -from common.test.acceptance.fixtures.programs import ProgramsConfigMixin from common.test.acceptance.fixtures.course import CourseFixture -from common.test.acceptance.tests.helpers import UniqueCourseTest +from common.test.acceptance.fixtures.programs import ProgramsConfigMixin from common.test.acceptance.pages.lms.auto_auth import AutoAuthPage from common.test.acceptance.pages.lms.catalog import CacheProgramsPage -from common.test.acceptance.pages.lms.programs import ProgramListingPage, ProgramDetailsPage -from openedx.core.djangoapps.catalog.tests.factories import ( - ProgramFactory, CourseFactory, CourseRunFactory -) +from common.test.acceptance.pages.lms.programs import ProgramDetailsPage, ProgramListingPage +from common.test.acceptance.tests.helpers import UniqueCourseTest +from openedx.core.djangoapps.catalog.tests.factories import CourseFactory, CourseRunFactory, ProgramFactory class ProgramPageBase(ProgramsConfigMixin, CatalogIntegrationMixin, UniqueCourseTest): diff --git a/common/test/acceptance/tests/lms/test_progress_page.py b/common/test/acceptance/tests/lms/test_progress_page.py index 8daaa14422..dc3a1fc16b 100644 --- a/common/test/acceptance/tests/lms/test_progress_page.py +++ b/common/test/acceptance/tests/lms/test_progress_page.py @@ -3,15 +3,11 @@ End-to-end tests for the LMS that utilize the progress page. """ -import ddt - from contextlib import contextmanager -from nose.plugins.attrib import attr -from flaky import flaky -from ..helpers import ( - UniqueCourseTest, auto_auth, create_multiple_choice_problem, create_multiple_choice_xml, get_modal_alert -) +import ddt +from nose.plugins.attrib import attr + from ...fixtures.course import CourseFixture, XBlockFixtureDesc from ...pages.common.logout import LogoutPage from ...pages.lms.courseware import CoursewarePage @@ -19,8 +15,15 @@ from ...pages.lms.instructor_dashboard import InstructorDashboardPage, StudentSp from ...pages.lms.problem import ProblemPage from ...pages.lms.progress import ProgressPage from ...pages.studio.component_editor import ComponentEditorView -from ...pages.studio.utils import type_in_codemirror from ...pages.studio.overview import CourseOutlinePage as StudioCourseOutlinePage +from ...pages.studio.utils import type_in_codemirror +from ..helpers import ( + UniqueCourseTest, + auto_auth, + create_multiple_choice_problem, + create_multiple_choice_xml, + get_modal_alert +) class ProgressPageBaseTest(UniqueCourseTest): diff --git a/common/test/acceptance/tests/lms/test_teams.py b/common/test/acceptance/tests/lms/test_teams.py index 0f2b63e56b..6a1703be8e 100644 --- a/common/test/acceptance/tests/lms/test_teams.py +++ b/common/test/acceptance/tests/lms/test_teams.py @@ -4,36 +4,31 @@ Acceptance tests for the teams feature. import json import random import time - -from dateutil.parser import parse -import ddt -from nose.plugins.attrib import attr -from selenium.common.exceptions import TimeoutException from uuid import uuid4 -from common.test.acceptance.tests.helpers import get_modal_alert, EventsTestMixin, UniqueCourseTest +import ddt +from dateutil.parser import parse +from nose.plugins.attrib import attr +from selenium.common.exceptions import TimeoutException + from common.test.acceptance.fixtures import LMS_BASE_URL from common.test.acceptance.fixtures.course import CourseFixture -from common.test.acceptance.fixtures.discussion import ( - Thread, - MultipleThreadFixture, - ForumsConfigMixin, -) +from common.test.acceptance.fixtures.discussion import ForumsConfigMixin, MultipleThreadFixture, Thread +from common.test.acceptance.pages.common.utils import confirm_prompt from common.test.acceptance.pages.lms.auto_auth import AutoAuthPage from common.test.acceptance.pages.lms.course_info import CourseInfoPage from common.test.acceptance.pages.lms.learner_profile import LearnerProfilePage from common.test.acceptance.pages.lms.tab_nav import TabNavPage from common.test.acceptance.pages.lms.teams import ( - TeamsPage, - MyTeamsPage, - BrowseTopicsPage, BrowseTeamsPage, - TeamManagementPage, + BrowseTopicsPage, EditMembershipPage, - TeamPage + MyTeamsPage, + TeamManagementPage, + TeamPage, + TeamsPage ) -from common.test.acceptance.pages.common.utils import confirm_prompt - +from common.test.acceptance.tests.helpers import EventsTestMixin, UniqueCourseTest, get_modal_alert TOPICS_PER_PAGE = 12 diff --git a/common/test/acceptance/tests/studio/base_studio_test.py b/common/test/acceptance/tests/studio/base_studio_test.py index 8e63c7b17f..8a7824b9fe 100644 --- a/common/test/acceptance/tests/studio/base_studio_test.py +++ b/common/test/acceptance/tests/studio/base_studio_test.py @@ -2,12 +2,13 @@ Base classes used by studio tests. """ from bok_choy.page_object import XSS_INJECTION -from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage + from common.test.acceptance.fixtures.course import CourseFixture from common.test.acceptance.fixtures.library import LibraryFixture -from common.test.acceptance.tests.helpers import AcceptanceTest, UniqueCourseTest +from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage from common.test.acceptance.pages.studio.overview import CourseOutlinePage from common.test.acceptance.pages.studio.utils import verify_ordering +from common.test.acceptance.tests.helpers import AcceptanceTest, UniqueCourseTest class StudioCourseTest(UniqueCourseTest): diff --git a/common/test/acceptance/tests/studio/test_import_export.py b/common/test/acceptance/tests/studio/test_import_export.py index 1cfeb2ae30..ee08755a50 100644 --- a/common/test/acceptance/tests/studio/test_import_export.py +++ b/common/test/acceptance/tests/studio/test_import_export.py @@ -1,22 +1,23 @@ """ Acceptance tests for the Import and Export pages """ -from nose.plugins.attrib import attr +from abc import abstractmethod from datetime import datetime -from abc import abstractmethod +from nose.plugins.attrib import attr -from common.test.acceptance.tests.studio.base_studio_test import StudioLibraryTest, StudioCourseTest -from common.test.acceptance.pages.studio.import_export import ( - ExportLibraryPage, - ExportCoursePage, - ImportLibraryPage, - ImportCoursePage) -from common.test.acceptance.pages.studio.library import LibraryEditPage -from common.test.acceptance.pages.studio.overview import CourseOutlinePage from common.test.acceptance.pages.lms.course_home import CourseHomePage from common.test.acceptance.pages.lms.courseware import CoursewarePage from common.test.acceptance.pages.lms.staff_view import StaffCoursewarePage +from common.test.acceptance.pages.studio.import_export import ( + ExportCoursePage, + ExportLibraryPage, + ImportCoursePage, + ImportLibraryPage +) +from common.test.acceptance.pages.studio.library import LibraryEditPage +from common.test.acceptance.pages.studio.overview import CourseOutlinePage +from common.test.acceptance.tests.studio.base_studio_test import StudioCourseTest, StudioLibraryTest class ExportTestMixin(object): diff --git a/common/test/acceptance/tests/studio/test_studio_acid_xblock.py b/common/test/acceptance/tests/studio/test_studio_acid_xblock.py index 16ac1d64de..f62b2e0bef 100644 --- a/common/test/acceptance/tests/studio/test_studio_acid_xblock.py +++ b/common/test/acceptance/tests/studio/test_studio_acid_xblock.py @@ -1,10 +1,10 @@ """ Acceptance tests for Studio related to the acid xblock. """ +from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage from common.test.acceptance.pages.studio.overview import CourseOutlinePage from common.test.acceptance.pages.xblock.acid import AcidView -from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc from common.test.acceptance.tests.helpers import AcceptanceTest diff --git a/common/test/acceptance/tests/studio/test_studio_asset.py b/common/test/acceptance/tests/studio/test_studio_asset.py index 4457ad5e85..0df673e12c 100644 --- a/common/test/acceptance/tests/studio/test_studio_asset.py +++ b/common/test/acceptance/tests/studio/test_studio_asset.py @@ -2,14 +2,14 @@ Acceptance tests for Studio related to the asset index page. """ -from flaky import flaky from unittest import skip -from common.test.acceptance.pages.studio.asset_index import AssetIndexPage +from flaky import flaky -from common.test.acceptance.tests.studio.base_studio_test import StudioCourseTest from common.test.acceptance.fixtures.base import StudioApiLoginError +from common.test.acceptance.pages.studio.asset_index import AssetIndexPage from common.test.acceptance.tests.helpers import skip_if_browser +from common.test.acceptance.tests.studio.base_studio_test import StudioCourseTest @skip('FEDX-88') diff --git a/common/test/acceptance/tests/studio/test_studio_components.py b/common/test/acceptance/tests/studio/test_studio_components.py index 26001b42a2..d61527c761 100644 --- a/common/test/acceptance/tests/studio/test_studio_components.py +++ b/common/test/acceptance/tests/studio/test_studio_components.py @@ -4,11 +4,11 @@ Acceptance tests for adding components in Studio. import ddt from nose.plugins.attrib import attr -from common.test.acceptance.tests.studio.base_studio_test import ContainerBase from common.test.acceptance.fixtures.course import XBlockFixtureDesc from common.test.acceptance.pages.studio.container import ContainerPage -from common.test.acceptance.pages.studio.utils import add_component, add_components from common.test.acceptance.pages.studio.settings_advanced import AdvancedSettingsPage +from common.test.acceptance.pages.studio.utils import add_component, add_components +from common.test.acceptance.tests.studio.base_studio_test import ContainerBase @attr(shard=9) diff --git a/common/test/acceptance/tests/studio/test_studio_container.py b/common/test/acceptance/tests/studio/test_studio_container.py index 4429c403a7..00b71d1b58 100644 --- a/common/test/acceptance/tests/studio/test_studio_container.py +++ b/common/test/acceptance/tests/studio/test_studio_container.py @@ -7,6 +7,8 @@ import datetime from unittest import skip import ddt +from nose.plugins.attrib import attr + from base_studio_test import ContainerBase from common.test.acceptance.fixtures.course import XBlockFixtureDesc from common.test.acceptance.pages.lms.courseware import CoursewarePage @@ -18,7 +20,6 @@ from common.test.acceptance.pages.studio.html_component_editor import HtmlCompon from common.test.acceptance.pages.studio.move_xblock import MoveModalView from common.test.acceptance.pages.studio.utils import add_discussion, drag from common.test.acceptance.tests.helpers import create_user_partition_json -from nose.plugins.attrib import attr from openedx.core.lib.partitions.partitions import ENROLLMENT_TRACK_PARTITION_ID, MINIMUM_STATIC_PARTITION_ID, Group diff --git a/common/test/acceptance/tests/studio/test_studio_course_create.py b/common/test/acceptance/tests/studio/test_studio_course_create.py index 8070a90c22..7aa81f77bc 100644 --- a/common/test/acceptance/tests/studio/test_studio_course_create.py +++ b/common/test/acceptance/tests/studio/test_studio_course_create.py @@ -2,13 +2,13 @@ Acceptance tests for course creation. """ import uuid -from nose.plugins.attrib import attr -from common.test.acceptance.tests.helpers import AcceptanceTest +from nose.plugins.attrib import attr from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage from common.test.acceptance.pages.studio.index import DashboardPage from common.test.acceptance.pages.studio.overview import CourseOutlinePage +from common.test.acceptance.tests.helpers import AcceptanceTest @attr(shard=8) diff --git a/common/test/acceptance/tests/studio/test_studio_course_team.py b/common/test/acceptance/tests/studio/test_studio_course_team.py index dbe9592b4e..55bbdc6b7d 100644 --- a/common/test/acceptance/tests/studio/test_studio_course_team.py +++ b/common/test/acceptance/tests/studio/test_studio_course_team.py @@ -3,11 +3,10 @@ Acceptance tests for course in studio """ from nose.plugins.attrib import attr -from common.test.acceptance.tests.studio.base_studio_test import StudioCourseTest from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage - -from common.test.acceptance.pages.studio.users import CourseTeamPage from common.test.acceptance.pages.studio.index import DashboardPage +from common.test.acceptance.pages.studio.users import CourseTeamPage +from common.test.acceptance.tests.studio.base_studio_test import StudioCourseTest @attr(shard=2) diff --git a/common/test/acceptance/tests/studio/test_studio_general.py b/common/test/acceptance/tests/studio/test_studio_general.py index 61098239e5..52611460ab 100644 --- a/common/test/acceptance/tests/studio/test_studio_general.py +++ b/common/test/acceptance/tests/studio/test_studio_general.py @@ -5,14 +5,14 @@ import uuid from base_studio_test import StudioCourseTest from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc +from common.test.acceptance.pages.studio.asset_index import AssetIndexPage from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage from common.test.acceptance.pages.studio.course_info import CourseUpdatesPage from common.test.acceptance.pages.studio.edit_tabs import PagesPage from common.test.acceptance.pages.studio.import_export import ExportCoursePage, ImportCoursePage from common.test.acceptance.pages.studio.index import DashboardPage, HomePage, IndexPage -from common.test.acceptance.pages.studio.login import LoginPage, CourseOutlineSignInRedirectPage +from common.test.acceptance.pages.studio.login import CourseOutlineSignInRedirectPage, LoginPage from common.test.acceptance.pages.studio.overview import CourseOutlinePage -from common.test.acceptance.pages.studio.asset_index import AssetIndexPage from common.test.acceptance.pages.studio.settings import SettingsPage from common.test.acceptance.pages.studio.settings_advanced import AdvancedSettingsPage from common.test.acceptance.pages.studio.settings_graders import GradingPage diff --git a/common/test/acceptance/tests/studio/test_studio_help.py b/common/test/acceptance/tests/studio/test_studio_help.py index 6b8d53ced0..1a8b9bfe1c 100644 --- a/common/test/acceptance/tests/studio/test_studio_help.py +++ b/common/test/acceptance/tests/studio/test_studio_help.py @@ -2,38 +2,39 @@ Test the Studio help links. """ -from nose.plugins.attrib import attr from unittest import skip +from nose.plugins.attrib import attr + from common.test.acceptance.fixtures.course import XBlockFixtureDesc -from common.test.acceptance.tests.studio.base_studio_test import StudioCourseTest, ContainerBase -from common.test.acceptance.pages.studio.index import DashboardPage -from common.test.acceptance.pages.studio.utils import click_studio_help, studio_help_links -from common.test.acceptance.pages.studio.index import IndexPage, HomePage -from common.test.acceptance.tests.studio.base_studio_test import StudioLibraryTest -from common.test.acceptance.pages.studio.course_info import CourseUpdatesPage -from common.test.acceptance.pages.studio.utils import click_css -from common.test.acceptance.pages.studio.library import LibraryPage -from common.test.acceptance.pages.studio.users import LibraryUsersPage -from common.test.acceptance.pages.studio.overview import CourseOutlinePage from common.test.acceptance.pages.studio.asset_index import AssetIndexPage +from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage +from common.test.acceptance.pages.studio.course_info import CourseUpdatesPage from common.test.acceptance.pages.studio.edit_tabs import PagesPage -from common.test.acceptance.pages.studio.textbook_upload import TextbookUploadPage +from common.test.acceptance.pages.studio.import_export import ( + ExportCoursePage, + ExportLibraryPage, + ImportCoursePage, + ImportLibraryPage +) +from common.test.acceptance.pages.studio.index import DashboardPage, HomePage, IndexPage +from common.test.acceptance.pages.studio.library import LibraryPage +from common.test.acceptance.pages.studio.overview import CourseOutlinePage from common.test.acceptance.pages.studio.settings import SettingsPage -from common.test.acceptance.pages.studio.settings_graders import GradingPage -from common.test.acceptance.pages.studio.settings_group_configurations import GroupConfigurationsPage from common.test.acceptance.pages.studio.settings_advanced import AdvancedSettingsPage from common.test.acceptance.pages.studio.settings_certificates import CertificatesPage -from common.test.acceptance.pages.studio.import_export import ExportCoursePage, ImportCoursePage -from common.test.acceptance.pages.studio.users import CourseTeamPage +from common.test.acceptance.pages.studio.settings_graders import GradingPage +from common.test.acceptance.pages.studio.settings_group_configurations import GroupConfigurationsPage +from common.test.acceptance.pages.studio.textbook_upload import TextbookUploadPage +from common.test.acceptance.pages.studio.users import CourseTeamPage, LibraryUsersPage +from common.test.acceptance.pages.studio.utils import click_css, click_studio_help, studio_help_links from common.test.acceptance.tests.helpers import ( AcceptanceTest, assert_nav_help_link, assert_side_bar_help_link, - url_for_help, + url_for_help ) -from common.test.acceptance.pages.studio.import_export import ExportLibraryPage, ImportLibraryPage -from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage +from common.test.acceptance.tests.studio.base_studio_test import ContainerBase, StudioCourseTest, StudioLibraryTest def _get_expected_documentation_url(path): diff --git a/common/test/acceptance/tests/studio/test_studio_home.py b/common/test/acceptance/tests/studio/test_studio_home.py index 102a5a69d1..b1b8a3e5d6 100644 --- a/common/test/acceptance/tests/studio/test_studio_home.py +++ b/common/test/acceptance/tests/studio/test_studio_home.py @@ -1,19 +1,16 @@ """ Acceptance tests for Home Page (My Courses / My Libraries). """ -from flaky import flaky -from opaque_keys.edx.locator import LibraryLocator from uuid import uuid4 -from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage -from common.test.acceptance.pages.studio.library import LibraryEditPage -from common.test.acceptance.pages.studio.index import DashboardPage +from flaky import flaky +from opaque_keys.edx.locator import LibraryLocator + from common.test.acceptance.pages.lms.account_settings import AccountSettingsPage -from common.test.acceptance.tests.helpers import ( - AcceptanceTest, - select_option_by_text, - get_selected_option_text -) +from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage +from common.test.acceptance.pages.studio.index import DashboardPage +from common.test.acceptance.pages.studio.library import LibraryEditPage +from common.test.acceptance.tests.helpers import AcceptanceTest, get_selected_option_text, select_option_by_text class CreateLibraryTest(AcceptanceTest): diff --git a/common/test/acceptance/tests/studio/test_studio_library.py b/common/test/acceptance/tests/studio/test_studio_library.py index da909e17f5..f408a356ab 100644 --- a/common/test/acceptance/tests/studio/test_studio_library.py +++ b/common/test/acceptance/tests/studio/test_studio_library.py @@ -1,16 +1,15 @@ """ Acceptance tests for Content Libraries in Studio """ -from ddt import ddt, data +from ddt import data, ddt from nose.plugins.attrib import attr -from flaky import flaky -from common.test.acceptance.tests.studio.base_studio_test import StudioLibraryTest from common.test.acceptance.fixtures.course import XBlockFixtureDesc from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage -from common.test.acceptance.pages.studio.utils import add_component from common.test.acceptance.pages.studio.library import LibraryEditPage from common.test.acceptance.pages.studio.users import LibraryUsersPage +from common.test.acceptance.pages.studio.utils import add_component +from common.test.acceptance.tests.studio.base_studio_test import StudioLibraryTest @attr(shard=2) diff --git a/common/test/acceptance/tests/studio/test_studio_library_container.py b/common/test/acceptance/tests/studio/test_studio_library_container.py index dcc1d376a3..65556f19ee 100644 --- a/common/test/acceptance/tests/studio/test_studio_library_container.py +++ b/common/test/acceptance/tests/studio/test_studio_library_container.py @@ -1,16 +1,16 @@ """ Acceptance tests for Library Content in LMS """ -import ddt -from nose.plugins.attrib import attr import textwrap -from common.test.acceptance.tests.studio.base_studio_test import StudioLibraryTest -from common.test.acceptance.fixtures.course import CourseFixture -from common.test.acceptance.tests.helpers import UniqueCourseTest, TestWithSearchIndexMixin -from common.test.acceptance.pages.studio.library import StudioLibraryContentEditor, StudioLibraryContainerXBlockWrapper +import ddt +from nose.plugins.attrib import attr + +from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc +from common.test.acceptance.pages.studio.library import StudioLibraryContainerXBlockWrapper, StudioLibraryContentEditor from common.test.acceptance.pages.studio.overview import CourseOutlinePage -from common.test.acceptance.fixtures.course import XBlockFixtureDesc +from common.test.acceptance.tests.helpers import TestWithSearchIndexMixin, UniqueCourseTest +from common.test.acceptance.tests.studio.base_studio_test import StudioLibraryTest SECTION_NAME = 'Test Section' SUBSECTION_NAME = 'Test Subsection' diff --git a/common/test/acceptance/tests/studio/test_studio_outline.py b/common/test/acceptance/tests/studio/test_studio_outline.py index 9288a38014..4cf65fb234 100644 --- a/common/test/acceptance/tests/studio/test_studio_outline.py +++ b/common/test/acceptance/tests/studio/test_studio_outline.py @@ -2,26 +2,23 @@ """ Acceptance tests for studio related to the outline page. """ +import itertools import json from datetime import datetime, timedelta -import itertools -from pytz import UTC -from bok_choy.promise import EmptyPromise -from nose.plugins.attrib import attr -from common.test.acceptance.pages.studio.settings_advanced import AdvancedSettingsPage -from common.test.acceptance.pages.studio.overview import CourseOutlinePage, ContainerPage, ExpandCollapseLinkState -from common.test.acceptance.pages.studio.utils import add_discussion, drag, verify_ordering -from common.test.acceptance.pages.lms.course_home import CourseHomePage -from common.test.acceptance.pages.lms.courseware import CoursewarePage -from common.test.acceptance.pages.lms.staff_view import StaffCoursewarePage -from common.test.acceptance.fixtures.config import ConfigModelFixture -from common.test.acceptance.fixtures.course import XBlockFixtureDesc +from nose.plugins.attrib import attr +from pytz import UTC from base_studio_test import StudioCourseTest -from common.test.acceptance.tests.helpers import load_data_str, disable_animations +from common.test.acceptance.fixtures.config import ConfigModelFixture +from common.test.acceptance.fixtures.course import XBlockFixtureDesc +from common.test.acceptance.pages.lms.course_home import CourseHomePage +from common.test.acceptance.pages.lms.courseware import CoursewarePage from common.test.acceptance.pages.lms.progress import ProgressPage - +from common.test.acceptance.pages.studio.overview import ContainerPage, CourseOutlinePage, ExpandCollapseLinkState +from common.test.acceptance.pages.studio.settings_advanced import AdvancedSettingsPage +from common.test.acceptance.pages.studio.utils import add_discussion, drag, verify_ordering +from common.test.acceptance.tests.helpers import disable_animations, load_data_str SECTION_NAME = 'Test Section' SUBSECTION_NAME = 'Test Subsection' diff --git a/common/test/acceptance/tests/studio/test_studio_rerun.py b/common/test/acceptance/tests/studio/test_studio_rerun.py index 3ddbefbd62..8088e65356 100644 --- a/common/test/acceptance/tests/studio/test_studio_rerun.py +++ b/common/test/acceptance/tests/studio/test_studio_rerun.py @@ -3,16 +3,16 @@ Acceptance tests for Studio related to course reruns. """ import random + from bok_choy.promise import EmptyPromise from nose.tools import assert_in -from common.test.acceptance.pages.studio.index import DashboardPage -from common.test.acceptance.pages.studio.course_rerun import CourseRerunPage -from common.test.acceptance.pages.studio.overview import CourseOutlinePage -from common.test.acceptance.pages.lms.courseware import CoursewarePage -from common.test.acceptance.fixtures.course import XBlockFixtureDesc - from base_studio_test import StudioCourseTest +from common.test.acceptance.fixtures.course import XBlockFixtureDesc +from common.test.acceptance.pages.lms.courseware import CoursewarePage +from common.test.acceptance.pages.studio.course_rerun import CourseRerunPage +from common.test.acceptance.pages.studio.index import DashboardPage +from common.test.acceptance.pages.studio.overview import CourseOutlinePage class CourseRerunTest(StudioCourseTest): diff --git a/common/test/acceptance/tests/studio/test_studio_settings.py b/common/test/acceptance/tests/studio/test_studio_settings.py index f5347b24e4..9324e2462f 100644 --- a/common/test/acceptance/tests/studio/test_studio_settings.py +++ b/common/test/acceptance/tests/studio/test_studio_settings.py @@ -7,8 +7,11 @@ from __future__ import unicode_literals import os from textwrap import dedent -from base_studio_test import StudioCourseTest from bok_choy.promise import EmptyPromise +from mock import patch +from nose.plugins.attrib import attr + +from base_studio_test import StudioCourseTest from common.test.acceptance.fixtures.course import XBlockFixtureDesc from common.test.acceptance.pages.common.utils import add_enrollment_course_modes from common.test.acceptance.pages.lms.courseware import CoursewarePage @@ -18,8 +21,6 @@ from common.test.acceptance.pages.studio.settings_advanced import AdvancedSettin from common.test.acceptance.pages.studio.settings_group_configurations import GroupConfigurationsPage from common.test.acceptance.pages.studio.utils import get_input_value from common.test.acceptance.tests.helpers import create_user_partition_json, element_has_text -from mock import patch -from nose.plugins.attrib import attr from openedx.core.lib.partitions.partitions import Group diff --git a/common/test/acceptance/tests/studio/test_studio_settings_certificates.py b/common/test/acceptance/tests/studio/test_studio_settings_certificates.py index 52721b19ac..3925dbaf22 100644 --- a/common/test/acceptance/tests/studio/test_studio_settings_certificates.py +++ b/common/test/acceptance/tests/studio/test_studio_settings_certificates.py @@ -6,11 +6,11 @@ import uuid from nose.plugins.attrib import attr -from common.test.acceptance.tests.studio.base_studio_test import StudioCourseTest from common.test.acceptance.pages.lms.create_mode import ModeCreationPage -from common.test.acceptance.pages.studio.settings_certificates import CertificatesPage from common.test.acceptance.pages.studio.settings_advanced import AdvancedSettingsPage +from common.test.acceptance.pages.studio.settings_certificates import CertificatesPage from common.test.acceptance.tests.helpers import skip_if_browser +from common.test.acceptance.tests.studio.base_studio_test import StudioCourseTest @attr(shard=8) diff --git a/common/test/acceptance/tests/studio/test_studio_settings_details.py b/common/test/acceptance/tests/studio/test_studio_settings_details.py index 037195bfd1..2b00a10883 100644 --- a/common/test/acceptance/tests/studio/test_studio_settings_details.py +++ b/common/test/acceptance/tests/studio/test_studio_settings_details.py @@ -2,21 +2,22 @@ Acceptance tests for Studio's Settings Details pages """ from datetime import datetime, timedelta +from unittest import skip + from flaky import flaky from nose.plugins.attrib import attr -from unittest import skip from common.test.acceptance.fixtures.config import ConfigModelFixture from common.test.acceptance.fixtures.course import CourseFixture -from common.test.acceptance.pages.studio.settings import SettingsPage from common.test.acceptance.pages.studio.overview import CourseOutlinePage -from common.test.acceptance.tests.studio.base_studio_test import StudioCourseTest +from common.test.acceptance.pages.studio.settings import SettingsPage from common.test.acceptance.tests.helpers import ( - generate_course_key, - select_option_by_value, - is_option_value_selected, element_has_text, + generate_course_key, + is_option_value_selected, + select_option_by_value ) +from common.test.acceptance.tests.studio.base_studio_test import StudioCourseTest @attr(shard=4) diff --git a/common/test/acceptance/tests/studio/test_studio_split_test.py b/common/test/acceptance/tests/studio/test_studio_split_test.py index 2b3dfeab89..125d06d168 100644 --- a/common/test/acceptance/tests/studio/test_studio_split_test.py +++ b/common/test/acceptance/tests/studio/test_studio_split_test.py @@ -5,8 +5,11 @@ Acceptance tests for Studio related to the split_test module. import math from unittest import skip +from bok_choy.promise import Promise +from nose.plugins.attrib import attr +from selenium.webdriver.support.ui import Select + from base_studio_test import StudioCourseTest -from bok_choy.promise import EmptyPromise, Promise from common.test.acceptance.fixtures.course import XBlockFixtureDesc from common.test.acceptance.pages.lms.courseware import CoursewarePage from common.test.acceptance.pages.studio.component_editor import ComponentEditorView @@ -16,9 +19,7 @@ from common.test.acceptance.pages.studio.settings_group_configurations import Gr from common.test.acceptance.pages.studio.utils import add_advanced_component from common.test.acceptance.pages.xblock.utils import wait_for_xblock_initialization from common.test.acceptance.tests.helpers import create_user_partition_json -from nose.plugins.attrib import attr from openedx.core.lib.partitions.partitions import Group -from selenium.webdriver.support.ui import Select from test_studio_container import ContainerBase diff --git a/common/test/acceptance/tests/studio/test_studio_textbooks.py b/common/test/acceptance/tests/studio/test_studio_textbooks.py index 74b2853518..9bd85c4555 100644 --- a/common/test/acceptance/tests/studio/test_studio_textbooks.py +++ b/common/test/acceptance/tests/studio/test_studio_textbooks.py @@ -1,12 +1,13 @@ """ Acceptance tests for Studio related to the textbooks. """ -from common.test.acceptance.tests.studio.base_studio_test import StudioCourseTest -from common.test.acceptance.pages.studio.textbook_upload import TextbookUploadPage -from common.test.acceptance.pages.lms.textbook_view import TextbookViewPage -from common.test.acceptance.tests.helpers import disable_animations from nose.plugins.attrib import attr +from common.test.acceptance.pages.lms.textbook_view import TextbookViewPage +from common.test.acceptance.pages.studio.textbook_upload import TextbookUploadPage +from common.test.acceptance.tests.helpers import disable_animations +from common.test.acceptance.tests.studio.base_studio_test import StudioCourseTest + class TextbooksTest(StudioCourseTest): """ diff --git a/common/test/acceptance/tests/test_annotatable.py b/common/test/acceptance/tests/test_annotatable.py index 8555d0de78..486e910194 100644 --- a/common/test/acceptance/tests/test_annotatable.py +++ b/common/test/acceptance/tests/test_annotatable.py @@ -3,13 +3,13 @@ E2E tests for the LMS. """ -from common.test.acceptance.tests.helpers import UniqueCourseTest -from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage -from common.test.acceptance.pages.lms.courseware import CoursewarePage -from common.test.acceptance.pages.lms.annotation_component import AnnotationComponentPage -from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc from textwrap import dedent -from common.test.acceptance.tests.helpers import disable_animations + +from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc +from common.test.acceptance.pages.lms.annotation_component import AnnotationComponentPage +from common.test.acceptance.pages.lms.courseware import CoursewarePage +from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage +from common.test.acceptance.tests.helpers import UniqueCourseTest, disable_animations def _correctness(choice, target): diff --git a/common/test/acceptance/tests/test_cohorted_courseware.py b/common/test/acceptance/tests/test_cohorted_courseware.py index 8b6af19dda..34b2f120ec 100644 --- a/common/test/acceptance/tests/test_cohorted_courseware.py +++ b/common/test/acceptance/tests/test_cohorted_courseware.py @@ -5,9 +5,11 @@ End-to-end test for cohorted courseware. This uses both Studio and LMS. import json from bok_choy.page_object import XSS_INJECTION +from nose.plugins.attrib import attr + from common.test.acceptance.fixtures import LMS_BASE_URL from common.test.acceptance.fixtures.course import XBlockFixtureDesc -from common.test.acceptance.pages.common.utils import enroll_user_track, add_enrollment_course_modes +from common.test.acceptance.pages.common.utils import add_enrollment_course_modes, enroll_user_track from common.test.acceptance.pages.lms.auto_auth import AutoAuthPage as LmsAutoAuthPage from common.test.acceptance.pages.lms.courseware import CoursewarePage from common.test.acceptance.pages.lms.instructor_dashboard import InstructorDashboardPage @@ -15,8 +17,6 @@ from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage as Studio from common.test.acceptance.pages.studio.component_editor import ComponentVisibilityEditorView from common.test.acceptance.pages.studio.settings_group_configurations import GroupConfigurationsPage from common.test.acceptance.tests.lms.test_lms_user_preview import verify_expected_problem_visibility -from nose.plugins.attrib import attr - from studio.base_studio_test import ContainerBase AUDIT_TRACK = "Audit" diff --git a/common/test/acceptance/tests/video/test_studio_video_editor.py b/common/test/acceptance/tests/video/test_studio_video_editor.py index 6a4356bdc9..17fd98159a 100644 --- a/common/test/acceptance/tests/video/test_studio_video_editor.py +++ b/common/test/acceptance/tests/video/test_studio_video_editor.py @@ -4,6 +4,7 @@ Acceptance tests for CMS Video Editor. """ from nose.plugins.attrib import attr + from common.test.acceptance.tests.video.test_studio_video_module import CMSVideoBaseTest diff --git a/common/test/acceptance/tests/video/test_studio_video_module.py b/common/test/acceptance/tests/video/test_studio_video_module.py index f1b834803d..b7af37f76f 100644 --- a/common/test/acceptance/tests/video/test_studio_video_module.py +++ b/common/test/acceptance/tests/video/test_studio_video_module.py @@ -4,15 +4,16 @@ Acceptance tests for CMS Video Module. """ import os +from unittest import skipIf from mock import patch from nose.plugins.attrib import attr -from unittest import skipIf + +from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage from common.test.acceptance.pages.studio.overview import CourseOutlinePage from common.test.acceptance.pages.studio.video.video import VideoComponentPage -from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc -from common.test.acceptance.tests.helpers import UniqueCourseTest, is_youtube_available, YouTubeStubConfig +from common.test.acceptance.tests.helpers import UniqueCourseTest, YouTubeStubConfig, is_youtube_available @skipIf(is_youtube_available() is False, 'YouTube is not available!') diff --git a/common/test/acceptance/tests/video/test_studio_video_transcript.py b/common/test/acceptance/tests/video/test_studio_video_transcript.py index b626a3095b..2f294f0efb 100644 --- a/common/test/acceptance/tests/video/test_studio_video_transcript.py +++ b/common/test/acceptance/tests/video/test_studio_video_transcript.py @@ -19,6 +19,7 @@ front-end validation will not pass. t_not_exist - this file does not exist on YouTube; it exists locally """ from nose.plugins.attrib import attr + from common.test.acceptance.tests.video.test_studio_video_module import CMSVideoBaseTest diff --git a/common/test/acceptance/tests/video/test_video_events.py b/common/test/acceptance/tests/video/test_video_events.py index 5a6184405c..fde0f849ed 100644 --- a/common/test/acceptance/tests/video/test_video_events.py +++ b/common/test/acceptance/tests/video/test_video_events.py @@ -2,17 +2,15 @@ import datetime import json -from mock import patch -from nose.plugins.attrib import attr -import os -import ddt +import ddt +from nose.plugins.attrib import attr +from opaque_keys.edx.keys import CourseKey, UsageKey + +from common.test.acceptance.pages.lms.video.video import _parse_time_str from common.test.acceptance.tests.helpers import EventsTestMixin from common.test.acceptance.tests.video.test_video_module import VideoBaseTest -from common.test.acceptance.pages.lms.video.video import _parse_time_str - from openedx.core.lib.tests.assertions.events import assert_event_matches, assert_events_equal -from opaque_keys.edx.keys import UsageKey, CourseKey class VideoEventsTestMixin(EventsTestMixin, VideoBaseTest): diff --git a/common/test/acceptance/tests/video/test_video_handout.py b/common/test/acceptance/tests/video/test_video_handout.py index 7f774832be..cd9017a0f2 100644 --- a/common/test/acceptance/tests/video/test_video_handout.py +++ b/common/test/acceptance/tests/video/test_video_handout.py @@ -4,6 +4,7 @@ Acceptance tests for CMS Video Handout. """ from nose.plugins.attrib import attr + from common.test.acceptance.tests.video.test_studio_video_module import CMSVideoBaseTest diff --git a/common/test/acceptance/tests/video/test_video_license.py b/common/test/acceptance/tests/video/test_video_license.py index b5e073081c..d68c943acb 100644 --- a/common/test/acceptance/tests/video/test_video_license.py +++ b/common/test/acceptance/tests/video/test_video_license.py @@ -3,13 +3,13 @@ Acceptance tests for licensing of the Video module """ from __future__ import unicode_literals -from nose.plugins.attrib import attr -from common.test.acceptance.tests.studio.base_studio_test import StudioCourseTest -#from common.test.acceptance.tests.helpers import UniqueCourseTest -from common.test.acceptance.pages.studio.overview import CourseOutlinePage -from common.test.acceptance.pages.lms.courseware import CoursewarePage +from nose.plugins.attrib import attr + from common.test.acceptance.fixtures.course import XBlockFixtureDesc +from common.test.acceptance.pages.lms.courseware import CoursewarePage +from common.test.acceptance.pages.studio.overview import CourseOutlinePage +from common.test.acceptance.tests.studio.base_studio_test import StudioCourseTest @attr(shard=2) diff --git a/common/test/acceptance/tests/video/test_video_module.py b/common/test/acceptance/tests/video/test_video_module.py index 1a7055776d..6aa612a1af 100644 --- a/common/test/acceptance/tests/video/test_video_module.py +++ b/common/test/acceptance/tests/video/test_video_module.py @@ -4,24 +4,27 @@ Acceptance tests for Video. """ import os -from ddt import ddt, unpack, data +from unittest import skip, skipIf +from ddt import data, ddt, unpack +from flaky import flaky from mock import patch from nose.plugins.attrib import attr -from unittest import skipIf, skip -from selenium.webdriver.common.by import By from selenium.webdriver.common.action_chains import ActionChains -from common.test.acceptance.tests.helpers import UniqueCourseTest, is_youtube_available, YouTubeStubConfig -from common.test.acceptance.pages.lms.video.video import VideoPage -from common.test.acceptance.pages.lms.tab_nav import TabNavPage -from common.test.acceptance.pages.lms.courseware import CoursewarePage +from selenium.webdriver.common.by import By + +from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc from common.test.acceptance.pages.lms.auto_auth import AutoAuthPage from common.test.acceptance.pages.lms.course_info import CourseInfoPage -from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc -from common.test.acceptance.tests.helpers import skip_if_browser - -from flaky import flaky - +from common.test.acceptance.pages.lms.courseware import CoursewarePage +from common.test.acceptance.pages.lms.tab_nav import TabNavPage +from common.test.acceptance.pages.lms.video.video import VideoPage +from common.test.acceptance.tests.helpers import ( + UniqueCourseTest, + YouTubeStubConfig, + is_youtube_available, + skip_if_browser +) VIDEO_SOURCE_PORT = 8777 diff --git a/common/test/acceptance/tests/xblock/test_crowdsourcehinter_problem.py b/common/test/acceptance/tests/xblock/test_crowdsourcehinter_problem.py index 4610e4ef78..ab9f2d5281 100644 --- a/common/test/acceptance/tests/xblock/test_crowdsourcehinter_problem.py +++ b/common/test/acceptance/tests/xblock/test_crowdsourcehinter_problem.py @@ -2,10 +2,11 @@ Javascript tests for the crowdsourcehinter xblock """ from textwrap import dedent + from common.test.acceptance.fixtures.course import CourseFixture, XBlockFixtureDesc from common.test.acceptance.pages.lms.courseware import CoursewarePage -from common.test.acceptance.pages.xblock.crowdsourcehinter_problem import CrowdsourcehinterProblemPage from common.test.acceptance.pages.studio.auto_auth import AutoAuthPage +from common.test.acceptance.pages.xblock.crowdsourcehinter_problem import CrowdsourcehinterProblemPage from common.test.acceptance.tests.helpers import UniqueCourseTest diff --git a/lms/envs/aws.py b/lms/envs/aws.py index 00e42b9d16..8505b58a1d 100644 --- a/lms/envs/aws.py +++ b/lms/envs/aws.py @@ -310,6 +310,9 @@ ENABLE_COMPREHENSIVE_THEMING = ENV_TOKENS.get('ENABLE_COMPREHENSIVE_THEMING', EN MKTG_URL_LINK_MAP.update(ENV_TOKENS.get('MKTG_URL_LINK_MAP', {})) SUPPORT_SITE_LINK = ENV_TOKENS.get('SUPPORT_SITE_LINK', SUPPORT_SITE_LINK) +ACTIVATION_EMAIL_SUPPORT_LINK = ENV_TOKENS.get( + 'ACTIVATION_EMAIL_SUPPORT_LINK', SUPPORT_SITE_LINK # Intentional default. +) # Mobile store URL overrides MOBILE_STORE_URLS = ENV_TOKENS.get('MOBILE_STORE_URLS', MOBILE_STORE_URLS) diff --git a/lms/envs/bok_choy.env.json b/lms/envs/bok_choy.env.json index 2abdf5dc68..4bec01ab1f 100644 --- a/lms/envs/bok_choy.env.json +++ b/lms/envs/bok_choy.env.json @@ -137,6 +137,7 @@ "SITE_NAME": "localhost:8003", "STATIC_URL_BASE": "/static/", "SUPPORT_SITE_LINK": "https://support.example.com", + "ACTIVATION_EMAIL_SUPPORT_LINK": "https://support.example.com/activation-email-help.html", "SYSLOG_SERVER": "", "TECH_SUPPORT_EMAIL": "technical@example.com", "THIRD_PARTY_AUTH_BACKENDS": [ diff --git a/lms/envs/common.py b/lms/envs/common.py index 9732fbc353..5b06aade2d 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -2268,6 +2268,7 @@ MKTG_URL_LINK_MAP = { STATIC_TEMPLATE_VIEW_DEFAULT_FILE_EXTENSION = 'html' SUPPORT_SITE_LINK = '' +ACTIVATION_EMAIL_SUPPORT_LINK = '' ############################# SOCIAL MEDIA SHARING ############################# # Social Media Sharing on Student Dashboard diff --git a/lms/envs/test.py b/lms/envs/test.py index 5457a39841..0bb120d69b 100644 --- a/lms/envs/test.py +++ b/lms/envs/test.py @@ -361,6 +361,7 @@ MKTG_URL_LINK_MAP = { } SUPPORT_SITE_LINK = 'https://support.example.com' +ACTIVATION_EMAIL_SUPPORT_LINK = 'https://support.example.com/activation-email-help.html' ############################ STATIC FILES ############################# DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage' diff --git a/lms/templates/registration/account_activation_sidebar_notice.html b/lms/templates/registration/account_activation_sidebar_notice.html index d0d2f5f799..556f6e6d7b 100644 --- a/lms/templates/registration/account_activation_sidebar_notice.html +++ b/lms/templates/registration/account_activation_sidebar_notice.html @@ -1,7 +1,6 @@ <%page expression_filter="h"/> <%! from django.utils.translation import ugettext as _ -from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers from openedx.core.djangolib.markup import HTML, Text %>