Testing Data Layer
This commit is contained in:
+52
@@ -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()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+58
@@ -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")
|
||||||
|
}
|
||||||
|
}
|
||||||
+53
@@ -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()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+80
@@ -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()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+53
@@ -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()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user