@@ -313,6 +313,107 @@ class SearchVMTest : BaseMviViewModelTest<ViewIntent, ViewState, SingleEvent, Se
313
313
}
314
314
}
315
315
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
+
316
417
private companion object {
317
418
private val EXTRAS_TIMEOUT = Duration .milliseconds(100 )
318
419
private val TOTAL_TIMEOUT = SEARCH_DEBOUNCE_DURATION + EXTRAS_TIMEOUT
0 commit comments