adding sign out + re-sign in flows to the robots

- the verification popup if flaky so we're attempting both exit flows if needed
This commit is contained in:
Adam Brown 2021-11-08 14:32:54 +00:00
parent 9b4cd3c3c4
commit f61d20a7f8
3 changed files with 58 additions and 56 deletions

View File

@ -17,8 +17,8 @@
package im.vector.app.ui package im.vector.app.ui
import android.view.View import android.view.View
import androidx.test.espresso.Espresso.onView import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.isRoot import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.ext.junit.rules.ActivityScenarioRule import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest import androidx.test.filters.LargeTest
@ -26,12 +26,13 @@ import com.adevinta.android.barista.assertion.BaristaVisibilityAssertions.assert
import com.adevinta.android.barista.interaction.BaristaClickInteractions.clickOn import com.adevinta.android.barista.interaction.BaristaClickInteractions.clickOn
import im.vector.app.EspressoHelper import im.vector.app.EspressoHelper
import im.vector.app.R import im.vector.app.R
import im.vector.app.SleepViewAction import im.vector.app.espresso.tools.waitUntilViewVisible
import im.vector.app.features.MainActivity import im.vector.app.features.MainActivity
import im.vector.app.ui.robot.ElementRobot import im.vector.app.ui.robot.ElementRobot
import org.junit.Rule import org.junit.Rule
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import timber.log.Timber
import java.lang.Thread.sleep import java.lang.Thread.sleep
import java.util.UUID import java.util.UUID
@ -55,7 +56,7 @@ class UiAllScreensSanityTest {
fun allScreensTest() { fun allScreensTest() {
// Create an account // Create an account
val userId = "UiTest_" + UUID.randomUUID().toString() val userId = "UiTest_" + UUID.randomUUID().toString()
elementRobot.login(userId) elementRobot.signUp(userId)
elementRobot.settings { elementRobot.settings {
general { crawl() } general { crawl() }
@ -89,34 +90,29 @@ class UiAllScreensSanityTest {
verifyCreatedRoom() verifyCreatedRoom()
} }
// Disable until the "you don't have a session for id %d" sign out bug is fixed elementRobot.signout()
// elementRobot.signout()
// // Login again on the same account
// elementRobot.login(userId)
//
// ignoreVerification()
//
// elementRobot.signout()
// clickDialogPositiveButton()
// Login again on the same account
elementRobot.login(userId)
ignoreVerification()
// TODO Deactivate account instead of logout? // TODO Deactivate account instead of logout?
elementRobot.signout()
} }
private fun ignoreVerification() { private fun ignoreVerification() {
sleep(6000) kotlin.runCatching {
val activity = EspressoHelper.getCurrentActivity()!! sleep(6000)
val activity = EspressoHelper.getCurrentActivity()!!
val popup = activity.findViewById<View>(com.tapadoo.alerter.R.id.llAlertBackground)!!
activity.runOnUiThread { popup.performClick() }
val popup = activity.findViewById<View>(com.tapadoo.alerter.R.id.llAlertBackground) waitUntilViewVisible(withId(R.id.bottomSheetFragmentContainer))
activity.runOnUiThread { waitUntilViewVisible(withText(R.string.skip))
popup.performClick() clickOn(R.string.skip)
} assertDisplayed(R.string.are_you_sure)
clickOn(R.string.skip)
assertDisplayed(R.id.bottomSheetFragmentContainer) waitUntilViewVisible(withId(R.id.bottomSheetFragmentContainer))
}.onFailure { Timber.w("Verification popup missing", it) }
onView(isRoot()).perform(SleepViewAction.sleep(2000))
clickOn(R.string.skip)
assertDisplayed(R.string.are_you_sure)
clickOn(R.string.skip)
} }
} }

View File

