Merge pull request #5087 from vector-im/feature/nfe/spaces_screens_tests

Add all screens about Spaces in allScreensTest
This commit is contained in:
Benoit Marty 2022-02-17 14:30:38 +01:00 committed by GitHub
commit 37a267aa7c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 346 additions and 0 deletions

View File

@ -94,6 +94,30 @@ class UiAllScreensSanityTest {
}
}
elementRobot.space {
createSpace {
crawl()
}
val spaceName = UUID.randomUUID().toString()
createSpace {
createPublicSpace(spaceName)
}
spaceMenu(spaceName) {
spaceMembers()
spaceSettings {
crawl()
}
exploreRooms()
invitePeople().also { openMenu(spaceName) }
addRoom().also { openMenu(spaceName) }
addSpace().also { openMenu(spaceName) }
leaveSpace()
}
}
elementRobot.withDeveloperMode {
settings {
advancedSettings { crawlDeveloperOptions() }

View File

@ -35,6 +35,7 @@ import im.vector.app.features.home.HomeActivity
import im.vector.app.features.onboarding.OnboardingActivity
import im.vector.app.initialSyncIdlingResource
import im.vector.app.ui.robot.settings.SettingsRobot
import im.vector.app.ui.robot.space.SpaceRobot
import im.vector.app.withIdlingResource
import timber.log.Timber
@ -147,6 +148,10 @@ class ElementRobot {
waitUntilViewVisible(withId(R.id.bottomSheetFragmentContainer))
}.onFailure { Timber.w(it, "Verification popup missing") }
}
fun space(block: SpaceRobot.() -> Unit) {
block(SpaceRobot())
}
}
private fun Boolean.toWarningType() = if (this) "shown" else "skipped"

View File

