Skip to content

Instantly share code, notes, and snippets.

@sanogueralorenzo
Last active August 14, 2022 06:36
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sanogueralorenzo/378f51ab746bbae88900a2e84edbf226 to your computer and use it in GitHub Desktop.
Save sanogueralorenzo/378f51ab746bbae88900a2e84edbf226 to your computer and use it in GitHub Desktop.
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