From c07cf85ce50b09e2327c9e4ded389f8c98ef4d2a Mon Sep 17 00:00:00 2001 From: Eric Ampire Date: Thu, 9 Sep 2021 01:49:35 +0200 Subject: [PATCH] Testing Data Layer --- .../animator/LocalAnimatorDataSourceTest.kt | 52 ++++++++++++ .../animator/RemoveAnimatorDataSourceTest.kt | 58 ++++++++++++++ .../blog/LocalBlogDataSourceTest.kt | 53 ++++++++++++ .../LocalLottiefileDataSourceTest.kt | 80 +++++++++++++++++++ .../user/LocalUserDataSourceTest.kt | 53 ++++++++++++ 5 files changed, 296 insertions(+) create mode 100644 app/src/test/java/com/ericampire/android/androidstudycase/data/datasource/animator/LocalAnimatorDataSourceTest.kt create mode 100644 app/src/test/java/com/ericampire/android/androidstudycase/data/datasource/animator/RemoveAnimatorDataSourceTest.kt create mode 100644 app/src/test/java/com/ericampire/android/androidstudycase/data/datasource/blog/LocalBlogDataSourceTest.kt create mode 100644 app/src/test/java/com/ericampire/android/androidstudycase/data/datasource/lottiefile/LocalLottiefileDataSourceTest.kt create mode 100644 app/src/test/java/com/ericampire/android/androidstudycase/data/datasource/user/LocalUserDataSourceTest.kt diff --git a/app/src/test/java/com/ericampire/android/androidstudycase/data/datasource/animator/LocalAnimatorDataSourceTest.kt b/app/src/test/java/com/ericampire/android/androidstudycase/data/datasource/animator/LocalAnimatorDataSourceTest.kt new file mode 100644 index 0000000..ffa1e40 --- /dev/null +++ b/app/src/test/java/com/ericampire/android/androidstudycase/data/datasource/animator/LocalAnimatorDataSourceTest.kt @@ -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(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())) + } + } +} \ No newline at end of file diff --git a/app/src/test/java/com/ericampire/android/androidstudycase/data/datasource/animator/RemoveAnimatorDataSourceTest.kt b/app/src/test/java/com/ericampire/android/androidstudycase/data/datasource/animator/RemoveAnimatorDataSourceTest.kt new file mode 100644 index 0000000..b904256 --- /dev/null +++ b/app/src/test/java/com/ericampire/android/androidstudycase/data/datasource/animator/RemoveAnimatorDataSourceTest.kt @@ -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 { + dataSource.save(PreviewData.Animator.data.first()) + } + } + + @Test + @Disabled + fun findAnimator() = runBlockingTest { + runBlocking { + val data = client.get(ApiUrl.Animator.featured) + } + + + //assertEquals(data, "first") + } +} \ No newline at end of file diff --git a/app/src/test/java/com/ericampire/android/androidstudycase/data/datasource/blog/LocalBlogDataSourceTest.kt b/app/src/test/java/com/ericampire/android/androidstudycase/data/datasource/blog/LocalBlogDataSourceTest.kt new file mode 100644 index 0000000..4d2150e --- /dev/null +++ b/app/src/test/java/com/ericampire/android/androidstudycase/data/datasource/blog/LocalBlogDataSourceTest.kt @@ -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(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())) + } + } +} \ No newline at end of file diff --git a/app/src/test/java/com/ericampire/android/androidstudycase/data/datasource/lottiefile/LocalLottiefileDataSourceTest.kt b/app/src/test/java/com/ericampire/android/androidstudycase/data/datasource/lottiefile/LocalLottiefileDataSourceTest.kt new file mode 100644 index 0000000..4f69b21 --- /dev/null +++ b/app/src/test/java/com/ericampire/android/androidstudycase/data/datasource/lottiefile/LocalLottiefileDataSourceTest.kt @@ -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(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())) + } + } +} \ No newline at end of file diff --git a/app/src/test/java/com/ericampire/android/androidstudycase/data/datasource/user/LocalUserDataSourceTest.kt b/app/src/test/java/com/ericampire/android/androidstudycase/data/datasource/user/LocalUserDataSourceTest.kt new file mode 100644 index 0000000..31dc218 --- /dev/null +++ b/app/src/test/java/com/ericampire/android/androidstudycase/data/datasource/user/LocalUserDataSourceTest.kt @@ -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(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())) + } + } +} \ No newline at end of file