Last active
August 14, 2022 06:36
-
-
Save sanogueralorenzo/378f51ab746bbae88900a2e84edbf226 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class PostRepositoryImplTest { | |
private lateinit var repository: PostRepositoryImpl | |
private val mockCacheDataSource: PostCacheDataSource = mock() | |
private val mockRemoteDataSource: PostRemoteDataSource = mock() | |
private val postId = post.id | |
private val cacheItem = post.copy(title = "cache") | |
private val remoteItem = post.copy(title = "remote") | |
private val cacheList = listOf(cacheItem) | |
private val remoteList = listOf(remoteItem) | |
private val cacheThrowable = Throwable() | |
private val remoteThrowable = Throwable() | |
@Before | |
fun setUp() { | |
repository = PostRepositoryImpl(mockCacheDataSource, mockRemoteDataSource) | |
} | |
@Test | |
fun `get posts cache success`() { | |
// given | |
whenever(mockCacheDataSource.get()).thenReturn(Single.just(cacheList)) | |
// when | |
val test = repository.get(false).test() | |
// then | |
verify(mockCacheDataSource).get() | |
test.assertValue(cacheList) | |
} | |
@Test | |
fun `get posts cache fail fallback remote succeeds`() { | |
// given | |
whenever(mockCacheDataSource.get()).thenReturn(Single.error(cacheThrowable)) | |
whenever(mockRemoteDataSource.get()).thenReturn(Single.just(remoteList)) | |
whenever(mockCacheDataSource.set(remoteList)).thenReturn(Single.just(remoteList)) | |
// when | |
val test = repository.get(false).test() | |
// then | |
verify(mockCacheDataSource).get() | |
verify(mockRemoteDataSource).get() | |
verify(mockCacheDataSource).set(remoteList) | |
test.assertValue(remoteList) | |
} | |
@Test | |
fun `get posts cache fail fallback remote fails`() { | |
// given | |
whenever(mockCacheDataSource.get()).thenReturn(Single.error(cacheThrowable)) | |
whenever(mockRemoteDataSource.get()).thenReturn(Single.error(remoteThrowable)) | |
// when | |
val test = repository.get(false).test() | |
// then | |
verify(mockCacheDataSource).get() | |
verify(mockRemoteDataSource).get() | |
test.assertError(remoteThrowable) | |
} | |
@Test | |
fun `get posts remote success`() { | |
// given | |
whenever(mockRemoteDataSource.get()).thenReturn(Single.just(remoteList)) | |
whenever(mockCacheDataSource.set(remoteList)).thenReturn(Single.just(remoteList)) | |
// when | |
val test = repository.get(true).test() | |
// then | |
verify(mockRemoteDataSource).get() | |
verify(mockCacheDataSource).set(remoteList) | |
test.assertValue(remoteList) | |
} | |
@Test | |
fun `get posts remote fail`() { | |
// given | |
whenever(mockRemoteDataSource.get()).thenReturn(Single.error(remoteThrowable)) | |
// when | |
val test = repository.get(true).test() | |
// then | |
verify(mockRemoteDataSource).get() | |
test.assertError(remoteThrowable) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment