Testing Dao
This commit is contained in:
-24
@@ -1,24 +0,0 @@
|
||||
package com.ericampire.android.androidstudycase
|
||||
|
||||
import androidx.test.platform.app.InstrumentationRegistry
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
import org.junit.Assert.*
|
||||
|
||||
/**
|
||||
* Instrumented test, which will execute on an Android device.
|
||||
*
|
||||
* See [testing documentation](http://d.android.com/tools/testing).
|
||||
*/
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class ExampleInstrumentedTest {
|
||||
@Test
|
||||
fun useAppContext() {
|
||||
// Context of the app under test.
|
||||
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
|
||||
assertEquals("com.ericampire.android.androidstudycase", appContext.packageName)
|
||||
}
|
||||
}
|
||||
+11
-16
@@ -1,20 +1,17 @@
|
||||
package com.ericampire.android.androidstudycase.presentation
|
||||
|
||||
import androidx.compose.material.ExperimentalMaterialApi
|
||||
import androidx.compose.ui.test.assertIsSelected
|
||||
import androidx.compose.ui.test.junit4.createAndroidComposeRule
|
||||
import androidx.compose.ui.test.onNodeWithText
|
||||
import androidx.compose.ui.test.performClick
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
import com.ericampire.android.androidstudycase.MainActivity
|
||||
import com.ericampire.android.androidstudycase.presentation.screen.explore.business.ExploreAction
|
||||
import com.ericampire.android.androidstudycase.presentation.screen.explore.business.ExploreViewModel
|
||||
import com.ericampire.android.androidstudycase.presentation.screen.explore.ui.ExploreScreen
|
||||
import com.ericampire.android.androidstudycase.util.PreviewData
|
||||
import com.google.accompanist.pager.ExperimentalPagerApi
|
||||
import org.junit.Ignore
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.mockito.kotlin.any
|
||||
import org.mockito.kotlin.doReturn
|
||||
import org.mockito.kotlin.mock
|
||||
import org.mockito.kotlin.verify
|
||||
|
||||
@ExperimentalMaterialApi
|
||||
@ExperimentalPagerApi
|
||||
@@ -24,17 +21,15 @@ class ExploreScreenTest {
|
||||
val composeTestRule = createAndroidComposeRule<MainActivity>()
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
fun whenSubmitActionShouldReturnData() {
|
||||
val exploreViewModel = mock<ExploreViewModel> {
|
||||
on { submitAction(ExploreAction.FindPopularFile) }
|
||||
doReturn(PreviewData.Lottiefile.data)
|
||||
}
|
||||
|
||||
composeTestRule.setContent {
|
||||
ExploreScreen(
|
||||
navController = rememberNavController(),
|
||||
viewModel = exploreViewModel
|
||||
)
|
||||
ExploreScreen(navController = rememberNavController())
|
||||
}
|
||||
verify(exploreViewModel).submitAction(any())
|
||||
|
||||
composeTestRule.onNodeWithText("Recent").performClick().assertIsSelected()
|
||||
composeTestRule.onNodeWithText("Featured").performClick().assertIsSelected()
|
||||
composeTestRule.onNodeWithText("Popular").performClick().assertIsSelected()
|
||||
}
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
package com.ericampire.android.androidstudycase.room
|
||||
|
||||
import app.cash.turbine.test
|
||||
import com.ericampire.android.androidstudycase.data.room.LottieFilesDao
|
||||
import com.ericampire.android.androidstudycase.room.common.DatabaseTest
|
||||
import com.ericampire.android.androidstudycase.util.PreviewData
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.junit.jupiter.api.Assertions
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
import org.junit.jupiter.api.Test
|
||||
import kotlin.time.ExperimentalTime
|
||||
|
||||
@ExperimentalTime
|
||||
class AnimationDoaTest : DatabaseTest() {
|
||||
|
||||
private lateinit var animationDao: LottieFilesDao
|
||||
|
||||
@BeforeEach
|
||||
fun setup() {
|
||||
animationDao = db.lottieFileDao
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
fun saveAnimation() = runBlocking {
|
||||
val animation = PreviewData.Lottiefile.data.first().copy(type = "recent")
|
||||
animationDao.save(animation)
|
||||
animationDao.findByType("recent").test {
|
||||
Assertions.assertEquals(awaitItem().first(), animation)
|
||||
}
|
||||
}
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
package com.ericampire.android.androidstudycase.room
|
||||
|
||||
import app.cash.turbine.test
|
||||
import com.ericampire.android.androidstudycase.data.room.AnimatorDao
|
||||
import com.ericampire.android.androidstudycase.room.common.DatabaseTest
|
||||
import com.ericampire.android.androidstudycase.util.PreviewData
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.junit.jupiter.api.Assertions
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
import org.junit.jupiter.api.Test
|
||||
import kotlin.time.ExperimentalTime
|
||||
|
||||
@ExperimentalTime
|
||||
class AnimatorDoaTest : DatabaseTest() {
|
||||
|
||||
private lateinit var animatorDao: AnimatorDao
|
||||
|
||||
@BeforeEach
|
||||
fun setup() {
|
||||
animatorDao = db.animatorDao
|
||||
}
|
||||
|
||||
@Test
|
||||
fun saveAnimator() = runBlocking {
|
||||
val testData = PreviewData.Animator.data.first().copy(id = 1)
|
||||
animatorDao.save(testData)
|
||||
animatorDao.findAll().test {
|
||||
Assertions.assertEquals(awaitItem().first(), testData)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.ericampire.android.androidstudycase.room
|
||||
|
||||
import app.cash.turbine.test
|
||||
import com.ericampire.android.androidstudycase.data.room.BlogDao
|
||||
import com.ericampire.android.androidstudycase.room.common.DatabaseTest
|
||||
import com.ericampire.android.androidstudycase.util.PreviewData
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.junit.jupiter.api.Assertions
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
import org.junit.jupiter.api.Test
|
||||
import kotlin.time.ExperimentalTime
|
||||
|
||||
|
||||
@ExperimentalTime
|
||||
class BlogDoaTest : DatabaseTest() {
|
||||
|
||||
private lateinit var blogDoa: BlogDao
|
||||
|
||||
@BeforeEach
|
||||
fun setup() {
|
||||
blogDoa = db.blogDao
|
||||
}
|
||||
|
||||
@Test
|
||||
fun saveBlog() = runBlocking {
|
||||
blogDoa.save(PreviewData.Blog.data.first())
|
||||
blogDoa.findAll().test {
|
||||
Assertions.assertEquals(awaitItem().first(), PreviewData.Blog.data.first())
|
||||
}
|
||||
}
|
||||
}
|
||||
+10
-43
@@ -1,64 +1,31 @@
|
||||
package com.ericampire.android.androidstudycase.room
|
||||
|
||||
import android.content.Context
|
||||
import androidx.room.Room
|
||||
import androidx.test.core.app.ApplicationProvider
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import app.cash.turbine.test
|
||||
import com.ericampire.android.androidstudycase.app.room.AppDatabase
|
||||
import com.ericampire.android.androidstudycase.data.room.UserDao
|
||||
import com.ericampire.android.androidstudycase.room.common.DatabaseTest
|
||||
import com.ericampire.android.androidstudycase.util.PreviewData
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import kotlinx.coroutines.test.*
|
||||
import org.hamcrest.CoreMatchers.equalTo
|
||||
import org.hamcrest.MatcherAssert.assertThat
|
||||
import org.junit.After
|
||||
import org.junit.Before
|
||||
import org.junit.Ignore
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import java.io.IOException
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.junit.jupiter.api.Assertions.assertEquals
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
import org.junit.jupiter.api.Test
|
||||
import kotlin.time.ExperimentalTime
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
@ExperimentalCoroutinesApi
|
||||
@ExperimentalTime
|
||||
class UserDaoTest {
|
||||
|
||||
private val testDispatcher = TestCoroutineDispatcher()
|
||||
private val testScope = TestCoroutineScope(testDispatcher)
|
||||
class UserDoaTest : DatabaseTest() {
|
||||
|
||||
private lateinit var userDao: UserDao
|
||||
private lateinit var db: AppDatabase
|
||||
|
||||
@Before
|
||||
fun setupDispatcher() {
|
||||
Dispatchers.setMain(testDispatcher)
|
||||
}
|
||||
|
||||
|
||||
@Before
|
||||
fun createDb() {
|
||||
val context = ApplicationProvider.getApplicationContext<Context>()
|
||||
db = Room.inMemoryDatabaseBuilder(context, AppDatabase::class.java).build()
|
||||
@BeforeEach
|
||||
fun setup() {
|
||||
userDao = db.userDao
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
fun saveUser() = testScope.runBlockingTest {
|
||||
fun saveUser() = runBlocking(Dispatchers.IO) {
|
||||
userDao.save(PreviewData.User.data.first())
|
||||
userDao.findAll().test {
|
||||
assertThat(awaitItem(), equalTo(PreviewData.User.data.first()))
|
||||
assertEquals(awaitItem().first(), PreviewData.User.data.first())
|
||||
}
|
||||
}
|
||||
|
||||
@After
|
||||
@Throws(IOException::class)
|
||||
fun teardown() {
|
||||
db.close()
|
||||
Dispatchers.resetMain()
|
||||
testDispatcher.cleanupTestCoroutines()
|
||||
}
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
package com.ericampire.android.androidstudycase.room.common
|
||||
|
||||
import androidx.room.Room
|
||||
import androidx.test.core.app.ApplicationProvider.getApplicationContext
|
||||
import com.ericampire.android.androidstudycase.app.room.AppDatabase
|
||||
import org.junit.jupiter.api.AfterEach
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
|
||||
|
||||
abstract class DatabaseTest {
|
||||
lateinit var db: AppDatabase
|
||||
|
||||
@BeforeEach
|
||||
fun initDB() {
|
||||
db = Room.inMemoryDatabaseBuilder(getApplicationContext(), AppDatabase::class.java)
|
||||
.allowMainThreadQueries()
|
||||
.build()
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
fun closeDB() {
|
||||
db.close()
|
||||
}
|
||||
}
|
||||
@@ -15,21 +15,25 @@ object PreviewData {
|
||||
object Blog {
|
||||
val data = listOf(
|
||||
Blog(
|
||||
id = 1,
|
||||
postedAt = "2021-07-08T00:00:00.000Z",
|
||||
imageUrl = "https://d3jl769oy69y7b.cloudfront.net/2021/07/Blog-Visual---The-Key-to-An-Immersive-UX_-Animation.png",
|
||||
title = "The Key to An Immersive UX: Animation"
|
||||
),
|
||||
Blog(
|
||||
id = 2,
|
||||
title = "LottieFiles Animations are accessible across 25,000+ everyday tools with the embed feature",
|
||||
postedAt = "2021-06-18T00:00:00.000Z",
|
||||
imageUrl = "https://d3jl769oy69y7b.cloudfront.net/2021/06/Embed-Blog-OG.png"
|
||||
),
|
||||
Blog(
|
||||
id = 3,
|
||||
postedAt = "2021-07-08T00:00:00.000Z",
|
||||
imageUrl = "https://d3jl769oy69y7b.cloudfront.net/2021/07/Blog-Visual---The-Key-to-An-Immersive-UX_-Animation.png",
|
||||
title = "The Key to An Immersive UX: Animation"
|
||||
),
|
||||
Blog(
|
||||
id = 4,
|
||||
title = "LottieFiles Animations are accessible across 25,000+ everyday tools with the embed feature",
|
||||
postedAt = "2021-06-18T00:00:00.000Z",
|
||||
imageUrl = "https://d3jl769oy69y7b.cloudfront.net/2021/06/Embed-Blog-OG.png"
|
||||
|
||||
Reference in New Issue
Block a user