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 0c50d19e5b..2e0b23a77a 100644 --- a/vector/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt +++ b/vector/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt @@ -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(com.tapadoo.alerter.R.id.llAlertBackground)!! + activity.runOnUiThread { popup.performClick() } - val popup = activity.findViewById(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) } } } 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 9a7f8da7e6..aa8d1d3e22 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,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 { + 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 { - BaristaVisibilityAssertions.assertDisplayed(R.id.loginSplashLogo) + assertDisplayed(R.id.loginSplashLogo) } } } diff --git a/vector/src/androidTest/java/im/vector/app/ui/robot/OnboardingRobot.kt b/vector/src/androidTest/java/im/vector/app/ui/robot/OnboardingRobot.kt index 00a51c761e..d59160d6b5 100644 --- a/vector/src/androidTest/java/im/vector/app/ui/robot/OnboardingRobot.kt +++ b/vector/src/androidTest/java/im/vector/app/ui/robot/OnboardingRobot.kt @@ -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 { - 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() } }