Skip to content

Commit 523b164

Browse files
committed
Add UI test on CreateRoomRootView
1 parent 470e8ff commit 523b164

File tree

1 file changed

+131
-0
lines changed

1 file changed

+131
-0
lines changed
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
/*
2+
* Copyright (c) 2024 New Vector Ltd
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package io.element.android.features.createroom.impl.root
18+
19+
import androidx.activity.ComponentActivity
20+
import androidx.compose.ui.test.junit4.AndroidComposeTestRule
21+
import androidx.compose.ui.test.junit4.createAndroidComposeRule
22+
import androidx.compose.ui.test.onNodeWithText
23+
import androidx.compose.ui.test.performClick
24+
import androidx.test.ext.junit.runners.AndroidJUnit4
25+
import io.element.android.features.createroom.impl.R
26+
import io.element.android.features.createroom.impl.userlist.aRecentDirectRoomList
27+
import io.element.android.features.createroom.impl.userlist.aUserListState
28+
import io.element.android.libraries.matrix.api.core.RoomId
29+
import io.element.android.libraries.matrix.ui.model.getBestName
30+
import io.element.android.libraries.ui.strings.CommonStrings
31+
import io.element.android.tests.testutils.EnsureNeverCalled
32+
import io.element.android.tests.testutils.EnsureNeverCalledWithParam
33+
import io.element.android.tests.testutils.EventsRecorder
34+
import io.element.android.tests.testutils.clickOn
35+
import io.element.android.tests.testutils.ensureCalledOnce
36+
import io.element.android.tests.testutils.ensureCalledOnceWithParam
37+
import io.element.android.tests.testutils.pressBack
38+
import org.junit.Rule
39+
import org.junit.Test
40+
import org.junit.rules.TestRule
41+
import org.junit.runner.RunWith
42+
import org.robolectric.annotation.Config
43+
44+
@RunWith(AndroidJUnit4::class)
45+
class CreateRoomRootViewTest {
46+
@get:Rule
47+
val rule = createAndroidComposeRule<ComponentActivity>()
48+
49+
@Test
50+
fun `clicking on back invokes the expected callback`() {
51+
val eventsRecorder = EventsRecorder<CreateRoomRootEvents>(expectEvents = false)
52+
ensureCalledOnce {
53+
rule.setCreateRoomRootView(
54+
aCreateRoomRootState(
55+
eventSink = eventsRecorder,
56+
),
57+
onClosePressed = it
58+
)
59+
rule.pressBack()
60+
}
61+
}
62+
63+
@Test
64+
fun `clicking on New room invokes the expected callback`() {
65+
val eventsRecorder = EventsRecorder<CreateRoomRootEvents>(expectEvents = false)
66+
ensureCalledOnce {
67+
rule.setCreateRoomRootView(
68+
aCreateRoomRootState(
69+
eventSink = eventsRecorder,
70+
),
71+
onNewRoomClicked = it
72+
)
73+
rule.clickOn(R.string.screen_create_room_action_create_room)
74+
}
75+
}
76+
77+
@Config(qualifiers = "h1024dp")
78+
@Test
79+
fun `clicking on Invite people invokes the expected callback`() {
80+
val eventsRecorder = EventsRecorder<CreateRoomRootEvents>(expectEvents = false)
81+
ensureCalledOnce {
82+
rule.setCreateRoomRootView(
83+
aCreateRoomRootState(
84+
applicationName = "test",
85+
eventSink = eventsRecorder,
86+
),
87+
onInviteFriendsClicked = it
88+
)
89+
val text = rule.activity.getString(CommonStrings.action_invite_friends_to_app, "test")
90+
rule.onNodeWithText(text).performClick()
91+
}
92+
}
93+
94+
@Config(qualifiers = "h1024dp")
95+
@Test
96+
fun `clicking on a user suggestion invokes the expected callback`() {
97+
val recentDirectRoomList = aRecentDirectRoomList()
98+
val firstRoom = recentDirectRoomList[0]
99+
val eventsRecorder = EventsRecorder<CreateRoomRootEvents>(expectEvents = false)
100+
ensureCalledOnceWithParam(firstRoom.roomId) {
101+
rule.setCreateRoomRootView(
102+
aCreateRoomRootState(
103+
userListState = aUserListState(
104+
recentDirectRooms = recentDirectRoomList
105+
),
106+
eventSink = eventsRecorder,
107+
),
108+
onOpenDM = it
109+
)
110+
rule.onNodeWithText(firstRoom.matrixUser.getBestName()).performClick()
111+
}
112+
}
113+
}
114+
115+
private fun <R : TestRule> AndroidComposeTestRule<R, ComponentActivity>.setCreateRoomRootView(
116+
state: CreateRoomRootState,
117+
onClosePressed: () -> Unit = EnsureNeverCalled(),
118+
onNewRoomClicked: () -> Unit = EnsureNeverCalled(),
119+
onOpenDM: (RoomId) -> Unit = EnsureNeverCalledWithParam(),
120+
onInviteFriendsClicked: () -> Unit = EnsureNeverCalled(),
121+
) {
122+
setContent {
123+
CreateRoomRootView(
124+
state = state,
125+
onClosePressed = onClosePressed,
126+
onNewRoomClicked = onNewRoomClicked,
127+
onOpenDM = onOpenDM,
128+
onInviteFriendsClicked = onInviteFriendsClicked,
129+
)
130+
}
131+
}

0 commit comments

Comments
 (0)