diff --git a/common/test/acceptance/pages/studio/checklists.py b/common/test/acceptance/pages/studio/checklists.py new file mode 100644 index 0000000000..7d8545a8cc --- /dev/null +++ b/common/test/acceptance/pages/studio/checklists.py @@ -0,0 +1,18 @@ +""" +Course Checklists page. +""" + +from common.test.acceptance.pages.studio.course_page import CoursePage + + +class CourseChecklistsPage(CoursePage): + """ + Course Checklists page. + """ + + url_path = "checklists" + + def is_browser_on_page(self): + # SFE and SFE-wrapper classes come from studio-frontend and + # wrap content provided by the studio-frontend package + return self.q(css='.SFE .SFE-wrapper').visible diff --git a/common/test/acceptance/pages/studio/overview.py b/common/test/acceptance/pages/studio/overview.py index d03609b42b..911a81dc45 100644 --- a/common/test/acceptance/pages/studio/overview.py +++ b/common/test/acceptance/pages/studio/overview.py @@ -498,6 +498,12 @@ class CourseOutlinePage(CoursePage, CourseOutlineContainer): self.q(css='div.ui-loading.is-hidden').present ]) + def click_course_status_section_start_date_link(self): + self.course_start_date_link.click() + + def click_course_status_section_checklists_link(self): + self.course_checklists_link.click() + def view_live(self): """ Clicks the "View Live" link and switches to the new tab @@ -762,6 +768,20 @@ class CourseOutlinePage(CoursePage, CourseOutlineContainer): # The Prerequisites dropdown is visible return self.q(css="#prereq_min_score").visible + @property + def has_course_status_section(self): + # SFE and SFE-wrapper classes come from studio-frontend and + # wrap content provided by the studio-frontend package + return self.q(css='.course-status .SFE .SFE-wrapper').is_present() + + @property + def course_start_date_link(self): + return self.q(css='.status-link').first + + @property + def course_checklists_link(self): + return self.q(css='.status-link').nth(1) + @property def bottom_add_section_button(self): """ diff --git a/common/test/acceptance/tests/studio/test_studio_outline.py b/common/test/acceptance/tests/studio/test_studio_outline.py index ce0fbf782a..6a4e27fd86 100644 --- a/common/test/acceptance/tests/studio/test_studio_outline.py +++ b/common/test/acceptance/tests/studio/test_studio_outline.py @@ -19,6 +19,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.staff_view import StaffCoursewarePage from common.test.acceptance.pages.studio.overview import ContainerPage, CourseOutlinePage, ExpandCollapseLinkState +from common.test.acceptance.pages.studio.settings import SettingsPage +from common.test.acceptance.pages.studio.checklists import CourseChecklistsPage from common.test.acceptance.pages.studio.settings_advanced import AdvancedSettingsPage from common.test.acceptance.pages.studio.settings_group_configurations import GroupConfigurationsPage from common.test.acceptance.pages.studio.utils import add_discussion, drag, verify_ordering @@ -1865,3 +1867,49 @@ class SelfPacedOutlineTest(CourseOutlineTest): modal = subsection.edit() self.assertFalse(modal.has_release_date()) self.assertFalse(modal.has_due_date()) + + +class CourseStatusOutlineTest(CourseOutlineTest): + """Test the course outline status section.""" + + def setUp(self): + super(CourseStatusOutlineTest, self).setUp() + + self.schedule_and_details_settings = SettingsPage( + self.browser, + self.course_info['org'], + self.course_info['number'], + self.course_info['run'] + ) + + self.checklists = CourseChecklistsPage( + self.browser, + self.course_info['org'], + self.course_info['number'], + self.course_info['run'] + ) + + def test_course_status_section(self): + """ + Ensure that the course status section appears in the course outline. + """ + self.course_outline_page.visit() + self.assertTrue(self.course_outline_page.has_course_status_section) + + def test_course_status_section_start_date_link(self): + """ + Ensure that the course start date link in the course status section in + the course outline links to the "Schedule and Details" page. + """ + self.course_outline_page.visit() + self.course_outline_page.click_course_status_section_start_date_link() + self.schedule_and_details_settings.wait_for_page() + + def test_course_status_section_checklists_link(self): + """ + Ensure that the course checklists link in the course status section in + the course outline links to the "Checklists" page. + """ + self.course_outline_page.visit() + self.course_outline_page.click_course_status_section_checklists_link() + self.checklists.wait_for_page() diff --git a/common/test/db_fixtures/waffle_flags.json b/common/test/db_fixtures/waffle_flags.json index d1f6c0e75f..b2f6f7228b 100644 --- a/common/test/db_fixtures/waffle_flags.json +++ b/common/test/db_fixtures/waffle_flags.json @@ -38,5 +38,22 @@ "name": "course_experience.gdpr", "everyone": false } + }, + { + "pk": 4, + "model": "waffle.switch", + "fields": { + "name": "studio.enable_checklists_page", + "active": true + } + }, + { + "pk": 5, + "model": "waffle.flag", + "fields": { + "name": "studio.enable_checklists_quality", + "staff": true, + "superusers": true + } } ]