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

View File

@ -17,14 +17,14 @@
package im.vector.app.ui.robot
import androidx.test.espresso.Espresso.pressBack
import androidx.test.espresso.action.ViewActions
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.BaristaDialogInteractions.clickDialogNegativeButton
import com.adevinta.android.barista.interaction.BaristaDialogInteractions.clickDialogPositiveButton
import com.adevinta.android.barista.interaction.BaristaDrawerInteractions.openDrawer
import im.vector.app.EspressoHelper
import im.vector.app.R
import im.vector.app.activityIdlingResource
import im.vector.app.espresso.tools.waitUntilActivityVisible
import im.vector.app.espresso.tools.waitUntilViewVisible
import im.vector.app.features.createdirect.CreateDirectRoomActivity
@ -36,22 +36,27 @@ import im.vector.app.withIdlingResource
class ElementRobot {
fun login(userId: String) {
fun signUp(userId: String) {
val onboardingRobot = OnboardingRobot()
onboardingRobot.createAccount(userId = userId)
waitForHome()
}
withIdlingResource(activityIdlingResource(HomeActivity::class.java)) {
BaristaVisibilityAssertions.assertDisplayed(R.id.roomListContainer)
ViewActions.closeSoftKeyboard()
fun login(userId: String) {
val onboardingRobot = OnboardingRobot()
onboardingRobot.login(userId = userId)
waitForHome()
}
private fun waitForHome() {
waitUntilActivityVisible<HomeActivity> {
waitUntilViewVisible(withId(R.id.roomListContainer))
}
val activity = EspressoHelper.getCurrentActivity()!!
val uiSession = (activity as HomeActivity).activeSessionHolder.getActiveSession()
withIdlingResource(initialSyncIdlingResource(uiSession)) {
BaristaVisibilityAssertions.assertDisplayed(R.id.roomListContainer)
waitUntilViewVisible(withId(R.id.bottomNavigationView))
}
waitUntilViewVisible(withId(R.id.bottomNavigationView))
}
fun settings(block: SettingsRobot.() -> Unit) {
@ -88,9 +93,26 @@ class ElementRobot {
}
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> {
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.BaristaVisibilityAssertions.assertDisplayed
import com.adevinta.android.barista.interaction.BaristaClickInteractions.clickOn
import com.adevinta.android.barista.interaction.BaristaDialogInteractions
import com.adevinta.android.barista.interaction.BaristaEditTextInteractions.writeTo
import im.vector.app.R
import im.vector.app.espresso.tools.waitUntilActivityVisible
@ -78,20 +77,5 @@ class OnboardingRobot {
closeSoftKeyboard()
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()
}
}