@@ -5,12 +5,15 @@ import dev.dai.android.architecture.core.model.User
5
5
import dev.dai.android.architecture.core.model.fake
6
6
import dev.dai.android.architecture.core.test.MainDispatcherRule
7
7
import dev.dai.android.architecture.core.test.repository.FakeUserRepository
8
+ import dev.dai.android.architecture.ui.UserMessageResult
8
9
import dev.dai.android.architecture.ui.UserMessageStateHolder
9
10
import io.mockk.coEvery
11
+ import io.mockk.coVerify
10
12
import io.mockk.junit4.MockKRule
11
13
import io.mockk.mockk
12
14
import kotlinx.coroutines.flow.collect
13
15
import kotlinx.coroutines.flow.flow
16
+ import kotlinx.coroutines.flow.flowOf
14
17
import kotlinx.coroutines.launch
15
18
import kotlinx.coroutines.test.UnconfinedTestDispatcher
16
19
import kotlinx.coroutines.test.runTest
@@ -90,4 +93,66 @@ class UserListViewModelTest {
90
93
viewModel.uiState.value
91
94
)
92
95
}
96
+
97
+ @Test
98
+ fun `Refresh users` () = runTest {
99
+ val userRepository = FakeUserRepository ()
100
+ val viewModel = UserListViewModel (userMessageStateHolder, userRepository)
101
+ backgroundScope.launch(UnconfinedTestDispatcher (testScheduler)) {
102
+ viewModel.uiState.collect()
103
+ }
104
+
105
+ userRepository.emitUser(
106
+ listOf (
107
+ User .fake(),
108
+ User .fake(
109
+ id = 2 ,
110
+ name = " User2" ,
111
+ email = " user2@dev.dai.com" ,
112
+ phone = " 1234567890" ,
113
+ website = " https://dev.dai.com" ,
114
+ )
115
+ )
116
+ )
117
+
118
+ viewModel.refresh()
119
+
120
+ assertEquals(
121
+ UserListContentUiState (
122
+ userListUiState = UserListUiState .UserList (
123
+ isRefresh = false ,
124
+ users = listOf (User .fake())
125
+ )
126
+ ),
127
+ viewModel.uiState.value
128
+ )
129
+ }
130
+
131
+ @Test
132
+ fun `Refresh users failed` () = runTest {
133
+ val exception = TimeoutException ()
134
+ val userRepository = mockk<UserRepository > {
135
+ coEvery { users() } returns flowOf(listOf (User .fake()))
136
+ coEvery { refresh() } throws exception
137
+ }
138
+ coEvery { userMessageStateHolder.showMessage(exception.message.orEmpty()) } returns UserMessageResult .Dismissed
139
+ val viewModel = UserListViewModel (userMessageStateHolder, userRepository)
140
+ backgroundScope.launch(UnconfinedTestDispatcher (testScheduler)) {
141
+ viewModel.uiState.collect()
142
+ }
143
+
144
+ viewModel.refresh()
145
+
146
+ assertEquals(
147
+ UserListContentUiState (
148
+ userListUiState = UserListUiState .UserList (
149
+ isRefresh = false ,
150
+ users = listOf (User .fake())
151
+ )
152
+ ),
153
+ viewModel.uiState.value
154
+ )
155
+
156
+ coVerify(exactly = 1 ) { userMessageStateHolder.showMessage(exception.message.orEmpty()) }
157
+ }
93
158
}
0 commit comments