Testing Data Layer

This commit is contained in:
2021-09-09 01:49:35 +02:00
parent 73ae6df075
commit c07cf85ce5
5 changed files with 296 additions and 0 deletions
@@ -0,0 +1,52 @@
package com.ericampire.android.androidstudycase.data.datasource.animator
import com.ericampire.android.androidstudycase.common.MainCoroutineExtension
import com.ericampire.android.androidstudycase.data.room.AnimatorDao
import com.ericampire.android.androidstudycase.util.PreviewData
import com.ericampire.android.androidstudycase.util.data
import io.mockk.*
import junit.framework.Assert.assertEquals
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.test.runBlockingTest
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith
@ExperimentalCoroutinesApi
@ExtendWith(MainCoroutineExtension::class)
class LocalAnimatorDataSourceTest {
// SUT
private lateinit var dataSource: LocalAnimatorDataSource
private val animatorDao = mockk<AnimatorDao>(relaxed = true)
@BeforeEach
fun setup() {
dataSource = LocalAnimatorDataSource(animatorDao)
}
@Test
fun findAllAnimators() = runBlockingTest {
every { animatorDao.findAll() } returns flowOf(PreviewData.Animator.data)
dataSource.findAll().collect {
assertEquals(it.data, PreviewData.Animator.data)
}
verify(exactly = 1) {
animatorDao.findAll()
}
}
@Test
fun saveAnimator() = runBlockingTest {
coEvery { animatorDao.save(PreviewData.Animator.data.first()) } just Runs
dataSource.save(PreviewData.Animator.data.first())
coVerify {
animatorDao.save(eq(PreviewData.Animator.data.first()))
}
}
}
@@ -0,0 +1,58 @@
package com.ericampire.android.androidstudycase.data.datasource.animator
import com.ericampire.android.androidstudycase.common.MainCoroutineExtension
import com.ericampire.android.androidstudycase.domain.entity.AnimatorApiResponse
import com.ericampire.android.androidstudycase.util.ApiUrl
import com.ericampire.android.androidstudycase.util.PreviewData
import io.ktor.client.*
import io.ktor.client.engine.*
import io.ktor.client.engine.mock.*
import io.ktor.client.request.*
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.runBlockingTest
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Disabled
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows
import org.junit.jupiter.api.extension.ExtendWith
@ExperimentalCoroutinesApi
@ExtendWith(MainCoroutineExtension::class)
class RemoveAnimatorDataSourceTest(
) {
// SUT
private lateinit var dataSource: RemoteAnimatorDataSource
// DOC's
private lateinit var client: HttpClient
@BeforeEach
fun setup() {
val engine = MockEngine.config {
addHandler { respondOk("first") }
}
client = HttpClient(engine)
dataSource = RemoteAnimatorDataSource(client)
}
@Test
fun saveAnimator() = runBlockingTest {
assertThrows<NotImplementedError> {
dataSource.save(PreviewData.Animator.data.first())
}
}
@Test
@Disabled
fun findAnimator() = runBlockingTest {
runBlocking {
val data = client.get<AnimatorApiResponse>(ApiUrl.Animator.featured)
}
//assertEquals(data, "first")
}
}
@@ -0,0 +1,53 @@
package com.ericampire.android.androidstudycase.data.datasource.blog
import com.ericampire.android.androidstudycase.common.MainCoroutineExtension
import com.ericampire.android.androidstudycase.data.room.BlogDao
import com.ericampire.android.androidstudycase.util.PreviewData
import com.ericampire.android.androidstudycase.util.data
import io.mockk.*
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.test.runBlockingTest
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith
@ExperimentalCoroutinesApi
@ExtendWith(MainCoroutineExtension::class)
class LocalBlogDataSourceTest {
// SUT
private lateinit var dataSource: BlogDataSource
// DOC's
private val blogDao = mockk<BlogDao>(relaxed = true)
@BeforeEach
fun setup() {
dataSource = LocalBlogDataSource(blogDao)
}
@Test
fun findAllStories() = runBlockingTest {
every { blogDao.findAll() } returns flowOf(PreviewData.Blog.data)
dataSource.findAll().collect {
Assertions.assertEquals(it.data, PreviewData.Blog.data)
}
verify(exactly = 1) {
blogDao.findAll()
}
}
@Test
fun saveBlog() = runBlockingTest {
coEvery { blogDao.save(PreviewData.Blog.data.first()) } just Runs
dataSource.save(PreviewData.Blog.data.first())
coVerify {
blogDao.save(eq(PreviewData.Blog.data.first()))
}
}
}
@@ -0,0 +1,80 @@
package com.ericampire.android.androidstudycase.data.datasource.lottiefile
import com.ericampire.android.androidstudycase.common.MainCoroutineExtension
import com.ericampire.android.androidstudycase.data.datasource.lottiefiles.LocalLottieFileDataSource
import com.ericampire.android.androidstudycase.data.datasource.lottiefiles.LottieFileDataSource
import com.ericampire.android.androidstudycase.data.room.LottieFilesDao
import com.ericampire.android.androidstudycase.util.PreviewData
import com.ericampire.android.androidstudycase.util.data
import io.mockk.*
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.test.runBlockingTest
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith
@ExperimentalCoroutinesApi
@ExtendWith(MainCoroutineExtension::class)
class LocalLottiefileDataSourceTest {
// SUT
private lateinit var dataSource: LottieFileDataSource
// DOC's
private val filesDao = mockk<LottieFilesDao>(relaxed = true)
@BeforeEach
fun setup() {
dataSource = LocalLottieFileDataSource(filesDao)
}
@Test
fun findFeatured() = runBlockingTest {
every { filesDao.findByType(eq("featured")) } returns flowOf(PreviewData.Lottiefile.data)
dataSource.findFeatured().collect {
Assertions.assertEquals(it.data, PreviewData.Lottiefile.data)
}
verify(exactly = 1) {
filesDao.findByType(eq("featured"))
}
}
@Test
fun findRecent() = runBlockingTest {
every { filesDao.findByType(eq("recent")) } returns flowOf(PreviewData.Lottiefile.data)
dataSource.findRecent().collect {
Assertions.assertEquals(it.data, PreviewData.Lottiefile.data)
}
verify(exactly = 1) {
filesDao.findByType(eq("recent"))
}
}
@Test
fun findPopular() = runBlockingTest {
every { filesDao.findByType(eq("popular")) } returns flowOf(PreviewData.Lottiefile.data)
dataSource.findPopular().collect {
Assertions.assertEquals(it.data, PreviewData.Lottiefile.data)
}
verify(exactly = 1) {
filesDao.findByType(eq("popular"))
}
}
@Test
fun saveUser() = runBlockingTest {
coEvery { filesDao.save(PreviewData.Lottiefile.data.first()) } just Runs
dataSource.save(PreviewData.Lottiefile.data.first())
coVerify {
filesDao.save(eq(PreviewData.Lottiefile.data.first()))
}
}
}
@@ -0,0 +1,53 @@
package com.ericampire.android.androidstudycase.data.datasource.user
import com.ericampire.android.androidstudycase.common.MainCoroutineExtension
import com.ericampire.android.androidstudycase.data.room.UserDao
import com.ericampire.android.androidstudycase.util.PreviewData
import com.ericampire.android.androidstudycase.util.data
import io.mockk.*
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.test.runBlockingTest
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith
@ExperimentalCoroutinesApi
@ExtendWith(MainCoroutineExtension::class)
class LocalUserDataSourceTest {
// SUT
private lateinit var dataSource: UserDataSource
// DOC's
private val userDao = mockk<UserDao>(relaxed = true)
@BeforeEach
fun setup() {
dataSource = LocalUserDataSource(userDao)
}
@Test
fun findAllUsers() = runBlockingTest {
every { userDao.findAll() } returns flowOf(PreviewData.User.data)
dataSource.findAll().collect {
Assertions.assertEquals(it.data, PreviewData.User.data)
}
verify(exactly = 1) {
userDao.findAll()
}
}
@Test
fun saveUser() = runBlockingTest {
coEvery { userDao.save(PreviewData.User.data.first()) } just Runs
dataSource.save(PreviewData.User.data.first())
coVerify {
userDao.save(eq(PreviewData.User.data.first()))
}
}
}