Skip to content

Commit d5da2bd

Browse files
committed
Add unit tests for ChatsScreen
1 parent eb4bcc7 commit d5da2bd

File tree

2 files changed

+99
-0
lines changed

2 files changed

+99
-0
lines changed

stream-chat-android-compose/src/test/kotlin/io/getstream/chat/android/compose/ui/ComposeTest.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@ package io.getstream.chat.android.compose.ui
1818

1919
import io.getstream.chat.android.client.ChatClient
2020
import io.getstream.chat.android.client.setup.state.ClientState
21+
import kotlinx.coroutines.test.TestScope
2122
import org.junit.After
2223
import org.junit.Before
24+
import org.mockito.kotlin.any
2325
import org.mockito.kotlin.doReturn
2426
import org.mockito.kotlin.mock
2527
import org.mockito.kotlin.reset
@@ -53,6 +55,7 @@ internal interface ComposeTest {
5355
override fun internalBuild(): ChatClient = MockChatClient
5456
}.build()
5557
whenever(MockChatClient.clientState) doReturn MockClientState
58+
whenever(MockChatClient.inheritScope(any())) doReturn TestScope()
5659
}
5760

5861
@After
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
/*
2+
* Copyright (c) 2014-2025 Stream.io Inc. All rights reserved.
3+
*
4+
* Licensed under the Stream 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+
* https://github.com/GetStream/stream-chat-android/blob/main/LICENSE
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.getstream.chat.android.compose.ui.chats
18+
19+
import androidx.annotation.UiThread
20+
import androidx.compose.ui.semantics.ProgressBarRangeInfo
21+
import androidx.compose.ui.test.hasProgressBarRangeInfo
22+
import androidx.compose.ui.test.junit4.createComposeRule
23+
import androidx.compose.ui.test.onNodeWithText
24+
import io.getstream.chat.android.compose.ui.ComposeTest
25+
import io.getstream.chat.android.compose.ui.channels.SearchMode
26+
import io.getstream.chat.android.compose.ui.theme.ChatTheme
27+
import io.getstream.chat.android.models.ConnectionState
28+
import io.getstream.chat.android.models.InitializationState
29+
import io.getstream.chat.android.randomUser
30+
import kotlinx.coroutines.flow.MutableStateFlow
31+
import org.junit.Before
32+
import org.junit.Rule
33+
import org.junit.Test
34+
import org.junit.runner.RunWith
35+
import org.mockito.kotlin.doReturn
36+
import org.mockito.kotlin.whenever
37+
import org.robolectric.RobolectricTestRunner
38+
import org.robolectric.annotation.Config
39+
40+
@RunWith(RobolectricTestRunner::class)
41+
@Config(sdk = [33])
42+
internal class ChatsScreenTest : ComposeTest {
43+
44+
@get:Rule
45+
val composeTestRule = createComposeRule()
46+
47+
@Before
48+
fun prepare() {
49+
val user = randomUser()
50+
whenever(mockChatClient.getCurrentUser()) doReturn user
51+
whenever(mockClientState.user) doReturn MutableStateFlow(user)
52+
whenever(mockClientState.connectionState) doReturn MutableStateFlow(ConnectionState.Connected)
53+
whenever(mockClientState.initializationState) doReturn MutableStateFlow(InitializationState.NOT_INITIALIZED)
54+
}
55+
56+
@Test
57+
@UiThread
58+
fun `with search mode none`() {
59+
composeTestRule.setContent {
60+
ChatTheme {
61+
ChatsScreen()
62+
}
63+
}
64+
65+
composeTestRule.onNodeWithText("Stream Chat").assertExists()
66+
composeTestRule.onNode(hasProgressBarRangeInfo(ProgressBarRangeInfo.Indeterminate))
67+
.assertExists()
68+
}
69+
70+
@Test
71+
@UiThread
72+
fun `with search mode messages`() {
73+
composeTestRule.setContent {
74+
ChatTheme {
75+
ChatsScreen(searchMode = SearchMode.Messages)
76+
}
77+
}
78+
79+
composeTestRule.onNodeWithText("Search").assertExists()
80+
composeTestRule.onNode(hasProgressBarRangeInfo(ProgressBarRangeInfo.Indeterminate))
81+
.assertExists()
82+
}
83+
84+
@Test
85+
@UiThread
86+
fun `with list content mode threads`() {
87+
composeTestRule.setContent {
88+
ChatTheme {
89+
ChatsScreen(listContentMode = ChatListContentMode.Threads)
90+
}
91+
}
92+
93+
composeTestRule.onNode(hasProgressBarRangeInfo(ProgressBarRangeInfo.Indeterminate))
94+
.assertExists()
95+
}
96+
}

0 commit comments

Comments
 (0)