Merge pull request #5087 from vector-im/feature/nfe/spaces_screens_tests
Add all screens about Spaces in allScreensTest
This commit is contained in:
commit
37a267aa7c
|
@ -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 {
|
elementRobot.withDeveloperMode {
|
||||||
settings {
|
settings {
|
||||||
advancedSettings { crawlDeveloperOptions() }
|
advancedSettings { crawlDeveloperOptions() }
|
||||||
|
|
|
@ -35,6 +35,7 @@ import im.vector.app.features.home.HomeActivity
|
||||||
import im.vector.app.features.onboarding.OnboardingActivity
|
import im.vector.app.features.onboarding.OnboardingActivity
|
||||||
import im.vector.app.initialSyncIdlingResource
|
import im.vector.app.initialSyncIdlingResource
|
||||||
import im.vector.app.ui.robot.settings.SettingsRobot
|
import im.vector.app.ui.robot.settings.SettingsRobot
|
||||||
|
import im.vector.app.ui.robot.space.SpaceRobot
|
||||||
import im.vector.app.withIdlingResource
|
import im.vector.app.withIdlingResource
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
|
|
||||||
|
@ -147,6 +148,10 @@ class ElementRobot {
|
||||||
waitUntilViewVisible(withId(R.id.bottomSheetFragmentContainer))
|
waitUntilViewVisible(withId(R.id.bottomSheetFragmentContainer))
|
||||||
}.onFailure { Timber.w(it, "Verification popup missing") }
|
}.onFailure { Timber.w(it, "Verification popup missing") }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun space(block: SpaceRobot.() -> Unit) {
|
||||||
|
block(SpaceRobot())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun Boolean.toWarningType() = if (this) "shown" else "skipped"
|
private fun Boolean.toWarningType() = if (this) "shown" else "skipped"
|
||||||
|
|
|
@ -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))
|
||||||
|
}
|
||||||
|
}
|
|
@ -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))
|
||||||
|
}
|
||||||
|
}
|
|
@ -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()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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()
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue