porting settings crawling to the robot pattern

This commit is contained in:
Adam Brown 2021-11-04 14:46:01 +00:00
parent 2f3716d9b9
commit 67fe07a385
3 changed files with 181 additions and 173 deletions

View File

@ -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()
}
}

View File

@ -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()
}

View File

@ -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)
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()
Espresso.pressBack()
}
pressBack()
}