@ -17,14 +17,14 @@
package im.vector.app.ui.robot package im.vector.app.ui.robot
import androidx.test.espresso.Espresso.pressBack import androidx.test.espresso.Espresso.pressBack
import androidx.test.espresso.action.ViewActions
import androidx.test.espresso.matcher.ViewMatchers.withId import androidx.test.espresso.matcher.ViewMatchers.withId
import com.adevinta.android.barista.assertion.BaristaVisibilityAssertions import com.adevinta.android.barista.assertion.BaristaVisibilityAssertions.assertDisplayed
import com.adevinta.android.barista.interaction.BaristaClickInteractions.clickOn 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 com.adevinta.android.barista.interaction.BaristaDrawerInteractions.openDrawer import com.adevinta.android.barista.interaction.BaristaDrawerInteractions.openDrawer
import im.vector.app.EspressoHelper import im.vector.app.EspressoHelper
import im.vector.app.R import im.vector.app.R
import im.vector.app.activityIdlingResource
import im.vector.app.espresso.tools.waitUntilActivityVisible import im.vector.app.espresso.tools.waitUntilActivityVisible
import im.vector.app.espresso.tools.waitUntilViewVisible import im.vector.app.espresso.tools.waitUntilViewVisible
import im.vector.app.features.createdirect.CreateDirectRoomActivity import im.vector.app.features.createdirect.CreateDirectRoomActivity
@ -36,22 +36,27 @@ import im.vector.app.withIdlingResource
class ElementRobot { class ElementRobot {
fun login(userId: String) { fun signUp(userId: String) {
val onboardingRobot = OnboardingRobot() val onboardingRobot = OnboardingRobot()
onboardingRobot.createAccount(userId = userId) onboardingRobot.createAccount(userId = userId)
waitForHome()
}
withIdlingResource(activityIdlingResource(HomeActivity::class.java)) { fun login(userId: String) {
BaristaVisibilityAssertions.assertDisplayed(R.id.roomListContainer) val onboardingRobot = OnboardingRobot()
ViewActions.closeSoftKeyboard() onboardingRobot.login(userId = userId)
waitForHome()
}
private fun waitForHome() {
waitUntilActivityVisible<HomeActivity> {
waitUntilViewVisible(withId(R.id.roomListContainer))
} }
val activity = EspressoHelper.getCurrentActivity()!! val activity = EspressoHelper.getCurrentActivity()!!
val uiSession = (activity as HomeActivity).activeSessionHolder.getActiveSession() val uiSession = (activity as HomeActivity).activeSessionHolder.getActiveSession()
withIdlingResource(initialSyncIdlingResource(uiSession)) { withIdlingResource(initialSyncIdlingResource(uiSession)) {
BaristaVisibilityAssertions.assertDisplayed(R.id.roomListContainer) waitUntilViewVisible(withId(R.id.bottomNavigationView))
} }
waitUntilViewVisible(withId(R.id.bottomNavigationView))
} }
fun settings(block: SettingsRobot.() -> Unit) { fun settings(block: SettingsRobot.() -> Unit) {
@ -88,9 +93,26 @@ class ElementRobot {
} }
fun signout() { fun signout() {
OnboardingRobot().signout() clickOn(R.id.groupToolbarAvatarImageView)
clickOn(R.id.homeDrawerHeaderSignoutView)
val hasSentMessages = kotlin.runCatching {
waitUntilViewVisible(withId(R.id.exitAnywayButton))
}.isSuccess
if (hasSentMessages) {
// We have sent a message in a e2e room, accept to loose it
clickOn(R.id.exitAnywayButton)
// Dark pattern
waitUntilViewVisible(withId(android.R.id.button2))
clickDialogNegativeButton()
} else {
waitUntilViewVisible(withId(android.R.id.button1))
clickDialogPositiveButton()
}
waitUntilActivityVisible<LoginActivity> { waitUntilActivityVisible<LoginActivity> {
BaristaVisibilityAssertions.assertDisplayed(R.id.loginSplashLogo) assertDisplayed(R.id.loginSplashLogo)
} }
} }
} }

View File

@ -24,7 +24,6 @@ import com.adevinta.android.barista.assertion.BaristaEnabledAssertions.assertDis
import com.adevinta.android.barista.assertion.BaristaEnabledAssertions.assertEnabled import com.adevinta.android.barista.assertion.BaristaEnabledAssertions.assertEnabled
import com.adevinta.android.barista.assertion.BaristaVisibilityAssertions.assertDisplayed import com.adevinta.android.barista.assertion.BaristaVisibilityAssertions.assertDisplayed
import com.adevinta.android.barista.interaction.BaristaClickInteractions.clickOn import com.adevinta.android.barista.interaction.BaristaClickInteractions.clickOn
import com.adevinta.android.barista.interaction.BaristaDialogInteractions
import com.adevinta.android.barista.interaction.BaristaEditTextInteractions.writeTo import com.adevinta.android.barista.interaction.BaristaEditTextInteractions.writeTo
import im.vector.app.R import im.vector.app.R
import im.vector.app.espresso.tools.waitUntilActivityVisible import im.vector.app.espresso.tools.waitUntilActivityVisible
@ -78,20 +77,5 @@ class OnboardingRobot {
closeSoftKeyboard() closeSoftKeyboard()
clickOn(R.id.loginSubmit) clickOn(R.id.loginSubmit)
// Wait
waitUntilActivityVisible<HomeActivity> {
assertDisplayed(R.id.homeDetailFragmentContainer)
}
}
fun signout() {
clickOn(R.id.groupToolbarAvatarImageView)
clickOn(R.id.homeDrawerHeaderSignoutView)
// We have sent a message in a e2e room, accept to loose it
clickOn(R.id.exitAnywayButton)
// Dark pattern
BaristaDialogInteractions.clickDialogNegativeButton()
} }
} }