From 8db704f3b9c9ad9796c7271a66671ecfb505d592 Mon Sep 17 00:00:00 2001 From: Adam Brown Date: Fri, 8 Jul 2022 12:04:12 +0100 Subject: [PATCH 1/6] naming the threads room creation to avoid multiple rooms with empty room as the name, causing ambiguous assertion errors --- .../im/vector/app/ui/UiAllScreensSanityTest.kt | 2 +- .../im/vector/app/ui/robot/CreateNewRoomRobot.kt | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 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 4333558e7a..09980f405e 100644 --- a/vector/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt +++ b/vector/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt @@ -159,7 +159,7 @@ class UiAllScreensSanityTest { elementRobot.newRoom { createNewRoom { crawl() - createRoom { + createRoom(roomName = "thread room") { val message = "Hello This message will be a thread!" postMessage(message) replyToThread(message) diff --git a/vector/src/androidTest/java/im/vector/app/ui/robot/CreateNewRoomRobot.kt b/vector/src/androidTest/java/im/vector/app/ui/robot/CreateNewRoomRobot.kt index 505dfb33e9..743d16bbd8 100644 --- a/vector/src/androidTest/java/im/vector/app/ui/robot/CreateNewRoomRobot.kt +++ b/vector/src/androidTest/java/im/vector/app/ui/robot/CreateNewRoomRobot.kt @@ -16,8 +16,15 @@ package im.vector.app.ui.robot +import androidx.test.espresso.Espresso.closeSoftKeyboard +import androidx.test.espresso.Espresso.onData +import androidx.test.espresso.Espresso.onView import androidx.test.espresso.Espresso.pressBack +import androidx.test.espresso.action.ViewActions.replaceText +import androidx.test.espresso.assertion.ViewAssertions.matches +import androidx.test.espresso.matcher.ViewMatchers.withHint import androidx.test.espresso.matcher.ViewMatchers.withId +import androidx.test.espresso.matcher.ViewMatchers.withText import com.adevinta.android.barista.assertion.BaristaListAssertions import com.adevinta.android.barista.interaction.BaristaClickInteractions import com.adevinta.android.barista.interaction.BaristaListInteractions @@ -25,14 +32,20 @@ import im.vector.app.R import im.vector.app.espresso.tools.waitUntilActivityVisible import im.vector.app.espresso.tools.waitUntilViewVisible import im.vector.app.features.home.room.detail.RoomDetailActivity +import org.hamcrest.CoreMatchers.allOf class CreateNewRoomRobot( var createdRoom: Boolean = false ) { - fun createRoom(block: RoomDetailRobot.() -> Unit) { + fun createRoom(roomName: String? = null, block: RoomDetailRobot.() -> Unit) { createdRoom = true BaristaListAssertions.assertListItemCount(R.id.createRoomForm, 12) + roomName?.let { + onView(allOf(withId(R.id.formTextInputTextInputEditText), withHint(R.string.create_room_name_hint))) + .perform(replaceText(roomName)) + closeSoftKeyboard() + } BaristaListInteractions.clickListItemChild(R.id.createRoomForm, 11, R.id.form_submit_button) waitUntilActivityVisible { waitUntilViewVisible(withId(R.id.composerEditText)) From c7efd8a6f6eb4f52b7da39e7515f3371958da940 Mon Sep 17 00:00:00 2001 From: Adam Brown Date: Fri, 8 Jul 2022 12:05:44 +0100 Subject: [PATCH 2/6] always attempting to close the keyboard to help avoid can't inject events error --- .../androidTest/java/im/vector/app/ui/robot/ElementRobot.kt | 4 ++-- .../java/im/vector/app/ui/robot/MessageMenuRobot.kt | 2 ++ .../java/im/vector/app/ui/robot/RoomDetailRobot.kt | 4 ++++ 3 files changed, 8 insertions(+), 2 deletions(-) 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 35027843d6..3b54a8607b 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,6 +17,7 @@ package im.vector.app.ui.robot import android.view.View +import androidx.test.espresso.Espresso.closeSoftKeyboard import androidx.test.espresso.Espresso.onView import androidx.test.espresso.Espresso.pressBack import androidx.test.espresso.action.ViewActions @@ -91,8 +92,7 @@ class ElementRobot { waitUntilActivityVisible { waitUntilViewVisible(withId(R.id.userListSearch)) } - // close keyboard - pressBack() + closeSoftKeyboard() block(NewDirectMessageRobot()) pressBack() waitUntilViewVisible(withId(R.id.bottomNavigationView)) diff --git a/vector/src/androidTest/java/im/vector/app/ui/robot/MessageMenuRobot.kt b/vector/src/androidTest/java/im/vector/app/ui/robot/MessageMenuRobot.kt index 53ad2af7e6..01a9ec02dc 100644 --- a/vector/src/androidTest/java/im/vector/app/ui/robot/MessageMenuRobot.kt +++ b/vector/src/androidTest/java/im/vector/app/ui/robot/MessageMenuRobot.kt @@ -16,6 +16,7 @@ package im.vector.app.ui.robot +import androidx.test.espresso.Espresso.closeSoftKeyboard import androidx.test.espresso.Espresso.pressBack import androidx.test.espresso.matcher.ViewMatchers.withId import androidx.test.espresso.matcher.ViewMatchers.withText @@ -59,6 +60,7 @@ class MessageMenuRobot( clickOn(R.string.message_add_reaction) // Wait for emoji to load, it's async now waitUntilActivityVisible { + closeSoftKeyboard() waitUntilViewVisible(withId(R.id.emojiRecyclerView)) waitUntilViewVisible(withText("😀")) } diff --git a/vector/src/androidTest/java/im/vector/app/ui/robot/RoomDetailRobot.kt b/vector/src/androidTest/java/im/vector/app/ui/robot/RoomDetailRobot.kt index 91409582d9..a123484087 100644 --- a/vector/src/androidTest/java/im/vector/app/ui/robot/RoomDetailRobot.kt +++ b/vector/src/androidTest/java/im/vector/app/ui/robot/RoomDetailRobot.kt @@ -17,6 +17,7 @@ package im.vector.app.ui.robot import androidx.recyclerview.widget.RecyclerView +import androidx.test.espresso.Espresso.closeSoftKeyboard import androidx.test.espresso.Espresso.onView import androidx.test.espresso.Espresso.pressBack import androidx.test.espresso.action.ViewActions @@ -44,6 +45,7 @@ class RoomDetailRobot { fun postMessage(content: String) { writeTo(R.id.composerEditText, content) + closeSoftKeyboard() waitUntilViewVisible(withId(R.id.sendButton)) clickOn(R.id.sendButton) waitUntilViewVisible(withText(content)) @@ -68,6 +70,7 @@ class RoomDetailRobot { } val threadMessage = "Hello universe - long message to avoid espresso tapping edited!" writeTo(R.id.composerEditText, threadMessage) + closeSoftKeyboard() waitUntilViewVisible(withId(R.id.sendButton)) clickOn(R.id.sendButton) } @@ -105,6 +108,7 @@ class RoomDetailRobot { // TODO Cancel action val edit = "Hello universe - long message to avoid espresso tapping edited!" writeTo(R.id.composerEditText, edit) + closeSoftKeyboard() // Wait a bit for the keyboard layout to update waitUntilViewVisible(withId(R.id.sendButton)) clickOn(R.id.sendButton) From f501555ff93c35b2d07ff43aa6ad9f14f1cb40b0 Mon Sep 17 00:00:00 2001 From: Adam Brown Date: Fri, 8 Jul 2022 12:06:43 +0100 Subject: [PATCH 3/6] adding extra waits for the threads list to appear as it seems to be inconsistent --- .../java/im/vector/app/ui/robot/RoomDetailRobot.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/vector/src/androidTest/java/im/vector/app/ui/robot/RoomDetailRobot.kt b/vector/src/androidTest/java/im/vector/app/ui/robot/RoomDetailRobot.kt index a123484087..6436080599 100644 --- a/vector/src/androidTest/java/im/vector/app/ui/robot/RoomDetailRobot.kt +++ b/vector/src/androidTest/java/im/vector/app/ui/robot/RoomDetailRobot.kt @@ -154,7 +154,9 @@ class RoomDetailRobot { fun openThreadSummaries() { clickMenu(R.id.menu_timeline_thread_list) - waitUntilViewVisible(withId(R.id.threadListRecyclerView)) + withRetry { + waitUntilViewVisible(withId(R.id.threadListRecyclerView)) + } } fun selectThreadSummariesFilter() { From f3e0ae08197fc2cd03f9c4ea12be90e3eabf68e6 Mon Sep 17 00:00:00 2001 From: Adam Brown Date: Fri, 8 Jul 2022 12:56:17 +0100 Subject: [PATCH 4/6] selecting the space with the empty room before attempt to interact with it --- .../vector/app/ui/UiAllScreensSanityTest.kt | 17 +++++++----- .../app/ui/robot/space/SpaceCreateRobot.kt | 4 +-- .../app/ui/robot/space/SpaceMenuRobot.kt | 17 ------------ .../vector/app/ui/robot/space/SpaceRobot.kt | 26 +++++++++++++++++++ 4 files changed, 38 insertions(+), 26 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 09980f405e..958f22c2bb 100644 --- a/vector/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt +++ b/vector/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt @@ -99,30 +99,33 @@ class UiAllScreensSanityTest { testThreadScreens() + val spaceName = UUID.randomUUID().toString() elementRobot.space { createSpace { - crawl() + createAndCrawl(spaceName) } - val spaceName = UUID.randomUUID().toString() + val publicSpace = UUID.randomUUID().toString() createSpace { - createPublicSpace(spaceName) + createPublicSpace(publicSpace) } - spaceMenu(spaceName) { + spaceMenu(publicSpace) { spaceMembers() spaceSettings { crawl() } exploreRooms() - invitePeople().also { openMenu(spaceName) } - addRoom().also { openMenu(spaceName) } - addSpace().also { openMenu(spaceName) } + invitePeople().also { openMenu(publicSpace) } + addRoom().also { openMenu(publicSpace) } + addSpace().also { openMenu(publicSpace) } leaveSpace() } } + elementRobot.space { selectSpace(spaceName) } + elementRobot.withDeveloperMode { settings { advancedSettings { crawlDeveloperOptions() } diff --git a/vector/src/androidTest/java/im/vector/app/ui/robot/space/SpaceCreateRobot.kt b/vector/src/androidTest/java/im/vector/app/ui/robot/space/SpaceCreateRobot.kt index 68e5fa5059..3116412a5f 100644 --- a/vector/src/androidTest/java/im/vector/app/ui/robot/space/SpaceCreateRobot.kt +++ b/vector/src/androidTest/java/im/vector/app/ui/robot/space/SpaceCreateRobot.kt @@ -36,11 +36,11 @@ import java.util.UUID class SpaceCreateRobot { - fun crawl() { + fun createAndCrawl(name: String) { // public clickOn(R.id.publicButton) waitUntilViewVisible(withId(R.id.recyclerView)) - onView(ViewMatchers.withHint(R.string.create_room_name_hint)).perform(ViewActions.replaceText(UUID.randomUUID().toString())) + onView(ViewMatchers.withHint(R.string.create_room_name_hint)).perform(ViewActions.replaceText(name)) clickOn(R.id.nextButton) waitUntilViewVisible(withId(R.id.recyclerView)) pressBack() diff --git a/vector/src/androidTest/java/im/vector/app/ui/robot/space/SpaceMenuRobot.kt b/vector/src/androidTest/java/im/vector/app/ui/robot/space/SpaceMenuRobot.kt index 289c6e21b4..d04746bcd6 100644 --- a/vector/src/androidTest/java/im/vector/app/ui/robot/space/SpaceMenuRobot.kt +++ b/vector/src/androidTest/java/im/vector/app/ui/robot/space/SpaceMenuRobot.kt @@ -16,13 +16,9 @@ package im.vector.app.ui.robot.space -import androidx.recyclerview.widget.RecyclerView import androidx.test.espresso.Espresso -import androidx.test.espresso.Espresso.onView -import androidx.test.espresso.contrib.RecyclerViewActions import androidx.test.espresso.matcher.ViewMatchers import com.adevinta.android.barista.interaction.BaristaClickInteractions.clickOn -import com.adevinta.android.barista.internal.viewaction.ClickChildAction import im.vector.app.R import im.vector.app.clickOnSheet import im.vector.app.espresso.tools.waitUntilActivityVisible @@ -33,22 +29,9 @@ import im.vector.app.features.roomprofile.RoomProfileActivity import im.vector.app.features.spaces.SpaceExploreActivity import im.vector.app.features.spaces.leave.SpaceLeaveAdvancedActivity import im.vector.app.features.spaces.manage.SpaceManageActivity -import org.hamcrest.Matchers class SpaceMenuRobot { - fun openMenu(spaceName: String) { - waitUntilViewVisible(ViewMatchers.withId(R.id.groupListView)) - onView(ViewMatchers.withId(R.id.groupListView)) - .perform( - RecyclerViewActions.actionOnItem( - ViewMatchers.hasDescendant(Matchers.allOf(ViewMatchers.withId(R.id.groupNameView), ViewMatchers.withText(spaceName))), - ClickChildAction.clickChildWithId(R.id.groupTmpLeave) - ).atPosition(0) - ) - waitUntilDialogVisible(ViewMatchers.withId(R.id.spaceNameView)) - } - fun invitePeople() = apply { clickOnSheet(R.id.invitePeople) waitUntilDialogVisible(ViewMatchers.withId(R.id.inviteByMxidButton)) diff --git a/vector/src/androidTest/java/im/vector/app/ui/robot/space/SpaceRobot.kt b/vector/src/androidTest/java/im/vector/app/ui/robot/space/SpaceRobot.kt index bfcf312e76..b8a2f4313b 100644 --- a/vector/src/androidTest/java/im/vector/app/ui/robot/space/SpaceRobot.kt +++ b/vector/src/androidTest/java/im/vector/app/ui/robot/space/SpaceRobot.kt @@ -16,9 +16,17 @@ package im.vector.app.ui.robot.space +import androidx.recyclerview.widget.RecyclerView +import androidx.test.espresso.Espresso +import androidx.test.espresso.contrib.RecyclerViewActions +import androidx.test.espresso.matcher.ViewMatchers import com.adevinta.android.barista.interaction.BaristaClickInteractions.clickOn import com.adevinta.android.barista.interaction.BaristaDrawerInteractions.openDrawer +import com.adevinta.android.barista.internal.viewaction.ClickChildAction import im.vector.app.R +import im.vector.app.espresso.tools.waitUntilDialogVisible +import im.vector.app.espresso.tools.waitUntilViewVisible +import org.hamcrest.Matchers class SpaceRobot { @@ -35,4 +43,22 @@ class SpaceRobot { block() } } + + fun openMenu(spaceName: String) { + waitUntilViewVisible(ViewMatchers.withId(R.id.groupListView)) + Espresso.onView(ViewMatchers.withId(R.id.groupListView)) + .perform( + RecyclerViewActions.actionOnItem( + ViewMatchers.hasDescendant(Matchers.allOf(ViewMatchers.withId(R.id.groupNameView), ViewMatchers.withText(spaceName))), + ClickChildAction.clickChildWithId(R.id.groupTmpLeave) + ).atPosition(0) + ) + waitUntilDialogVisible(ViewMatchers.withId(R.id.spaceNameView)) + } + + fun selectSpace(spaceName: String) { + openDrawer() + waitUntilViewVisible(ViewMatchers.withId(R.id.groupListView)) + clickOn(spaceName) + } } From 46ed9a87e4de198656148a7f2f3e7279d1c8baea Mon Sep 17 00:00:00 2001 From: Adam Brown Date: Fri, 8 Jul 2022 13:13:22 +0100 Subject: [PATCH 5/6] removing unused imports --- .../java/im/vector/app/ui/robot/CreateNewRoomRobot.kt | 3 --- .../java/im/vector/app/ui/robot/space/SpaceCreateRobot.kt | 1 - 2 files changed, 4 deletions(-) diff --git a/vector/src/androidTest/java/im/vector/app/ui/robot/CreateNewRoomRobot.kt b/vector/src/androidTest/java/im/vector/app/ui/robot/CreateNewRoomRobot.kt index 743d16bbd8..854dd0ce0f 100644 --- a/vector/src/androidTest/java/im/vector/app/ui/robot/CreateNewRoomRobot.kt +++ b/vector/src/androidTest/java/im/vector/app/ui/robot/CreateNewRoomRobot.kt @@ -17,14 +17,11 @@ package im.vector.app.ui.robot import androidx.test.espresso.Espresso.closeSoftKeyboard -import androidx.test.espresso.Espresso.onData import androidx.test.espresso.Espresso.onView import androidx.test.espresso.Espresso.pressBack import androidx.test.espresso.action.ViewActions.replaceText -import androidx.test.espresso.assertion.ViewAssertions.matches import androidx.test.espresso.matcher.ViewMatchers.withHint import androidx.test.espresso.matcher.ViewMatchers.withId -import androidx.test.espresso.matcher.ViewMatchers.withText import com.adevinta.android.barista.assertion.BaristaListAssertions import com.adevinta.android.barista.interaction.BaristaClickInteractions import com.adevinta.android.barista.interaction.BaristaListInteractions diff --git a/vector/src/androidTest/java/im/vector/app/ui/robot/space/SpaceCreateRobot.kt b/vector/src/androidTest/java/im/vector/app/ui/robot/space/SpaceCreateRobot.kt index 3116412a5f..018f3097ba 100644 --- a/vector/src/androidTest/java/im/vector/app/ui/robot/space/SpaceCreateRobot.kt +++ b/vector/src/androidTest/java/im/vector/app/ui/robot/space/SpaceCreateRobot.kt @@ -32,7 +32,6 @@ import im.vector.app.espresso.tools.waitUntilDialogVisible import im.vector.app.espresso.tools.waitUntilViewVisible import im.vector.app.features.home.HomeActivity import im.vector.app.features.spaces.manage.SpaceManageActivity -import java.util.UUID class SpaceCreateRobot { From 2c843985cae65993604351aaa0215d0675992724 Mon Sep 17 00:00:00 2001 From: Adam Brown Date: Wed, 13 Jul 2022 09:17:50 +0100 Subject: [PATCH 6/6] updating variable to include name (as it's holding the space name --- .../java/im/vector/app/ui/UiAllScreensSanityTest.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 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 958f22c2bb..9434006060 100644 --- a/vector/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt +++ b/vector/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt @@ -104,21 +104,21 @@ class UiAllScreensSanityTest { createSpace { createAndCrawl(spaceName) } - val publicSpace = UUID.randomUUID().toString() + val publicSpaceName = UUID.randomUUID().toString() createSpace { - createPublicSpace(publicSpace) + createPublicSpace(publicSpaceName) } - spaceMenu(publicSpace) { + spaceMenu(publicSpaceName) { spaceMembers() spaceSettings { crawl() } exploreRooms() - invitePeople().also { openMenu(publicSpace) } - addRoom().also { openMenu(publicSpace) } - addSpace().also { openMenu(publicSpace) } + invitePeople().also { openMenu(publicSpaceName) } + addRoom().also { openMenu(publicSpaceName) } + addSpace().also { openMenu(publicSpaceName) } leaveSpace() }