@ -0,0 +1,97 @@
/*
* Copyright (c) 2022 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package im.vector.app.ui.robot.space
import androidx.recyclerview.widget.RecyclerView
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.Espresso.pressBack
import androidx.test.espresso.action.ViewActions
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.contrib.RecyclerViewActions
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText
import com.adevinta.android.barista.interaction.BaristaClickInteractions.clickOn
import im.vector.app.R
import im.vector.app.espresso.tools.waitUntilActivityVisible
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 {
fun crawl() {
// 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()))
clickOn(R.id.nextButton)
waitUntilViewVisible(withId(R.id.recyclerView))
pressBack()
pressBack()
// private
clickOn(R.id.privateButton)
waitUntilViewVisible(withId(R.id.recyclerView))
clickOn(R.id.nextButton)
waitUntilViewVisible(withId(R.id.teammatesButton))
// me and teammates
clickOn(R.id.teammatesButton)
waitUntilViewVisible(withId(R.id.recyclerView))
clickOn(R.id.nextButton)
pressBack()
pressBack()
// just me
waitUntilViewVisible(withId(R.id.justMeButton))
clickOn(R.id.justMeButton)
waitUntilActivityVisible<SpaceManageActivity> {
waitUntilViewVisible(withId(R.id.roomList))
}
onView(withId(R.id.roomList))
.perform(
RecyclerViewActions.actionOnItem<RecyclerView.ViewHolder>(
ViewMatchers.hasDescendant(withText(R.string.room_displayname_empty_room)),
click()
).atPosition(0)
)
clickOn(R.id.spaceAddRoomSaveItem)
waitUntilActivityVisible<HomeActivity> {
waitUntilViewVisible(withId(R.id.roomListContainer))
}
}
fun createPublicSpace(spaceName: String) {
clickOn(R.id.publicButton)
waitUntilViewVisible(withId(R.id.recyclerView))
onView(ViewMatchers.withHint(R.string.create_room_name_hint)).perform(ViewActions.replaceText(spaceName))
clickOn(R.id.nextButton)
waitUntilViewVisible(withId(R.id.recyclerView))
clickOn(R.id.nextButton)
waitUntilDialogVisible(withId(R.id.inviteByMxidButton))
// close invite dialog
pressBack()
waitUntilViewVisible(withId(R.id.timelineRecyclerView))
// close room
pressBack()
waitUntilViewVisible(withId(R.id.roomListContainer))
}
}

View File

@ -0,0 +1,114 @@
/*
* Copyright (c) 2022 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
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.espresso.tools.waitUntilActivityVisible
import im.vector.app.espresso.tools.waitUntilDialogVisible
import im.vector.app.espresso.tools.waitUntilViewVisible
import im.vector.app.features.invite.InviteUsersToRoomActivity
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<RecyclerView.ViewHolder>(
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 {
clickOn(R.id.invitePeople)
waitUntilDialogVisible(ViewMatchers.withId(R.id.inviteByMxidButton))
clickOn(R.id.inviteByMxidButton)
waitUntilActivityVisible<InviteUsersToRoomActivity> {
waitUntilViewVisible(ViewMatchers.withId(R.id.userListRecyclerView))
}
// close keyboard
Espresso.pressBack()
// close invite view
Espresso.pressBack()
}
fun spaceMembers() {
clickOn(R.id.showMemberList)
waitUntilActivityVisible<RoomProfileActivity> {
waitUntilViewVisible(ViewMatchers.withId(R.id.roomSettingsRecyclerView))
}
Espresso.pressBack()
}
fun spaceSettings(block: SpaceSettingsRobot.() -> Unit) {
clickOn(R.id.spaceSettings)
waitUntilActivityVisible<SpaceManageActivity> {
waitUntilViewVisible(ViewMatchers.withId(R.id.roomSettingsRecyclerView))
}
block(SpaceSettingsRobot())
}
fun exploreRooms() {
clickOn(R.id.exploreRooms)
waitUntilActivityVisible<SpaceExploreActivity> {
waitUntilViewVisible(ViewMatchers.withId(R.id.spaceDirectoryList))
}
Espresso.pressBack()
}
fun addRoom() = apply {
clickOn(R.id.addRooms)
waitUntilActivityVisible<SpaceManageActivity> {
waitUntilViewVisible(ViewMatchers.withId(R.id.roomList))
}
Espresso.pressBack()
}
fun addSpace() = apply {
clickOn(R.id.addSpaces)
waitUntilActivityVisible<SpaceManageActivity> {
waitUntilViewVisible(ViewMatchers.withId(R.id.roomList))
}
Espresso.pressBack()
}
fun leaveSpace() {
clickOn(R.id.leaveSpace)
waitUntilDialogVisible(ViewMatchers.withId(R.id.leaveButton))
clickOn(R.id.leave_selected)
waitUntilActivityVisible<SpaceLeaveAdvancedActivity> {
waitUntilViewVisible(ViewMatchers.withId(R.id.roomList))
}
clickOn(R.id.spaceLeaveButton)
waitUntilViewVisible(ViewMatchers.withId(R.id.groupListView))
}
}

View File

@ -0,0 +1,38 @@
/*
* Copyright (c) 2022 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package im.vector.app.ui.robot.space
import com.adevinta.android.barista.interaction.BaristaClickInteractions.clickOn
import com.adevinta.android.barista.interaction.BaristaDrawerInteractions.openDrawer
import im.vector.app.R
class SpaceRobot {
fun createSpace(block: SpaceCreateRobot.() -> Unit) {
openDrawer()
clickOn(R.string.add_space)
block(SpaceCreateRobot())
}
fun spaceMenu(spaceName: String, block: SpaceMenuRobot.() -> Unit) {
openDrawer()
with(SpaceMenuRobot()) {
openMenu(spaceName)
block()
}
}
}

View File

@ -0,0 +1,68 @@
/*
* Copyright (c) 2022 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package im.vector.app.ui.robot.space
import androidx.recyclerview.widget.RecyclerView
import androidx.test.espresso.Espresso
import androidx.test.espresso.action.ViewActions
import androidx.test.espresso.contrib.RecyclerViewActions
import androidx.test.espresso.matcher.ViewMatchers
import im.vector.app.R
import im.vector.app.espresso.tools.waitUntilActivityVisible
import im.vector.app.espresso.tools.waitUntilViewVisible
import im.vector.app.features.roomprofile.settings.joinrule.RoomJoinRuleActivity
class SpaceSettingsRobot {
fun crawl() {
Espresso.onView(ViewMatchers.withId(R.id.roomSettingsRecyclerView))
.perform(
RecyclerViewActions.actionOnItem<RecyclerView.ViewHolder>(
ViewMatchers.hasDescendant(ViewMatchers.withText(R.string.room_settings_space_access_title)),
ViewActions.click()
)
)
waitUntilActivityVisible<RoomJoinRuleActivity> {
waitUntilViewVisible(ViewMatchers.withId(R.id.genericRecyclerView))
}
Espresso.pressBack()
Espresso.onView(ViewMatchers.withId(R.id.roomSettingsRecyclerView))
.perform(
RecyclerViewActions.actionOnItem<RecyclerView.ViewHolder>(
ViewMatchers.hasDescendant(ViewMatchers.withText(R.string.space_settings_manage_rooms)),
ViewActions.click()
)
)
waitUntilViewVisible(ViewMatchers.withId(R.id.roomList))
Espresso.pressBack()
Espresso.onView(ViewMatchers.withId(R.id.roomSettingsRecyclerView))
.perform(
RecyclerViewActions.actionOnItem<RecyclerView.ViewHolder>(
ViewMatchers.hasDescendant(ViewMatchers.withText(R.string.space_settings_permissions_title)),
ViewActions.click()
)
)
waitUntilViewVisible(ViewMatchers.withId(R.id.roomSettingsRecyclerView))
Espresso.pressBack()
Espresso.pressBack()
}
}