Skip to content

Commit bd7c5c9

Browse files
committed
add SearchVMTest.kt
1 parent 37f9592 commit bd7c5c9

File tree

1 file changed

+101
-0
lines changed

1 file changed

+101
-0
lines changed

feature-search/src/test/java/com/hoc/flowmvi/ui/search/SearchVMTest.kt

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,107 @@ class SearchVMTest : BaseMviViewModelTest<ViewIntent, ViewState, SingleEvent, Se
313313
}
314314
}
315315

316+
@Test
317+
fun test_withRetryIntentWhenNoError_ignored() {
318+
test(
319+
vmProducer = { vm },
320+
intents = flowOf(ViewIntent.Retry),
321+
expectedStates = listOf(
322+
ViewState.initial(null),
323+
).mapRight(),
324+
expectedEvents = emptyList(),
325+
)
326+
}
327+
328+
@Test
329+
fun test_withRetryIntentWhenError_returnsUserItemsWithProperLoadingState() {
330+
val query = "#hoc081098"
331+
val networkError = UserError.NetworkError
332+
coEvery { searchUsersUseCase(query) } returnsMany listOf(
333+
networkError.left(),
334+
USERS.right(),
335+
)
336+
337+
test(
338+
vmProducer = { vm },
339+
intents = flowOf(ViewIntent.Retry),
340+
expectedStates = listOf(
341+
ViewState(
342+
users = emptyList(),
343+
isLoading = false,
344+
error = networkError,
345+
submittedQuery = query,
346+
originalQuery = query,
347+
),
348+
ViewState(
349+
users = emptyList(),
350+
isLoading = true, // update isLoading
351+
error = null, // update error
352+
submittedQuery = query,
353+
originalQuery = query,
354+
),
355+
ViewState(
356+
users = USER_ITEMS, // update users
357+
isLoading = false, // update isLoading
358+
error = null,
359+
submittedQuery = query,
360+
originalQuery = query,
361+
),
362+
).mapRight(),
363+
expectedEvents = emptyList(),
364+
intentsBeforeCollecting = flow {
365+
emit(ViewIntent.Search(query))
366+
timeout()
367+
},
368+
) {
369+
coVerify(exactly = 2) { searchUsersUseCase(query) }
370+
}
371+
}
372+
373+
@Test
374+
fun test_withRetryIntentWhenError_returnsUserErrorWithProperLoadingState() {
375+
val query = "#hoc081098"
376+
val networkError = UserError.NetworkError
377+
coEvery { searchUsersUseCase(query) } returns networkError.left()
378+
379+
test(
380+
vmProducer = { vm },
381+
intents = flowOf(ViewIntent.Retry),
382+
expectedStates = listOf(
383+
ViewState(
384+
users = emptyList(),
385+
isLoading = false,
386+
error = networkError,
387+
submittedQuery = query,
388+
originalQuery = query,
389+
),
390+
ViewState(
391+
users = emptyList(),
392+
isLoading = true, // update isLoading
393+
error = null, // update error
394+
submittedQuery = query,
395+
originalQuery = query,
396+
),
397+
ViewState(
398+
users = emptyList(),
399+
isLoading = false, // update isLoading
400+
error = networkError, // update error
401+
submittedQuery = query,
402+
originalQuery = query,
403+
),
404+
).mapRight(),
405+
expectedEvents = listOf(
406+
SingleEvent.SearchFailure(networkError),
407+
).mapRight(),
408+
intentsBeforeCollecting = flow {
409+
emit(ViewIntent.Search(query))
410+
timeout()
411+
},
412+
) {
413+
coVerify(exactly = 2) { searchUsersUseCase(query) }
414+
}
415+
}
416+
316417
private companion object {
317418
private val EXTRAS_TIMEOUT = Duration.milliseconds(100)
318419
private val TOTAL_TIMEOUT = SEARCH_DEBOUNCE_DURATION + EXTRAS_TIMEOUT

0 commit comments

Comments
 (0)