class SettingsHelpTest(StudioCourseTest): """ Tests help links on Schedule and Details Settings page """ def setUp(self, is_staff=False, test_xss=True): super(SettingsHelpTest, self).setUp() self.settings_page = SettingsPage(self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run']) self.settings_page.visit() def test_settings_page_nav_help(self): """ Scenario: Help link in navigation bar is working on Settings page. Given that I am on the Settings page. And I want help about the process And I click the 'Help' in the navigation bar Then Help link should open. And help url should be correct """ expected_url = _get_expected_documentation_url( '/set_up_course/studio_add_course_information/index.html') # Assert that help link is correct. assert_nav_help_link( test=self, page=self.settings_page, href=expected_url, )
class SettingsHelpTest(StudioCourseTest): """ Tests help links on Schedule and Details Settings page """ def setUp(self, is_staff=False, test_xss=True): super(SettingsHelpTest, self).setUp() self.settings_page = SettingsPage( self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run'] ) self.settings_page.visit() def test_settings_page_nav_help(self): """ Scenario: Help link in navigation bar is working on Settings page. Given that I am on the Settings page. And I want help about the process And I click the 'Help' in the navigation bar Then Help link should open. And help url should end with 'set_up_course/setting_up_student_view.html' """ href = 'http://edx.readthedocs.io/projects/open-edx-building-and-running-a-course' \ '/en/open-release-ficus.master/set_up_course/setting_up_student_view.html' # Assert that help link is correct. assert_nav_help_link( test=self, page=self.settings_page, href=href )
class SettingsHelpTest(StudioCourseTest): """ Tests help links on Schedule and Details Settings page """ def setUp(self, is_staff=False, test_xss=True): super(SettingsHelpTest, self).setUp() self.settings_page = SettingsPage(self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run']) self.settings_page.visit() def test_settings_page_nav_help(self): """ Scenario: Help link in navigation bar is working on Settings page. Given that I am on the Settings page. And I want help about the process And I click the 'Help' in the navigation bar Then Help link should open. And help url should end with 'set_up_course/setting_up_student_view.html' """ href = 'http://edx.readthedocs.io/projects/open-edx-building-and-running-a-course' \ '/en/latest/set_up_course/setting_up_student_view.html' # Assert that help link is correct. assert_nav_help_link(test=self, page=self.settings_page, href=href)
class StudioSettingsA11yTest(StudioCourseTest): """ Class to test Studio pages accessibility. """ def setUp(self): # pylint: disable=arguments-differ super(StudioSettingsA11yTest, self).setUp() self.settings_page = SettingsPage(self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run']) def test_studio_settings_page_a11y(self): """ Check accessibility of SettingsPage. """ self.settings_page.visit() self.settings_page.wait_for_page() self.settings_page.a11y_audit.config.set_rules({ "ignore": [ 'link-href', # TODO: AC-590 ], }) self.settings_page.a11y_audit.check_for_accessibility_errors()
class StudioSettingsA11yTest(StudioCourseTest): """ Class to test Studio pages accessibility. """ def setUp(self): # pylint: disable=arguments-differ super(StudioSettingsA11yTest, self).setUp() self.settings_page = SettingsPage(self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run']) def test_studio_settings_page_a11y(self): """ Check accessibility of SettingsPage. """ self.settings_page.visit() self.settings_page.wait_for_page() self.settings_page.a11y_audit.config.set_rules({ "ignore": [ 'link-href', # TODO: AC-590 'aria-allowed-role', # TODO: AC-936 'landmark-complementary-is-top-level', # TODO: AC-939 'radiogroup', # TODO: AC-941 'region', # TODO: AC-932 ], }) self.settings_page.a11y_audit.check_for_accessibility_errors()
class SettingsHelpTest(StudioCourseTest): """ Tests help links on Schedule and Details Settings page """ def setUp(self, is_staff=False, test_xss=True): super(SettingsHelpTest, self).setUp() self.settings_page = SettingsPage( self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run'] ) self.settings_page.visit() def test_settings_page_nav_help(self): """ Scenario: Help link in navigation bar is working on Settings page. Given that I am on the Settings page. And I want help about the process And I click the 'Help' in the navigation bar Then Help link should open. And help url should be correct """ expected_url = _get_expected_documentation_url('/set_up_course/setting_up_student_view.html') # Assert that help link is correct. assert_nav_help_link( test=self, page=self.settings_page, href=expected_url, )
class StudioSettingsA11yTest(StudioCourseTest): """ Class to test Studio pages accessibility. """ def setUp(self): # pylint: disable=arguments-differ super(StudioSettingsA11yTest, self).setUp() self.settings_page = SettingsPage(self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run']) def test_studio_settings_page_a11y(self): """ Check accessibility of SettingsPage. """ self.settings_page.visit() self.settings_page.wait_for_page() self.settings_page.a11y_audit.config.set_rules({ "ignore": [ 'link-href', # TODO: AC-590 ], }) # TODO: Figure out how to get CodeMirror to pass accessibility testing # We use the CodeMirror Javascript library to # add code editing to a number of textarea elements # on this page. CodeMirror generates markup that does # not pass our accessibility testing rules. self.settings_page.a11y_audit.config.set_scope( exclude=['.CodeMirror textarea'] # TODO: TNL-5831 ) self.settings_page.a11y_audit.check_for_accessibility_errors()
def setUp(self, is_staff=True): super(StudioSettingsDetailsTest, self).setUp(is_staff=is_staff) self.settings_detail = SettingsPage(self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run']) # Before every test, make sure to visit the page first self.settings_detail.visit()
def setUp(self, is_staff=False, test_xss=True): super(SettingsHelpTest, self).setUp() self.settings_page = SettingsPage(self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run']) self.settings_page.visit()
def setUp(self): # pylint: disable=arguments-differ super(StudioSettingsImageUploadTest, self).setUp() self.settings_page = SettingsPage(self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run']) self.settings_page.visit() # Ensure jquery is loaded before running a jQuery self.settings_page.wait_for_ajax() # This text appears towards the end of the work that jQuery is performing on the page self.settings_page.wait_for_jquery_value('input#course-name:text', 'test_run')
def setUp(self, is_staff=False, test_xss=True): super(CourseSettingsTest, self).setUp() self.settings_page = SettingsPage(self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run']) # Before every test, make sure to visit the page first self.settings_page.visit() self.ensure_input_fields_are_loaded()
class StudioSettingsDetailsTest(StudioCourseTest): """Base class for settings and details page tests.""" def setUp(self, is_staff=True): super(StudioSettingsDetailsTest, self).setUp(is_staff=is_staff) self.settings_detail = SettingsPage(self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run']) # Before every test, make sure to visit the page first self.settings_detail.visit() self.assertTrue(self.settings_detail.is_browser_on_page())
class StudioSettingsDetailsTest(StudioCourseTest): """Base class for settings and details page tests.""" def setUp(self, is_staff=True): super(StudioSettingsDetailsTest, self).setUp(is_staff=is_staff) self.settings_detail = SettingsPage( self.browser, self.course_info["org"], self.course_info["number"], self.course_info["run"] ) # Before every test, make sure to visit the page first self.settings_detail.visit() self.assertTrue(self.settings_detail.is_browser_on_page())
def setUp(self): # pylint: disable=arguments-differ super(ContentLicenseTest, self).setUp() self.outline_page = CourseOutlinePage(self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run']) self.settings_page = SettingsPage(self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run']) self.lms_courseware = CoursewarePage( self.browser, self.course_id, ) self.settings_page.visit()
class StudioSettingsDetailsTest(StudioCourseTest): """Base class for settings and details page tests.""" shard = 4 def setUp(self, is_staff=True): super(StudioSettingsDetailsTest, self).setUp(is_staff=is_staff) self.settings_detail = SettingsPage( self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run'] ) # Before every test, make sure to visit the page first self.settings_detail.visit()
def setUp(self, is_staff=False, test_xss=True): super(SettingsHelpTest, self).setUp() self.settings_page = SettingsPage( self.browser, self.course_info["org"], self.course_info["number"], self.course_info["run"] ) self.settings_page.visit()
def setUp(self): """ Initialize pages and install a course fixture. """ super(EntranceExamTest, self).setUp() CourseFixture(self.course_info['org'], self.course_info['number'], self.course_info['run'], self.course_info['display_name']).install() self.course_home_page = CourseHomePage(self.browser, self.course_id) self.settings_page = SettingsPage(self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run']) # Auto-auth register for the course AutoAuthPage(self.browser, course_id=self.course_id).visit()
def setUp(self, is_staff=True): super(StudioSettingsDetailsTest, self).setUp(is_staff=is_staff) self.settings_detail = SettingsPage( self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run'] ) # Before every test, make sure to visit the page first self.settings_detail.visit()
def setUp(self, is_staff=False, test_xss=True): super(CourseSettingsTest, self).setUp() self.settings_page = SettingsPage( self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run'] ) # Before every test, make sure to visit the page first self.settings_page.visit() self.ensure_input_fields_are_loaded()
class StudioSettingsA11yTest(StudioCourseTest): """ Class to test Studio pages accessibility. """ def setUp(self): # pylint: disable=arguments-differ super(StudioSettingsA11yTest, self).setUp() self.settings_page = SettingsPage(self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run']) def test_studio_settings_page_a11y(self): """ Check accessibility of SettingsPage. """ self.settings_page.visit() self.settings_page.wait_for_page() # There are several existing color contrast errors on this page, # we will ignore this error in the test until we fix them. self.settings_page.a11y_audit.config.set_rules({ "ignore": [ 'link-href', # TODO: AC-557 'icon-aria-hidden', # TODO: AC-229 ], }) # TODO: Figure out how to get CodeMirror to pass accessibility testing # We use the CodeMirror Javascript library to # add code editing to a number of textarea elements # on this page. CodeMirror generates markup that does # not pass our accessibility testing rules. self.settings_page.a11y_audit.config.set_scope( exclude=['.CodeMirror textarea'] ) self.settings_page.a11y_audit.check_for_accessibility_errors()
def setUp(self): # pylint: disable=arguments-differ super(ContentLicenseTest, self).setUp() self.outline_page = CourseOutlinePage( self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run'] ) self.settings_page = SettingsPage( self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run'] ) self.lms_courseware = CoursewarePage( self.browser, self.course_id, ) self.settings_page.visit()
def setUp(self): """ Initialize pages and install a course fixture. """ super(EntranceExamTest, self).setUp() CourseFixture( self.course_info['org'], self.course_info['number'], self.course_info['run'], self.course_info['display_name'] ).install() self.course_home_page = CourseHomePage(self.browser, self.course_id) self.settings_page = SettingsPage( self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run'] ) # Auto-auth register for the course AutoAuthPage(self.browser, course_id=self.course_id).visit()
class EntranceExamTest(UniqueCourseTest): """ Tests that course has an entrance exam. """ def setUp(self): """ Initialize pages and install a course fixture. """ super(EntranceExamTest, self).setUp() CourseFixture( self.course_info['org'], self.course_info['number'], self.course_info['run'], self.course_info['display_name'] ).install() self.course_home_page = CourseHomePage(self.browser, self.course_id) self.settings_page = SettingsPage( self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run'] ) # Auto-auth register for the course AutoAuthPage(self.browser, course_id=self.course_id).visit() def test_entrance_exam_section(self): """ Scenario: Any course that is enabled for an entrance exam, should have entrance exam section in the course outline. Given that I visit the course outline And entrance exams are not yet enabled Then I should not see an "Entrance Exam" section When I log in as staff And enable entrance exams And I visit the course outline again as student Then there should be an "Entrance Exam" chapter.' """ # visit the course outline and make sure there is no "Entrance Exam" section. self.course_home_page.visit() self.assertFalse('Entrance Exam' in self.course_home_page.outline.sections.keys()) # Logout and login as a staff. LogoutPage(self.browser).visit() AutoAuthPage(self.browser, course_id=self.course_id, staff=True).visit() # visit course settings page and set/enabled entrance exam for that course. self.settings_page.visit() self.settings_page.require_entrance_exam() self.settings_page.save_changes() # Logout and login as a student. LogoutPage(self.browser).visit() AutoAuthPage(self.browser, course_id=self.course_id, staff=False).visit() # visit the course outline and make sure there is an "Entrance Exam" section. self.course_home_page.visit() self.assertTrue('Entrance Exam' in self.course_home_page.outline.sections.keys()) # TODO: TNL-6546: Remove test def test_entrance_exam_section_2(self): """ Scenario: Any course that is enabled for an entrance exam, should have entrance exam chapter at course page. Given that I am on the course page When I view the course that has an entrance exam Then there should be an "Entrance Exam" chapter.' """ courseware_page = CoursewarePage(self.browser, self.course_id) entrance_exam_link_selector = '.accordion .course-navigation .chapter .group-heading' # visit course page and make sure there is not entrance exam chapter. courseware_page.visit() courseware_page.wait_for_page() self.assertFalse(element_has_text( page=courseware_page, css_selector=entrance_exam_link_selector, text='Entrance Exam' )) # Logout and login as a staff. LogoutPage(self.browser).visit() AutoAuthPage(self.browser, course_id=self.course_id, staff=True).visit() # visit course settings page and set/enabled entrance exam for that course. self.settings_page.visit() self.settings_page.require_entrance_exam() self.settings_page.save_changes() # Logout and login as a student. LogoutPage(self.browser).visit() AutoAuthPage(self.browser, course_id=self.course_id, staff=False).visit() # visit course info page and make sure there is an "Entrance Exam" section. courseware_page.visit() courseware_page.wait_for_page() self.assertTrue(element_has_text( page=courseware_page, css_selector=entrance_exam_link_selector, text='Entrance Exam' ))
class CourseSettingsTest(StudioCourseTest): """ Class to test course settings. """ COURSE_START_DATE_CSS = "#course-start-date" COURSE_END_DATE_CSS = "#course-end-date" ENROLLMENT_START_DATE_CSS = "#course-enrollment-start-date" ENROLLMENT_END_DATE_CSS = "#course-enrollment-end-date" COURSE_START_TIME_CSS = "#course-start-time" COURSE_END_TIME_CSS = "#course-end-time" ENROLLMENT_START_TIME_CSS = "#course-enrollment-start-time" ENROLLMENT_END_TIME_CSS = "#course-enrollment-end-time" course_start_date = '12/20/2013' course_end_date = '12/26/2013' enrollment_start_date = '12/01/2013' enrollment_end_date = '12/10/2013' dummy_time = "15:30" def setUp(self, is_staff=False, test_xss=True): super(CourseSettingsTest, self).setUp() self.settings_page = SettingsPage( self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run'] ) # Before every test, make sure to visit the page first self.settings_page.visit() self.ensure_input_fields_are_loaded() def set_course_dates(self): """ Set dates for the course. """ dates_dictionary = { self.COURSE_START_DATE_CSS: self.course_start_date, self.COURSE_END_DATE_CSS: self.course_end_date, self.ENROLLMENT_START_DATE_CSS: self.enrollment_start_date, self.ENROLLMENT_END_DATE_CSS: self.enrollment_end_date } self.settings_page.set_element_values(dates_dictionary) def ensure_input_fields_are_loaded(self): """ Ensures values in input fields are loaded. """ EmptyPromise( lambda: self.settings_page.q(css='#course-organization').attrs('value')[0], "Waiting for input fields to be loaded" ).fulfill() def test_user_can_set_course_date(self): """ Scenario: User can set course dates Given I have opened a new course in Studio When I select Schedule and Details And I set course dates And I press the "Save" notification button And I reload the page Then I see the set dates """ # Set dates self.set_course_dates() # Set times time_dictionary = { self.COURSE_START_TIME_CSS: self.dummy_time, self.ENROLLMENT_END_TIME_CSS: self.dummy_time } self.settings_page.set_element_values(time_dictionary) # Save changes self.settings_page.save_changes() self.settings_page.refresh_and_wait_for_load() self.ensure_input_fields_are_loaded() css_selectors = [self.COURSE_START_DATE_CSS, self.COURSE_END_DATE_CSS, self.ENROLLMENT_START_DATE_CSS, self.ENROLLMENT_END_DATE_CSS, self.COURSE_START_TIME_CSS, self.ENROLLMENT_END_TIME_CSS] expected_values = [self.course_start_date, self.course_end_date, self.enrollment_start_date, self.enrollment_end_date, self.dummy_time, self.dummy_time] # Assert changes have been persistent. self.assertEqual( [get_input_value(self.settings_page, css_selector) for css_selector in css_selectors], expected_values ) def test_clear_previously_set_course_dates(self): """ Scenario: User can clear previously set course dates (except start date) Given I have set course dates And I clear all the dates except start And I press the "Save" notification button And I reload the page Then I see cleared dates """ # Set dates self.set_course_dates() # Clear all dates except start date values_to_set = { self.COURSE_END_DATE_CSS: '', self.ENROLLMENT_START_DATE_CSS: '', self.ENROLLMENT_END_DATE_CSS: '' } self.settings_page.set_element_values(values_to_set) # Save changes and refresh the page self.settings_page.save_changes() self.settings_page.refresh_and_wait_for_load() self.ensure_input_fields_are_loaded() css_selectors = [self.COURSE_START_DATE_CSS, self.COURSE_END_DATE_CSS, self.ENROLLMENT_START_DATE_CSS, self.ENROLLMENT_END_DATE_CSS] expected_values = [self.course_start_date, '', '', ''] # Assert changes have been persistent. self.assertEqual( [get_input_value(self.settings_page, css_selector) for css_selector in css_selectors], expected_values ) def test_cannot_clear_the_course_start_date(self): """ Scenario: User cannot clear the course start date Given I have set course dates And I press the "Save" notification button And I clear the course start date Then I receive a warning about course start date And I reload the page And the previously set start date is shown """ # Set dates self.set_course_dates() # Save changes self.settings_page.save_changes() # Get default start date default_start_date = get_input_value(self.settings_page, self.COURSE_START_DATE_CSS) # Set course start date to empty self.settings_page.set_element_values({self.COURSE_START_DATE_CSS: ''}) # Make sure error message is show with appropriate message error_message_css = '.message-error' self.settings_page.wait_for_element_presence(error_message_css, 'Error message is present') self.assertEqual(element_has_text(self.settings_page, error_message_css, "The course must have an assigned start date."), True) # Refresh the page and assert start date has not changed. self.settings_page.refresh_and_wait_for_load() self.ensure_input_fields_are_loaded() self.assertEqual( get_input_value(self.settings_page, self.COURSE_START_DATE_CSS), default_start_date ) def test_user_can_correct_course_start_date_warning(self): """ Scenario: User can correct the course start date warning Given I have tried to clear the course start And I have entered a new course start date And I press the "Save" notification button Then The warning about course start date goes away And I reload the page Then my new course start date is shown """ # Set course start date to empty self.settings_page.set_element_values({self.COURSE_START_DATE_CSS: ''}) # Make sure we get error message error_message_css = '.message-error' self.settings_page.wait_for_element_presence(error_message_css, 'Error message is present') self.assertEqual(element_has_text(self.settings_page, error_message_css, "The course must have an assigned start date."), True) # Set new course start value self.settings_page.set_element_values({self.COURSE_START_DATE_CSS: self.course_start_date}) self.settings_page.un_focus_input_field() # Error message disappears self.settings_page.wait_for_element_absence(error_message_css, 'Error message is not present') # Save the changes and refresh the page. self.settings_page.save_changes() self.settings_page.refresh_and_wait_for_load() self.ensure_input_fields_are_loaded() # Assert changes are persistent. self.assertEqual( get_input_value(self.settings_page, self.COURSE_START_DATE_CSS), self.course_start_date ) def test_settings_are_only_persisted_when_saved(self): """ Scenario: Settings are only persisted when saved Given I have set course dates And I press the "Save" notification button When I change fields And I reload the page Then I do not see the changes """ # Set course dates. self.set_course_dates() # Save changes. self.settings_page.save_changes() default_value_enrollment_start_date = get_input_value(self.settings_page, self.ENROLLMENT_START_TIME_CSS) # Set the value of enrollment start time and # reload the page without saving. self.settings_page.set_element_values({self.ENROLLMENT_START_TIME_CSS: self.dummy_time}) self.settings_page.refresh_and_wait_for_load() self.ensure_input_fields_are_loaded() css_selectors = [self.COURSE_START_DATE_CSS, self.COURSE_END_DATE_CSS, self.ENROLLMENT_START_DATE_CSS, self.ENROLLMENT_END_DATE_CSS, self.ENROLLMENT_START_TIME_CSS] expected_values = [self.course_start_date, self.course_end_date, self.enrollment_start_date, self.enrollment_end_date, default_value_enrollment_start_date] # Assert that value of enrolment start time # is not saved. self.assertEqual( [get_input_value(self.settings_page, css_selector) for css_selector in css_selectors], expected_values ) def test_settings_are_reset_on_cancel(self): """ Scenario: Settings are reset on cancel Given I have set course dates And I press the "Save" notification button When I change fields And I press the "Cancel" notification button Then I do not see the changes """ # Set course date self.set_course_dates() # Save changes self.settings_page.save_changes() default_value_enrollment_start_date = get_input_value(self.settings_page, self.ENROLLMENT_START_TIME_CSS) # Set value but don't save it. self.settings_page.set_element_values({self.ENROLLMENT_START_TIME_CSS: self.dummy_time}) self.settings_page.click_button("cancel") # Make sure changes are not saved after cancel. css_selectors = [self.COURSE_START_DATE_CSS, self.COURSE_END_DATE_CSS, self.ENROLLMENT_START_DATE_CSS, self.ENROLLMENT_END_DATE_CSS, self.ENROLLMENT_START_TIME_CSS] expected_values = [self.course_start_date, self.course_end_date, self.enrollment_start_date, self.enrollment_end_date, default_value_enrollment_start_date] self.assertEqual( [get_input_value(self.settings_page, css_selector) for css_selector in css_selectors], expected_values ) def test_confirmation_is_shown_on_save(self): """ Scenario: Confirmation is shown on save Given I have opened a new course in Studio When I select Schedule and Details And I change the "<field>" field to "<value>" And I press the "Save" notification button Then I see a confirmation that my changes have been saved """ # Set date self.settings_page.set_element_values({self.COURSE_START_DATE_CSS: self.course_start_date}) # Confirmation is showed upon save. # Save_changes function ensures that save # confirmation is shown. self.settings_page.save_changes() def test_changes_in_course_overview_show_a_confirmation(self): """ Scenario: Changes in Course Overview show a confirmation Given I have opened a new course in Studio When I select Schedule and Details And I change the course overview And I press the "Save" notification button Then I see a confirmation that my changes have been saved """ # Change the value of course overview self.settings_page.change_course_description('Changed overview') # Save changes # Save_changes function ensures that save # confirmation is shown. self.settings_page.save_changes() def test_user_cannot_save_invalid_settings(self): """ Scenario: User cannot save invalid settings Given I have opened a new course in Studio When I select Schedule and Details And I change the "Course Start Date" field to "" Then the save notification button is disabled """ # Change the course start date to invalid date. self.settings_page.set_element_values({self.COURSE_START_DATE_CSS: ''}) # Confirm that save button is disabled. self.assertEqual(self.settings_page.is_element_present(".action-primary.action-save.is-disabled"), True)
class StudioSettingsImageUploadTest(StudioCourseTest): """ Class to test course settings image uploads. """ def setUp(self): # pylint: disable=arguments-differ super(StudioSettingsImageUploadTest, self).setUp() self.settings_page = SettingsPage(self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run']) self.settings_page.visit() # Ensure jquery is loaded before running a jQuery self.settings_page.wait_for_ajax() # This text appears towards the end of the work that jQuery is performing on the page self.settings_page.wait_for_jquery_value('input#course-name:text', 'test_run') def test_upload_course_card_image(self): # upload image file_to_upload = 'image.jpg' self.settings_page.upload_image('#upload-course-image', file_to_upload) self.assertIn(file_to_upload, self.settings_page.get_uploaded_image_path('#course-image')) def test_upload_course_banner_image(self): # upload image file_to_upload = 'image.jpg' self.settings_page.upload_image('#upload-banner-image', file_to_upload) self.assertIn(file_to_upload, self.settings_page.get_uploaded_image_path('#banner-image')) def test_upload_course_video_thumbnail_image(self): # upload image file_to_upload = 'image.jpg' self.settings_page.upload_image('#upload-video-thumbnail-image', file_to_upload) self.assertIn(file_to_upload, self.settings_page.get_uploaded_image_path('#video-thumbnail-image'))
def setUp(self): # pylint: disable=arguments-differ super(StudioSettingsA11yTest, self).setUp() self.settings_page = SettingsPage(self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run'])
class ContentLicenseTest(StudioCourseTest): """ Tests for course-level licensing (that is, setting the license, for an entire course's content, to All Rights Reserved or Creative Commons) """ def setUp(self): # pylint: disable=arguments-differ super(ContentLicenseTest, self).setUp() self.outline_page = CourseOutlinePage( self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run'] ) self.settings_page = SettingsPage( self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run'] ) self.lms_courseware = CoursewarePage( self.browser, self.course_id, ) self.settings_page.visit() def test_empty_license(self): """ When I visit the Studio settings page, I see that the course license is "All Rights Reserved" by default. Then I visit the LMS courseware page, and I see that the default course license is displayed. """ self.assertEqual(self.settings_page.course_license, "All Rights Reserved") self.lms_courseware.visit() self.assertEqual(self.lms_courseware.course_license, "© All Rights Reserved") def test_arr_license(self): """ When I visit the Studio settings page, and I set the course license to "All Rights Reserved", and I refresh the page, I see that the course license is "All Rights Reserved". Then I visit the LMS courseware page, and I see that the course license is "All Rights Reserved". """ self.settings_page.course_license = "All Rights Reserved" self.settings_page.save_changes() self.settings_page.refresh_and_wait_for_load() self.assertEqual(self.settings_page.course_license, "All Rights Reserved") self.lms_courseware.visit() self.assertEqual(self.lms_courseware.course_license, "© All Rights Reserved") def test_cc_license(self): """ When I visit the Studio settings page, and I set the course license to "Creative Commons", and I refresh the page, I see that the course license is "Creative Commons". Then I visit the LMS courseware page, and I see that the course license is "Some Rights Reserved". """ self.settings_page.course_license = "Creative Commons" self.settings_page.save_changes() self.settings_page.refresh_and_wait_for_load() self.assertEqual(self.settings_page.course_license, "Creative Commons") self.lms_courseware.visit() # The course_license text will include a bunch of screen reader text to explain # the selected options self.assertIn("Some Rights Reserved", self.lms_courseware.course_license)
class EntranceExamTest(UniqueCourseTest): """ Tests that course has an entrance exam. """ def setUp(self): """ Initialize pages and install a course fixture. """ super(EntranceExamTest, self).setUp() CourseFixture(self.course_info['org'], self.course_info['number'], self.course_info['run'], self.course_info['display_name']).install() self.course_home_page = CourseHomePage(self.browser, self.course_id) self.settings_page = SettingsPage(self.browser, self.course_info['org'], self.course_info['number'], self.course_info['run']) # Auto-auth register for the course AutoAuthPage(self.browser, course_id=self.course_id).visit() def test_entrance_exam_section(self): """ Scenario: Any course that is enabled for an entrance exam, should have entrance exam section in the course outline. Given that I visit the course outline And entrance exams are not yet enabled Then I should not see an "Entrance Exam" section When I log in as staff And enable entrance exams And I visit the course outline again as student Then there should be an "Entrance Exam" chapter.' """ # visit the course outline and make sure there is no "Entrance Exam" section. self.course_home_page.visit() self.assertFalse( 'Entrance Exam' in self.course_home_page.outline.sections.keys()) # Logout and login as a staff. LogoutPage(self.browser).visit() AutoAuthPage(self.browser, course_id=self.course_id, staff=True).visit() # visit course settings page and set/enabled entrance exam for that course. self.settings_page.visit() self.settings_page.require_entrance_exam() self.settings_page.save_changes() # Logout and login as a student. LogoutPage(self.browser).visit() AutoAuthPage(self.browser, course_id=self.course_id, staff=False).visit() # visit the course outline and make sure there is an "Entrance Exam" section. self.course_home_page.visit() self.assertTrue( 'Entrance Exam' in self.course_home_page.outline.sections.keys()) # TODO: TNL-6546: Remove test def test_entrance_exam_section_2(self): """ Scenario: Any course that is enabled for an entrance exam, should have entrance exam chapter at course page. Given that I am on the course page When I view the course that has an entrance exam Then there should be an "Entrance Exam" chapter.' """ courseware_page = CoursewarePage(self.browser, self.course_id) entrance_exam_link_selector = '.accordion .course-navigation .chapter .group-heading' # visit course page and make sure there is not entrance exam chapter. courseware_page.visit() courseware_page.wait_for_page() self.assertFalse( element_has_text(page=courseware_page, css_selector=entrance_exam_link_selector, text='Entrance Exam')) # Logout and login as a staff. LogoutPage(self.browser).visit() AutoAuthPage(self.browser, course_id=self.course_id, staff=True).visit() # visit course settings page and set/enabled entrance exam for that course. self.settings_page.visit() self.settings_page.require_entrance_exam() self.settings_page.save_changes() # Logout and login as a student. LogoutPage(self.browser).visit() AutoAuthPage(self.browser, course_id=self.course_id, staff=False).visit() # visit course info page and make sure there is an "Entrance Exam" section. courseware_page.visit() courseware_page.wait_for_page() self.assertTrue( element_has_text(page=courseware_page, css_selector=entrance_exam_link_selector, text='Entrance Exam'))