diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/CourseSettingsE2ETest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/CourseSettingsE2ETest.kt index 74152321e0..fe902958b3 100644 --- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/CourseSettingsE2ETest.kt +++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/CourseSettingsE2ETest.kt @@ -24,6 +24,7 @@ import com.instructure.canvas.espresso.TestCategory import com.instructure.canvas.espresso.TestMetaData import com.instructure.canvas.espresso.annotations.E2E import com.instructure.canvas.espresso.refresh +import com.instructure.dataseeding.api.PagesApi import com.instructure.teacher.ui.utils.TeacherTest import com.instructure.teacher.ui.utils.extensions.seedData import com.instructure.teacher.ui.utils.extensions.tokenLogin @@ -64,7 +65,7 @@ class CourseSettingsE2ETest : TeacherTest() { val newCourseHomePage: String = courseSettingsPage.selectNewHomePage() Log.d(ASSERTION_TAG, "Assert if home page has been changed.") - courseSettingsPage.assertHomePageChanged(newCourseHomePage) + courseSettingsPage.assertHomePageText(newCourseHomePage) val newCourseName = "New Course Name" Log.d(STEP_TAG, "Click on 'Course Name' menu and edit course's name to be '$newCourseName'.") @@ -101,7 +102,7 @@ class CourseSettingsE2ETest : TeacherTest() { val secondCourseNewHomePage: String = courseSettingsPage.selectNewHomePage() Log.d(ASSERTION_TAG, "Assert if home page has been changed.") - courseSettingsPage.assertHomePageChanged(secondCourseNewHomePage) + courseSettingsPage.assertHomePageText(secondCourseNewHomePage) Log.d(STEP_TAG, "Go back to course browser page.") Espresso.pressBack() @@ -125,4 +126,128 @@ class CourseSettingsE2ETest : TeacherTest() { dashboardPage.assertDisplaysCourse(newCourseName) dashboardPage.assertDisplaysCourse(secondCourse.name) } + + @E2E + @Test + @TestMetaData(Priority.BUG_CASE, FeatureCategory.COURSE, TestCategory.E2E) // MBL-19486 + fun testCannotSelectCourseSettingsFrontPageIfNoFrontPageE2E() { + + Log.d(PREPARATION_TAG, "Seeding data.") + val data = seedData(teachers = 1, courses = 1) + val course = data.coursesList[0] + val teacher = data.teachersList[0] + val firstCourse = data.coursesList[0] + + Log.d(PREPARATION_TAG, "Create a published page for course: '${course.name}'.") + val publishedPage = PagesApi.createCoursePage(course.id, teacher.token, published = true, frontPage = false, body = "

Regular Page Text

") + + Log.d(STEP_TAG, "Login with user: '${teacher.name}', login id: '${teacher.loginId}'.") + tokenLogin(teacher) + + Log.d(STEP_TAG, "Open '${firstCourse.name}' course and click on Course Settings button.") + dashboardPage.waitForRender() + dashboardPage.openCourse(firstCourse) + courseBrowserPage.clickSettingsButton() + + Log.d(ASSERTION_TAG, "Assert if Course Settings page is displayed correctly.") + courseSettingsPage.assertPageObjects() + + Log.d(STEP_TAG, "Click on 'Set Home Page' menu and select another page as home page.") + courseSettingsPage.clickSetHomePage() + + Log.d(ASSERTION_TAG, "Assert that the 'Pages Front Page' radio button is not clickable since there is no front page in the course yet.") + courseSettingsPage.assertRadioButtonNotClickable("Pages Front Page") + + Log.d(ASSERTION_TAG, "Assert that the other radio buttons are clickable.") + courseSettingsPage.assertRadioButtonClickable("Course Activity Stream") + courseSettingsPage.assertRadioButtonClickable("Course Modules") + courseSettingsPage.assertRadioButtonClickable("Assignments List") + courseSettingsPage.assertRadioButtonClickable("Syllabus") + + Log.d(STEP_TAG, "Cancel the new home page selection dialog and navigate back to Course Browser Page.") + courseSettingsPage.cancelNewHomePageSelectionDialog() + Espresso.pressBack() + + Log.d(STEP_TAG, "Open Pages tab.") + courseBrowserPage.openPagesTab() + + Log.d(STEP_TAG, "Open '${publishedPage.title}' page and Edit it. Set it as a front page and click on 'Save'.") + pageListPage.openPage(publishedPage.title) + editPageDetailsPage.openEdit() + editPageDetailsPage.toggleFrontPage() + editPageDetailsPage.savePage() + + Log.d(STEP_TAG, "Navigate back to Pages List Page.") + Espresso.pressBack() + + Log.d(ASSERTION_TAG, "Assert that '${publishedPage.title}' is displayed as a FRONT page.") + pageListPage.assertFrontPageDisplayed(publishedPage.title) + + Log.d(STEP_TAG, "Navigate back to Course Browser Page.") + Espresso.pressBack() + + Log.d(STEP_TAG, "Click on Course Settings button.") + courseBrowserPage.clickSettingsButton() + + Log.d(ASSERTION_TAG, "Assert if Course Settings page is displayed correctly.") + courseSettingsPage.assertPageObjects() + + Log.d(STEP_TAG, "Click on 'Set Home Page' menu.") + courseSettingsPage.clickSetHomePage() + + Log.d(ASSERTION_TAG, "Assert that ALL the radio buttons are clickable, so the 'Course Front Page' as well, because there is a front page yet in the course.") + courseSettingsPage.assertRadioButtonClickable("Pages Front Page") + courseSettingsPage.assertRadioButtonClickable("Course Activity Stream") + courseSettingsPage.assertRadioButtonClickable("Course Modules") + courseSettingsPage.assertRadioButtonClickable("Assignments List") + courseSettingsPage.assertRadioButtonClickable("Syllabus") + + Log.d(STEP_TAG, "Select 'Course Front Page' as new home page.") + courseSettingsPage.selectNewHomePageOption("Pages Front Page") + + Log.d(ASSERTION_TAG, "Assert if home page has been changed to 'Course Front Page'.") + courseSettingsPage.assertHomePageText("Pages Front Page") + + Log.d(STEP_TAG, "Navigate back to the Course Browser Page.") + Espresso.pressBack() + + Log.d(STEP_TAG, "Open Pages tab.") + courseBrowserPage.openPagesTab() + + Log.d(STEP_TAG, "Open '${publishedPage.title}' page and Edit it. TURN OFF front page toggle and click on 'Save'.") + pageListPage.openPage(publishedPage.title) + editPageDetailsPage.openEdit() + editPageDetailsPage.toggleFrontPage() + editPageDetailsPage.savePage() + + Log.d(STEP_TAG, "Navigate back to Pages List Page.") + Espresso.pressBack() + + Log.d(ASSERTION_TAG, "Assert that '${publishedPage.title}' is displayed as a COMMON page.") + pageListPage.assertPageDisplayed(publishedPage.title) + + Log.d(STEP_TAG, "Navigate back to Course Browser Page.") + Espresso.pressBack() + + Log.d(STEP_TAG, "Click on Course Settings button.") + courseBrowserPage.clickSettingsButton() + + Log.d(ASSERTION_TAG, "Assert if Course Settings page is displayed correctly.") + courseSettingsPage.assertPageObjects() + + Log.d(ASSERTION_TAG, "Assert that the course home page fell back to 'Course Activity Stream' as we removed the front page so there is no front page yet.") + courseSettingsPage.assertHomePageText("Course Activity Stream") + + Log.d(STEP_TAG, "Click on 'Set Home Page' menu.") + courseSettingsPage.clickSetHomePage() + + Log.d(ASSERTION_TAG, "Assert that the 'Pages Front Page' radio button is not clickable since there is no front page in the course yet.") + courseSettingsPage.assertRadioButtonNotClickable("Pages Front Page") + + Log.d(ASSERTION_TAG, "Assert that the other radio buttons are clickable.") + courseSettingsPage.assertRadioButtonClickable("Course Activity Stream") + courseSettingsPage.assertRadioButtonClickable("Course Modules") + courseSettingsPage.assertRadioButtonClickable("Assignments List") + courseSettingsPage.assertRadioButtonClickable("Syllabus") + } } \ No newline at end of file diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/CourseSettingsInteractionTest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/CourseSettingsInteractionTest.kt index d653ace168..254b7265a3 100644 --- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/CourseSettingsInteractionTest.kt +++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/CourseSettingsInteractionTest.kt @@ -46,7 +46,7 @@ class CourseSettingsInteractionTest : TeacherTest() { navigateToCourseSettings() courseSettingsPage.clickSetHomePage() val newCourseHomePage: String = courseSettingsPage.selectNewHomePage() - courseSettingsPage.assertHomePageChanged(newCourseHomePage) + courseSettingsPage.assertHomePageText(newCourseHomePage) } private fun navigateToCourseSettings() { diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/CourseSettingsPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/CourseSettingsPage.kt index 4cfe0ff5cc..2d1fef16b3 100644 --- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/CourseSettingsPage.kt +++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/CourseSettingsPage.kt @@ -21,6 +21,8 @@ import androidx.test.espresso.assertion.ViewAssertions.matches import com.instructure.canvas.espresso.checked import com.instructure.canvas.espresso.matchToolbarText import com.instructure.espresso.OnViewWithId +import com.instructure.espresso.assertDisabled +import com.instructure.espresso.assertEnabled import com.instructure.espresso.assertHasText import com.instructure.espresso.click import com.instructure.espresso.page.BasePage @@ -94,13 +96,32 @@ class CourseSettingsPage : BasePage() { } /** - * Asserts that the home page has been changed to the specified value. + * Selects a new home page option based on the provided option text. * - * @param newHomePage The expected new home page value. - * @throws AssertionError if the home page does not match the expected value. + * @param optionText The text of the option to select as the new home page. */ - fun assertHomePageChanged(newHomePage: String) { - courseHomePageText.assertHasText(newHomePage) + fun selectNewHomePageOption(optionText: String) { + val radioButton = onViewWithText(optionText) + val dialogOkButton = onViewWithText(android.R.string.ok) + radioButton.click() + dialogOkButton.click() + } + + /** + * Cancels the new home page selection dialog. + */ + fun cancelNewHomePageSelectionDialog() { + val dialogCancelButton = onViewWithText(R.string.cancel) + dialogCancelButton.click() + } + + /** + * Asserts that the home page has the specified value. + * + * @param expectedHomePageText The expected home page value. + */ + fun assertHomePageText(expectedHomePageText: String) { + courseHomePageText.assertHasText(expectedHomePageText) } /** @@ -123,5 +144,25 @@ class CourseSettingsPage : BasePage() { private fun assertToolbarSubtitleHasText(newCourseName: String) { toolbar.check(matches(matchToolbarText(`is`(newCourseName), false))) } + + /** + * Asserts that the radio button with the specified text is clickable (enabled). + * + * @param radioButtonText The text of the radio button to check. + * @throws AssertionError if the radio button is not enabled. + */ + fun assertRadioButtonClickable(radioButtonText: String) { + onViewWithText(radioButtonText).assertEnabled() + } + + /** + * Asserts that the radio button with the specified text is not clickable (disabled). + * + * @param radioButtonText The text of the radio button to check. + * @throws AssertionError if the radio button is enabled. + */ + fun assertRadioButtonNotClickable(radioButtonText: String) { + onViewWithText(radioButtonText).assertDisabled() + } }