Skip to content

Commit 567df60

Browse files
committed
Update unit test mocking dataSource
1 parent 59596c1 commit 567df60

File tree

4 files changed

+25
-10
lines changed

4 files changed

+25
-10
lines changed

app/src/test/java/com/skydoves/pokedex/network/ApiAbstract.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package com.skydoves.pokedex.network
1818

1919
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
20+
import com.skydoves.sandwich.DataSourceCallAdapterFactory
2021
import java.io.IOException
2122
import java.nio.charset.StandardCharsets
2223
import okhttp3.mockwebserver.MockResponse
@@ -73,6 +74,7 @@ abstract class ApiAbstract<T> {
7374
return Retrofit.Builder()
7475
.baseUrl(mockWebServer.url("/"))
7576
.addConverterFactory(MoshiConverterFactory.create())
77+
.addCallAdapterFactory(DataSourceCallAdapterFactory())
7678
.build()
7779
.create(clazz)
7880
}

app/src/test/java/com/skydoves/pokedex/network/PokedexServiceTest.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import com.nhaarman.mockitokotlin2.whenever
2121
import com.skydoves.pokedex.model.PokemonInfo
2222
import com.skydoves.pokedex.model.PokemonResponse
2323
import com.skydoves.sandwich.ApiResponse
24+
import com.skydoves.sandwich.toResponseDataSource
2425
import java.io.IOException
2526
import org.hamcrest.CoreMatchers.`is`
2627
import org.hamcrest.CoreMatchers.instanceOf
@@ -44,7 +45,8 @@ class PokedexServiceTest : ApiAbstract<PokedexService>() {
4445
fun fetchPokemonListFromNetworkTest() {
4546
enqueueResponse("/PokemonResponse.json")
4647

47-
val responseBody = requireNotNull(service.fetchPokemonList().execute().body())
48+
val dataSourceCall = requireNotNull(service.fetchPokemonList().toResponseDataSource().call)
49+
val responseBody = requireNotNull(dataSourceCall.execute().body())
4850
mockWebServer.takeRequest()
4951

5052
assertThat(responseBody.count, `is`(964))
@@ -72,7 +74,8 @@ class PokedexServiceTest : ApiAbstract<PokedexService>() {
7274
fun fetchPokemonInfoFromNetworkTest() {
7375
enqueueResponse("/Bulbasaur.json")
7476

75-
val responseBody = requireNotNull(service.fetchPokemonInfo("bulbasaur").execute().body())
77+
val dataSourceCall = requireNotNull(service.fetchPokemonInfo("bulbasaur").toResponseDataSource().call)
78+
val responseBody = requireNotNull(dataSourceCall.execute().body())
7679
mockWebServer.takeRequest()
7780

7881
assertThat(responseBody.id, `is`(1))

app/src/test/java/com/skydoves/pokedex/repository/DetailRepositoryTest.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import com.skydoves.pokedex.network.PokedexClient
3232
import com.skydoves.pokedex.network.PokedexService
3333
import com.skydoves.pokedex.persistence.PokemonInfoDao
3434
import com.skydoves.pokedex.utils.MockUtil.mockPokemonInfo
35+
import com.skydoves.sandwich.ResponseDataSource
3536
import kotlinx.coroutines.ExperimentalCoroutinesApi
3637
import kotlinx.coroutines.runBlocking
3738
import org.junit.Before
@@ -63,10 +64,12 @@ class DetailRepositoryTest {
6364
@Test
6465
fun fetchPokemonInfoFromNetwork() = runBlocking {
6566
val mockData = mockPokemonInfo()
67+
val dataSourceCall =
68+
ResponseDataSource<PokemonInfo>().combine(getCall(mockData)) {}
6669
whenever(pokemonInfoDao.getPokemonInfo(name_ = "bulbasaur")).thenReturn(null)
67-
whenever(service.fetchPokemonInfo(name = "bulbasaur")).thenReturn(getCall(mockData))
70+
whenever(service.fetchPokemonInfo(name = "bulbasaur")).thenReturn(dataSourceCall)
6871

69-
val loadData = repository.fetchPokemonInfo(name = "bulbasaur") { }
72+
val loadData = repository.fetchPokemonInfo(name = "bulbasaur", onSuccess = {}, onError = {})
7073
verify(pokemonInfoDao, atLeastOnce()).getPokemonInfo(name_ = "bulbasaur")
7174
verify(service, atLeastOnce()).fetchPokemonInfo(name = "bulbasaur")
7275

@@ -84,10 +87,12 @@ class DetailRepositoryTest {
8487
@Test
8588
fun fetchPokemonInfoFromDatabase() = runBlocking {
8689
val mockData = mockPokemonInfo()
90+
val dataSourceCall =
91+
ResponseDataSource<PokemonInfo>().combine(getCall(mockData)) {}
8792
whenever(pokemonInfoDao.getPokemonInfo(name_ = "bulbasaur")).thenReturn(mockData)
88-
whenever(service.fetchPokemonInfo(name = "bulbasaur")).thenReturn(getCall(mockData))
93+
whenever(service.fetchPokemonInfo(name = "bulbasaur")).thenReturn(dataSourceCall)
8994

90-
val loadData = repository.fetchPokemonInfo(name = "bulbasaur") { }
95+
val loadData = repository.fetchPokemonInfo(name = "bulbasaur", onSuccess = {}, onError = {})
9196
verify(pokemonInfoDao, atLeastOnce()).getPokemonInfo(name_ = "bulbasaur")
9297
verifyNoMoreInteractions(service)
9398

app/src/test/java/com/skydoves/pokedex/repository/MainRepositoryTest.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import com.skydoves.pokedex.network.PokedexClient
3333
import com.skydoves.pokedex.network.PokedexService
3434
import com.skydoves.pokedex.persistence.PokemonDao
3535
import com.skydoves.pokedex.utils.MockUtil.mockPokemonList
36+
import com.skydoves.sandwich.ResponseDataSource
3637
import kotlinx.coroutines.ExperimentalCoroutinesApi
3738
import kotlinx.coroutines.runBlocking
3839
import org.junit.Before
@@ -64,10 +65,12 @@ class MainRepositoryTest {
6465
@Test
6566
fun fetchPokemonListFromNetwork() = runBlocking {
6667
val mockData = PokemonResponse(count = 984, next = null, previous = null, results = mockPokemonList())
68+
val dataSourceCall =
69+
ResponseDataSource<PokemonResponse>().combine(getCall(mockData)) {}
6770
whenever(pokemonDao.getPokemonList(page_ = 0)).thenReturn(emptyList())
68-
whenever(service.fetchPokemonList()).thenReturn(getCall(mockData))
71+
whenever(service.fetchPokemonList()).thenReturn(dataSourceCall)
6972

70-
val loadData = repository.fetchPokemonList(page = 0) { }
73+
val loadData = repository.fetchPokemonList(page = 0, onSuccess = {}, onError = {})
7174
verify(pokemonDao, atLeastOnce()).getPokemonList(page_ = 0)
7275
verify(service, atLeastOnce()).fetchPokemonList()
7376

@@ -85,10 +88,12 @@ class MainRepositoryTest {
8588
@Test
8689
fun fetchPokemonListFromDatabase() = runBlocking {
8790
val mockData = PokemonResponse(count = 984, next = null, previous = null, results = mockPokemonList())
91+
val dataSourceCall =
92+
ResponseDataSource<PokemonResponse>().combine(getCall(mockData)) {}
8893
whenever(pokemonDao.getPokemonList(page_ = 0)).thenReturn(mockData.results)
89-
whenever(service.fetchPokemonList()).thenReturn(getCall(mockData))
94+
whenever(service.fetchPokemonList()).thenReturn(dataSourceCall)
9095

91-
val loadData = repository.fetchPokemonList(page = 0) { }
96+
val loadData = repository.fetchPokemonList(page = 0, onSuccess = {}, onError = {})
9297
verify(pokemonDao, atLeastOnce()).getPokemonList(page_ = 0)
9398
verifyNoMoreInteractions(service)
9499

0 commit comments

Comments
 (0)