Merge branch 'develop' into feature/bma/removeExternalCallSupport
This commit is contained in:
commit
e21276f323
122 changed files with 2266 additions and 2352 deletions
|
|
@ -6,14 +6,17 @@
|
|||
* Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
@file:OptIn(ExperimentalTestApi::class)
|
||||
|
||||
package io.element.android.features.roomdetails.impl
|
||||
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.compose.ui.test.junit4.AndroidComposeTestRule
|
||||
import androidx.compose.ui.test.junit4.createAndroidComposeRule
|
||||
import androidx.compose.ui.test.AndroidComposeUiTest
|
||||
import androidx.compose.ui.test.ExperimentalTestApi
|
||||
import androidx.compose.ui.test.onNodeWithContentDescription
|
||||
import androidx.compose.ui.test.onNodeWithTag
|
||||
import androidx.compose.ui.test.performClick
|
||||
import androidx.compose.ui.test.v2.runAndroidComposeUiTest
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import io.element.android.features.roomdetails.impl.members.aRoomMember
|
||||
import io.element.android.features.userprofile.shared.aUserProfileState
|
||||
|
|
@ -32,98 +35,94 @@ import io.element.android.tests.testutils.clickOn
|
|||
import io.element.android.tests.testutils.ensureCalledOnce
|
||||
import io.element.android.tests.testutils.ensureCalledOnceWithParam
|
||||
import io.element.android.tests.testutils.pressBack
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.junit.rules.TestRule
|
||||
import org.junit.runner.RunWith
|
||||
import org.robolectric.annotation.Config
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class RoomDetailsViewTest {
|
||||
@get:Rule val rule = createAndroidComposeRule<ComponentActivity>()
|
||||
|
||||
@Test
|
||||
fun `click on back invokes expected callback`() {
|
||||
fun `click on back invokes expected callback`() = runAndroidComposeUiTest {
|
||||
ensureCalledOnce { callback ->
|
||||
rule.setRoomDetailView(
|
||||
setRoomDetailView(
|
||||
goBack = callback,
|
||||
)
|
||||
rule.pressBack()
|
||||
pressBack()
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `click on share invokes expected callback`() {
|
||||
fun `click on share invokes expected callback`() = runAndroidComposeUiTest {
|
||||
ensureCalledOnce { callback ->
|
||||
rule.setRoomDetailView(
|
||||
setRoomDetailView(
|
||||
onShareRoom = callback,
|
||||
)
|
||||
rule.clickOn(CommonStrings.action_share)
|
||||
clickOn(CommonStrings.action_share)
|
||||
}
|
||||
}
|
||||
|
||||
@Config(qualifiers = "h1024dp")
|
||||
@Test
|
||||
fun `click on room members invokes expected callback`() {
|
||||
fun `click on room members invokes expected callback`() = runAndroidComposeUiTest {
|
||||
ensureCalledOnce { callback ->
|
||||
rule.setRoomDetailView(
|
||||
setRoomDetailView(
|
||||
openRoomMemberList = callback,
|
||||
)
|
||||
rule.clickOn(CommonStrings.common_people)
|
||||
clickOn(CommonStrings.common_people)
|
||||
}
|
||||
}
|
||||
|
||||
@Config(qualifiers = "h1024dp")
|
||||
@Test
|
||||
fun `click on polls invokes expected callback`() {
|
||||
fun `click on polls invokes expected callback`() = runAndroidComposeUiTest {
|
||||
ensureCalledOnce { callback ->
|
||||
rule.setRoomDetailView(
|
||||
setRoomDetailView(
|
||||
openPollHistory = callback,
|
||||
)
|
||||
rule.clickOn(R.string.screen_polls_history_title)
|
||||
clickOn(R.string.screen_polls_history_title)
|
||||
}
|
||||
}
|
||||
|
||||
@Config(qualifiers = "h1024dp")
|
||||
@Test
|
||||
fun `click on media gallery invokes expected callback`() {
|
||||
fun `click on media gallery invokes expected callback`() = runAndroidComposeUiTest {
|
||||
ensureCalledOnce { callback ->
|
||||
rule.setRoomDetailView(
|
||||
setRoomDetailView(
|
||||
openMediaGallery = callback,
|
||||
)
|
||||
rule.clickOn(R.string.screen_room_details_media_gallery_title)
|
||||
clickOn(R.string.screen_room_details_media_gallery_title)
|
||||
}
|
||||
}
|
||||
|
||||
@Config(qualifiers = "h1024dp")
|
||||
@Test
|
||||
fun `click on notification invokes expected callback`() {
|
||||
fun `click on notification invokes expected callback`() = runAndroidComposeUiTest {
|
||||
ensureCalledOnce { callback ->
|
||||
rule.setRoomDetailView(
|
||||
setRoomDetailView(
|
||||
openRoomNotificationSettings = callback,
|
||||
)
|
||||
rule.clickOn(R.string.screen_room_details_notification_title)
|
||||
clickOn(R.string.screen_room_details_notification_title)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `click on invite invokes expected callback`() {
|
||||
fun `click on invite invokes expected callback`() = runAndroidComposeUiTest {
|
||||
ensureCalledOnce { callback ->
|
||||
rule.setRoomDetailView(
|
||||
setRoomDetailView(
|
||||
state = aRoomDetailsState(
|
||||
eventSink = EventsRecorder(expectEvents = false),
|
||||
canInvite = true,
|
||||
),
|
||||
invitePeople = callback,
|
||||
)
|
||||
rule.clickOn(CommonStrings.action_invite)
|
||||
clickOn(CommonStrings.action_invite)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `click on call invokes expected callback`() {
|
||||
fun `click on call invokes expected callback`() = runAndroidComposeUiTest {
|
||||
ensureCalledOnceWithParam(CallIntent.AUDIO) { callback ->
|
||||
rule.setRoomDetailView(
|
||||
setRoomDetailView(
|
||||
state = aRoomDetailsState(
|
||||
eventSink = EventsRecorder(expectEvents = false),
|
||||
canInvite = true,
|
||||
|
|
@ -134,103 +133,103 @@ class RoomDetailsViewTest {
|
|||
),
|
||||
onJoinCallClick = callback,
|
||||
)
|
||||
rule.clickOn(CommonStrings.action_call)
|
||||
clickOn(CommonStrings.action_call)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `click on video call invokes expected callback`() {
|
||||
fun `click on video call invokes expected callback`() = runAndroidComposeUiTest {
|
||||
ensureCalledOnceWithParam(CallIntent.VIDEO) { callback ->
|
||||
rule.setRoomDetailView(
|
||||
setRoomDetailView(
|
||||
state = aRoomDetailsState(
|
||||
eventSink = EventsRecorder(expectEvents = false),
|
||||
canInvite = true,
|
||||
),
|
||||
onJoinCallClick = callback,
|
||||
)
|
||||
rule.clickOn(CommonStrings.common_video)
|
||||
clickOn(CommonStrings.common_video)
|
||||
}
|
||||
}
|
||||
|
||||
@Config(qualifiers = "h1024dp")
|
||||
@Test
|
||||
fun `click on pinned messages invokes expected callback`() {
|
||||
fun `click on pinned messages invokes expected callback`() = runAndroidComposeUiTest {
|
||||
ensureCalledOnce { callback ->
|
||||
rule.setRoomDetailView(
|
||||
setRoomDetailView(
|
||||
state = aRoomDetailsState(
|
||||
eventSink = EventsRecorder(expectEvents = false),
|
||||
canInvite = true,
|
||||
),
|
||||
onPinnedMessagesClick = callback,
|
||||
)
|
||||
rule.clickOn(R.string.screen_room_details_pinned_events_row_title)
|
||||
clickOn(R.string.screen_room_details_pinned_events_row_title)
|
||||
}
|
||||
}
|
||||
|
||||
@Config(qualifiers = "h1024dp")
|
||||
@Test
|
||||
fun `click on security and privacy invokes expected callback`() {
|
||||
fun `click on security and privacy invokes expected callback`() = runAndroidComposeUiTest {
|
||||
ensureCalledOnce { callback ->
|
||||
rule.setRoomDetailView(
|
||||
setRoomDetailView(
|
||||
state = aRoomDetailsState(
|
||||
eventSink = EventsRecorder(expectEvents = false),
|
||||
canShowSecurityAndPrivacy = true,
|
||||
),
|
||||
onSecurityAndPrivacyClick = callback,
|
||||
)
|
||||
rule.clickOn(R.string.screen_room_details_security_and_privacy_title)
|
||||
clickOn(R.string.screen_room_details_security_and_privacy_title)
|
||||
}
|
||||
}
|
||||
|
||||
@Config(qualifiers = "h1024dp")
|
||||
@Test
|
||||
fun `click on add topic emit expected event`() {
|
||||
fun `click on add topic emit expected event`() = runAndroidComposeUiTest {
|
||||
ensureCalledOnceWithParam<RoomDetailsAction>(RoomDetailsAction.AddTopic) { callback ->
|
||||
rule.setRoomDetailView(
|
||||
setRoomDetailView(
|
||||
state = aRoomDetailsState(
|
||||
eventSink = EventsRecorder(expectEvents = false),
|
||||
roomTopic = RoomTopicState.CanAddTopic,
|
||||
),
|
||||
onActionClick = callback,
|
||||
)
|
||||
rule.clickOn(R.string.screen_room_details_add_topic_title)
|
||||
clickOn(R.string.screen_room_details_add_topic_title)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `click on menu edit emit expected event`() {
|
||||
fun `click on menu edit emit expected event`() = runAndroidComposeUiTest {
|
||||
ensureCalledOnceWithParam<RoomDetailsAction>(RoomDetailsAction.Edit) { callback ->
|
||||
rule.setRoomDetailView(
|
||||
setRoomDetailView(
|
||||
state = aRoomDetailsState(
|
||||
eventSink = EventsRecorder(expectEvents = false),
|
||||
canEdit = true,
|
||||
),
|
||||
onActionClick = callback,
|
||||
)
|
||||
val menuContentDescription = rule.activity.getString(CommonStrings.a11y_user_menu)
|
||||
rule.onNodeWithContentDescription(menuContentDescription).performClick()
|
||||
rule.clickOn(CommonStrings.action_edit)
|
||||
val menuContentDescription = activity!!.getString(CommonStrings.a11y_user_menu)
|
||||
onNodeWithContentDescription(menuContentDescription).performClick()
|
||||
clickOn(CommonStrings.action_edit)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `click on avatar test`() {
|
||||
fun `click on avatar test`() = runAndroidComposeUiTest {
|
||||
val eventsRecorder = EventsRecorder<RoomDetailsEvent>(expectEvents = false)
|
||||
val state = aRoomDetailsState(
|
||||
eventSink = eventsRecorder,
|
||||
roomAvatarUrl = "an_avatar_url",
|
||||
)
|
||||
val callback = EnsureCalledOnceWithTwoParams(state.roomName, "an_avatar_url")
|
||||
rule.setRoomDetailView(
|
||||
setRoomDetailView(
|
||||
state = state,
|
||||
openAvatarPreview = callback,
|
||||
)
|
||||
rule.onNodeWithTag(TestTags.roomDetailAvatar.value).performClick()
|
||||
onNodeWithTag(TestTags.roomDetailAvatar.value).performClick()
|
||||
callback.assertSuccess()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `click on avatar test on DM`() {
|
||||
fun `click on avatar test on DM`() = runAndroidComposeUiTest {
|
||||
val eventsRecorder = EventsRecorder<RoomDetailsEvent>(expectEvents = false)
|
||||
val state = aRoomDetailsState(
|
||||
roomType = RoomDetailsType.Dm(
|
||||
|
|
@ -241,114 +240,114 @@ class RoomDetailsViewTest {
|
|||
eventSink = eventsRecorder,
|
||||
)
|
||||
val callback = EnsureCalledOnceWithTwoParams("Daniel", "an_avatar_url")
|
||||
rule.setRoomDetailView(
|
||||
setRoomDetailView(
|
||||
state = state,
|
||||
openAvatarPreview = callback,
|
||||
)
|
||||
rule.onNodeWithTag(TestTags.memberDetailAvatar.value).performClick()
|
||||
onNodeWithTag(TestTags.memberDetailAvatar.value).performClick()
|
||||
callback.assertSuccess()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `click on mute emit expected event`() {
|
||||
fun `click on mute emit expected event`() = runAndroidComposeUiTest {
|
||||
val eventsRecorder = EventsRecorder<RoomDetailsEvent>()
|
||||
val state = aRoomDetailsState(
|
||||
eventSink = eventsRecorder,
|
||||
roomNotificationSettings = aRoomNotificationSettings(mode = RoomNotificationMode.ALL_MESSAGES),
|
||||
)
|
||||
rule.setRoomDetailView(
|
||||
setRoomDetailView(
|
||||
state = state,
|
||||
)
|
||||
rule.clickOn(CommonStrings.common_mute)
|
||||
clickOn(CommonStrings.common_mute)
|
||||
eventsRecorder.assertSingle(RoomDetailsEvent.MuteNotification)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `click on unmute emit expected event`() {
|
||||
fun `click on unmute emit expected event`() = runAndroidComposeUiTest {
|
||||
val eventsRecorder = EventsRecorder<RoomDetailsEvent>()
|
||||
val state = aRoomDetailsState(
|
||||
eventSink = eventsRecorder,
|
||||
roomNotificationSettings = aRoomNotificationSettings(mode = RoomNotificationMode.MUTE),
|
||||
)
|
||||
rule.setRoomDetailView(
|
||||
setRoomDetailView(
|
||||
state = state,
|
||||
)
|
||||
rule.clickOn(CommonStrings.common_unmute)
|
||||
clickOn(CommonStrings.common_unmute)
|
||||
eventsRecorder.assertSingle(RoomDetailsEvent.UnmuteNotification)
|
||||
}
|
||||
|
||||
@Config(qualifiers = "h1024dp")
|
||||
@Test
|
||||
fun `click on favorite emit expected Event`() {
|
||||
fun `click on favorite emit expected Event`() = runAndroidComposeUiTest {
|
||||
val eventsRecorder = EventsRecorder<RoomDetailsEvent>()
|
||||
rule.setRoomDetailView(
|
||||
setRoomDetailView(
|
||||
state = aRoomDetailsState(
|
||||
eventSink = eventsRecorder,
|
||||
),
|
||||
)
|
||||
rule.clickOn(CommonStrings.common_favourite)
|
||||
clickOn(CommonStrings.common_favourite)
|
||||
eventsRecorder.assertSingle(RoomDetailsEvent.SetFavorite(true))
|
||||
}
|
||||
|
||||
@Config(qualifiers = "h1500dp")
|
||||
@Test
|
||||
fun `click on leave emit expected Event`() {
|
||||
fun `click on leave emit expected Event`() = runAndroidComposeUiTest {
|
||||
val eventsRecorder = EventsRecorder<RoomDetailsEvent>()
|
||||
rule.setRoomDetailView(
|
||||
setRoomDetailView(
|
||||
state = aRoomDetailsState(
|
||||
eventSink = eventsRecorder,
|
||||
),
|
||||
)
|
||||
rule.clickOn(R.string.screen_room_details_leave_room_title)
|
||||
clickOn(R.string.screen_room_details_leave_room_title)
|
||||
eventsRecorder.assertSingle(RoomDetailsEvent.LeaveRoom(needsConfirmation = true))
|
||||
}
|
||||
|
||||
@Config(qualifiers = "h1500dp")
|
||||
@Test
|
||||
fun `click on report room invokes expected callback`() {
|
||||
fun `click on report room invokes expected callback`() = runAndroidComposeUiTest {
|
||||
ensureCalledOnce { callback ->
|
||||
rule.setRoomDetailView(
|
||||
setRoomDetailView(
|
||||
state = aRoomDetailsState(
|
||||
eventSink = EventsRecorder(expectEvents = false),
|
||||
),
|
||||
onReportRoomClick = callback,
|
||||
)
|
||||
rule.clickOn(CommonStrings.action_report_room)
|
||||
clickOn(CommonStrings.action_report_room)
|
||||
}
|
||||
}
|
||||
|
||||
@Config(qualifiers = "h1024dp")
|
||||
@Test
|
||||
fun `click on knock requests invokes expected callback`() {
|
||||
fun `click on knock requests invokes expected callback`() = runAndroidComposeUiTest {
|
||||
ensureCalledOnce { callback ->
|
||||
rule.setRoomDetailView(
|
||||
setRoomDetailView(
|
||||
state = aRoomDetailsState(
|
||||
eventSink = EventsRecorder(expectEvents = false),
|
||||
canShowKnockRequests = true,
|
||||
),
|
||||
onKnockRequestsClick = callback,
|
||||
)
|
||||
rule.clickOn(R.string.screen_room_details_requests_to_join_title)
|
||||
clickOn(R.string.screen_room_details_requests_to_join_title)
|
||||
}
|
||||
}
|
||||
|
||||
@Config(qualifiers = "h1024dp")
|
||||
@Test
|
||||
fun `click on profile invokes the expected callback`() {
|
||||
fun `click on profile invokes the expected callback`() = runAndroidComposeUiTest {
|
||||
ensureCalledOnceWithParam(A_USER_ID) { callback ->
|
||||
rule.setRoomDetailView(
|
||||
setRoomDetailView(
|
||||
state = aRoomDetailsState(
|
||||
eventSink = EventsRecorder(expectEvents = false),
|
||||
roomMemberDetailsState = aUserProfileState(userId = A_USER_ID),
|
||||
),
|
||||
onProfileClick = callback,
|
||||
)
|
||||
rule.clickOn(R.string.screen_room_details_profile_row_title)
|
||||
clickOn(R.string.screen_room_details_profile_row_title)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun <R : TestRule> AndroidComposeTestRule<R, ComponentActivity>.setRoomDetailView(
|
||||
private fun AndroidComposeUiTest<ComponentActivity>.setRoomDetailView(
|
||||
state: RoomDetailsState = aRoomDetailsState(
|
||||
eventSink = EventsRecorder(expectEvents = false),
|
||||
),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue