From 67fe07a385382d3b8cc9f90b57bd68cd5375460a Mon Sep 17 00:00:00 2001 From: Adam Brown Date: Thu, 4 Nov 2021 14:46:01 +0000 Subject: [PATCH] porting settings crawling to the robot pattern --- .../vector/app/ui/UiAllScreensSanityTest.kt | 141 +----------- .../im/vector/app/ui/robot/ElementRobot.kt | 10 +- .../im/vector/app/ui/robot/SettingsRobot.kt | 203 ++++++++++++++---- 3 files changed, 181 insertions(+), 173 deletions(-) diff --git a/vector/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt b/vector/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt index 6eaf20e351..fef48c370d 100644 --- a/vector/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt +++ b/vector/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt @@ -42,12 +42,10 @@ import com.adevinta.android.barista.interaction.BaristaListInteractions.clickLis import com.adevinta.android.barista.interaction.BaristaListInteractions.clickListItemChild import com.adevinta.android.barista.interaction.BaristaMenuClickInteractions.clickMenu import com.adevinta.android.barista.interaction.BaristaMenuClickInteractions.openMenu -import im.vector.app.BuildConfig import im.vector.app.EspressoHelper import im.vector.app.R import im.vector.app.SleepViewAction import im.vector.app.activityIdlingResource -import im.vector.app.espresso.tools.clickOnPreference import im.vector.app.espresso.tools.waitUntilActivityVisible import im.vector.app.features.MainActivity import im.vector.app.features.createdirect.CreateDirectRoomActivity @@ -103,7 +101,17 @@ class UiAllScreensSanityTest { assertDisplayed(R.id.bottomNavigationView) // Settings - navigateToSettings() + appRobot.settings { + general { crawl() } + notifications { crawl() } + preferences { crawl() } + voiceAndVideo() + ignoredUsers() + securityAndPrivacy { crawl() } + labs() + advancedSettings { crawl() } + helpAndAbout { crawl() } + } // Create DM clickOn(R.id.bottom_action_people) @@ -367,132 +375,5 @@ class UiAllScreensSanityTest { pressBack() pressBack() } - - private fun navigateToSettings() { - appRobot.openSettings { - openGeneral { navigateToSettingsGeneral() } - openNotifications { navigateToSettingsNotifications() } - openPreferences { navigateToSettingsPreferences() } - openVoiceAndVideo {} - openIgnoredUsers {} - openSecurityAndPrivacy { navigateToSettingsSecurity() } - openLabs { } - openAdvancedSettings { navigateToSettingsAdvanced() } - openHelpAbout { navigateToSettingsHelp() } - } - } - - private fun navigateToSettingsHelp() { - /* - clickOn(R.string.settings_app_info_link_title) - Cannot go back... - pressBack() - clickOn(R.string.settings_copyright) - pressBack() - clickOn(R.string.settings_app_term_conditions) - pressBack() - clickOn(R.string.settings_privacy_policy) - pressBack() - */ - clickOn(R.string.settings_third_party_notices) - clickDialogPositiveButton() - } - - private fun navigateToSettingsAdvanced() { - clickOnPreference(R.string.settings_notifications_targets) - pressBack() - - clickOnPreference(R.string.settings_push_rules) - pressBack() - - /* TODO P2 test developer screens - // Enable developer mode - clickOnSwitchPreference("SETTINGS_DEVELOPER_MODE_PREFERENCE_KEY") - - clickOnPreference(R.string.settings_account_data) - clickOn("m.push_rules") - pressBack() - pressBack() - clickOnPreference(R.string.settings_key_requests) - pressBack() - - // Disable developer mode - clickOnSwitchPreference("SETTINGS_DEVELOPER_MODE_PREFERENCE_KEY") - */ - } - - private fun navigateToSettingsSecurity() { - clickOnPreference(R.string.settings_active_sessions_show_all) - pressBack() - - clickOnPreference(R.string.encryption_message_recovery) - // TODO go deeper here - pressBack() - /* Cannot exit - clickOnPreference(R.string.encryption_export_e2e_room_keys) - pressBack() - */ - } - - private fun navigateToSettingsPreferences() { - clickOn(R.string.settings_interface_language) - onView(isRoot()) - .perform(waitForView(withText("Dansk (Danmark)"))) - pressBack() - clickOn(R.string.settings_theme) - clickDialogNegativeButton() - clickOn(R.string.font_size) - clickDialogNegativeButton() - } - - private fun navigateToSettingsNotifications() { - if (BuildConfig.USE_NOTIFICATION_SETTINGS_V2) { - clickOn(R.string.settings_notification_default) - pressBack() - clickOn(R.string.settings_notification_mentions_and_keywords) - // TODO Test adding a keyword? - pressBack() - clickOn(R.string.settings_notification_other) - pressBack() - } else { - clickOn(R.string.settings_notification_advanced) - pressBack() - } - /* - clickOn(R.string.settings_noisy_notifications_preferences) - TODO Cannot go back - pressBack() - clickOn(R.string.settings_silent_notifications_preferences) - pressBack() - clickOn(R.string.settings_call_notifications_preferences) - pressBack() - */ - clickOnPreference(R.string.settings_notification_troubleshoot) - pressBack() - } - - private fun navigateToSettingsGeneral() { - clickOn(R.string.settings_profile_picture) - clickDialogPositiveButton() - clickOn(R.string.settings_display_name) - clickDialogNegativeButton() - clickOn(R.string.settings_password) - clickDialogNegativeButton() - clickOn(R.string.settings_emails_and_phone_numbers_title) - pressBack() - clickOn(R.string.settings_discovery_manage) - clickOn(R.string.add_identity_server) - pressBack() - pressBack() - // Homeserver - clickOnPreference(R.string.settings_home_server) - pressBack() - // Identity server - clickOnPreference(R.string.settings_identity_server) - pressBack() - // Deactivate account - clickOnPreference(R.string.settings_deactivate_my_account) - pressBack() - } } diff --git a/vector/src/androidTest/java/im/vector/app/ui/robot/ElementRobot.kt b/vector/src/androidTest/java/im/vector/app/ui/robot/ElementRobot.kt index 63be8b4e6c..f1053743cd 100644 --- a/vector/src/androidTest/java/im/vector/app/ui/robot/ElementRobot.kt +++ b/vector/src/androidTest/java/im/vector/app/ui/robot/ElementRobot.kt @@ -17,15 +17,15 @@ package im.vector.app.ui.robot import androidx.test.espresso.Espresso -import com.adevinta.android.barista.interaction.BaristaClickInteractions -import com.adevinta.android.barista.interaction.BaristaDrawerInteractions +import com.adevinta.android.barista.interaction.BaristaClickInteractions.clickOn +import com.adevinta.android.barista.interaction.BaristaDrawerInteractions.openDrawer import im.vector.app.R class ElementRobot { - fun openSettings(block: SettingsRobot.() -> Unit) { - BaristaDrawerInteractions.openDrawer() - BaristaClickInteractions.clickOn(R.id.homeDrawerHeaderSettingsView) + fun settings(block: SettingsRobot.() -> Unit) { + openDrawer() + clickOn(R.id.homeDrawerHeaderSettingsView) block(SettingsRobot()) Espresso.pressBack() } diff --git a/vector/src/androidTest/java/im/vector/app/ui/robot/SettingsRobot.kt b/vector/src/androidTest/java/im/vector/app/ui/robot/SettingsRobot.kt index cd31588d0d..5b3a786361 100644 --- a/vector/src/androidTest/java/im/vector/app/ui/robot/SettingsRobot.kt +++ b/vector/src/androidTest/java/im/vector/app/ui/robot/SettingsRobot.kt @@ -16,63 +16,190 @@ package im.vector.app.ui.robot -import androidx.test.espresso.Espresso -import com.adevinta.android.barista.interaction.BaristaClickInteractions +import androidx.annotation.StringRes +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.Espresso.pressBack +import androidx.test.espresso.matcher.ViewMatchers +import com.adevinta.android.barista.interaction.BaristaClickInteractions.clickOn +import com.adevinta.android.barista.interaction.BaristaDialogInteractions.clickDialogNegativeButton +import com.adevinta.android.barista.interaction.BaristaDialogInteractions.clickDialogPositiveButton +import im.vector.app.BuildConfig import im.vector.app.R +import im.vector.app.espresso.tools.clickOnPreference +import im.vector.app.waitForView class SettingsRobot { - fun openGeneral(block: () -> Unit) { - BaristaClickInteractions.clickOn(R.string.settings_general_title) - block() - Espresso.pressBack() + fun general(block: SettingsGeneralRobot.() -> Unit) { + clickOnAndGoBack(R.string.settings_general_title) { block(SettingsGeneralRobot()) } } - fun openNotifications(block: () -> Unit) { - BaristaClickInteractions.clickOn(R.string.settings_notifications) - block() - Espresso.pressBack() + fun notifications(block: SettingsNotificationsRobot.() -> Unit) { + clickOnAndGoBack(R.string.settings_notifications) { block(SettingsNotificationsRobot()) } } - fun openPreferences(block: () -> Unit) { - BaristaClickInteractions.clickOn(R.string.settings_preferences) - block() - Espresso.pressBack() + fun preferences(block: SettingsPreferencesRobot.() -> Unit) { + clickOnAndGoBack(R.string.settings_preferences) { block(SettingsPreferencesRobot()) } } - fun openVoiceAndVideo(block: () -> Unit) { - BaristaClickInteractions.clickOn(R.string.preference_voice_and_video) - block() - Espresso.pressBack() + fun voiceAndVideo(block: () -> Unit = {}) { + clickOnAndGoBack(R.string.preference_voice_and_video) { block() } } - fun openIgnoredUsers(block: () -> Unit) { - BaristaClickInteractions.clickOn(R.string.settings_ignored_users) - block() - Espresso.pressBack() + fun ignoredUsers(block: () -> Unit = {}) { + clickOnAndGoBack(R.string.settings_ignored_users) { block() } } - fun openSecurityAndPrivacy(block: () -> Unit) { - BaristaClickInteractions.clickOn(R.string.settings_security_and_privacy) - block() - Espresso.pressBack() + fun securityAndPrivacy(block: SettingsSecurityRobot.() -> Unit) { + clickOnAndGoBack(R.string.settings_security_and_privacy) { block(SettingsSecurityRobot()) } } - fun openLabs(block: () -> Unit) { - BaristaClickInteractions.clickOn(R.string.room_settings_labs_pref_title) - block() - Espresso.pressBack() + fun labs(block: () -> Unit = {}) { + clickOnAndGoBack(R.string.room_settings_labs_pref_title) { block() } } - fun openAdvancedSettings(block: () -> Unit) { - BaristaClickInteractions.clickOn(R.string.settings_advanced_settings) - block() - Espresso.pressBack() + fun advancedSettings(block: SettingsAdvancedRobot.() -> Unit) { + clickOnAndGoBack(R.string.settings_advanced_settings) { block(SettingsAdvancedRobot()) } } - fun openHelpAbout(block: () -> Unit) { - BaristaClickInteractions.clickOn(R.string.preference_root_help_about) - block() - Espresso.pressBack() + fun helpAndAbout(block: SettingsHelpRobot.() -> Unit) { + clickOnAndGoBack(R.string.preference_root_help_about) { block(SettingsHelpRobot()) } } } + +class SettingsGeneralRobot { + + fun crawl() { + clickOn(R.string.settings_profile_picture) + clickDialogPositiveButton() + clickOn(R.string.settings_display_name) + clickDialogNegativeButton() + clickOn(R.string.settings_password) + clickDialogNegativeButton() + clickOn(R.string.settings_emails_and_phone_numbers_title) + pressBack() + clickOn(R.string.settings_discovery_manage) + clickOn(R.string.add_identity_server) + pressBack() + pressBack() + // Homeserver + clickOnPreference(R.string.settings_home_server) + pressBack() + // Identity server + clickOnPreference(R.string.settings_identity_server) + pressBack() + // Deactivate account + clickOnPreference(R.string.settings_deactivate_my_account) + pressBack() + } +} + +class SettingsNotificationsRobot { + + fun crawl() { + if (BuildConfig.USE_NOTIFICATION_SETTINGS_V2) { + clickOn(R.string.settings_notification_default) + pressBack() + clickOn(R.string.settings_notification_mentions_and_keywords) + // TODO Test adding a keyword? + pressBack() + clickOn(R.string.settings_notification_other) + pressBack() + } else { + clickOn(R.string.settings_notification_advanced) + pressBack() + } + /* + clickOn(R.string.settings_noisy_notifications_preferences) + TODO Cannot go back + pressBack() + clickOn(R.string.settings_silent_notifications_preferences) + pressBack() + clickOn(R.string.settings_call_notifications_preferences) + pressBack() + */ + clickOnPreference(R.string.settings_notification_troubleshoot) + pressBack() + } +} + +class SettingsHelpRobot { + + fun crawl() { + /* + clickOn(R.string.settings_app_info_link_title) + Cannot go back... + pressBack() + clickOn(R.string.settings_copyright) + pressBack() + clickOn(R.string.settings_app_term_conditions) + pressBack() + clickOn(R.string.settings_privacy_policy) + pressBack() + */ + clickOn(R.string.settings_third_party_notices) + clickDialogPositiveButton() + } +} + +class SettingsAdvancedRobot { + + fun crawl() { + clickOnPreference(R.string.settings_notifications_targets) + pressBack() + + clickOnPreference(R.string.settings_push_rules) + pressBack() + + /* TODO P2 test developer screens + // Enable developer mode + clickOnSwitchPreference("SETTINGS_DEVELOPER_MODE_PREFERENCE_KEY") + + clickOnPreference(R.string.settings_account_data) + clickOn("m.push_rules") + pressBack() + pressBack() + clickOnPreference(R.string.settings_key_requests) + pressBack() + + // Disable developer mode + clickOnSwitchPreference("SETTINGS_DEVELOPER_MODE_PREFERENCE_KEY") + */ + } +} + +class SettingsSecurityRobot { + + fun crawl() { + clickOnPreference(R.string.settings_active_sessions_show_all) + pressBack() + + clickOnPreference(R.string.encryption_message_recovery) + // TODO go deeper here + pressBack() + /* Cannot exit + clickOnPreference(R.string.encryption_export_e2e_room_keys) + pressBack() + */ + } +} + +class SettingsPreferencesRobot { + + fun crawl() { + clickOn(R.string.settings_interface_language) + onView(ViewMatchers.isRoot()) + .perform(waitForView(ViewMatchers.withText("Dansk (Danmark)"))) + pressBack() + clickOn(R.string.settings_theme) + clickDialogNegativeButton() + clickOn(R.string.font_size) + clickDialogNegativeButton() + } +} + +fun clickOnAndGoBack(@StringRes name: Int, block: () -> Unit) { + clickOn(name) + block() + pressBack() +}