add database testing

This commit is contained in:
Raffaele Mignone 2019-12-01 16:24:44 +01:00
parent 8e9e001c4b
commit 90e31fbf16
Signed by: norangebit
GPG Key ID: F5255658CB220573
2 changed files with 125 additions and 0 deletions

View File

@ -0,0 +1,22 @@
package it.unisannio.ding.ids.wedroid.app
import androidx.lifecycle.*
class OneTimeObserver<T>(private val handler: (T) -> Unit) : Observer<T>, LifecycleOwner {
private val lifecycle = LifecycleRegistry(this)
init {
lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_RESUME)
}
override fun getLifecycle(): Lifecycle = lifecycle
override fun onChanged(t: T) {
handler(t)
lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY)
}
}
fun <T> LiveData<T>.observeOnce(onChangeHandler: (T) -> Unit) {
val observer = OneTimeObserver(handler = onChangeHandler)
observe(observer, observer)
}

View File

@ -0,0 +1,103 @@
package it.unisannio.ding.ids.wedroid.app.data.dao
import android.content.Context
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import androidx.room.Room
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import it.unisannio.ding.ids.wedroid.app.data.database.BoardDatabase
import it.unisannio.ding.ids.wedroid.app.data.entity.Board
import it.unisannio.ding.ids.wedroid.app.observeOnce
import junit.framework.TestCase.assertEquals
import kotlinx.coroutines.runBlocking
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import java.io.IOException
@RunWith(AndroidJUnit4::class)
class BoardDaoTest {
private lateinit var dao: BoardDao
private lateinit var db: BoardDatabase
@get:Rule
val instantTaskExecutorRule = InstantTaskExecutorRule()
@Before
fun createDb() {
val context = ApplicationProvider.getApplicationContext<Context>()
db = Room.inMemoryDatabaseBuilder(
context, BoardDatabase::class.java
).build()
dao = db.boardDao()
}
@After
@Throws(IOException::class)
fun closeDb() {
db.close()
}
@Test
fun emptyDatabaseOnCreation() {
dao.getAllBoard().observeOnce {
assertEquals(0, it.size)
}
}
@Test
fun insert() {
val board = Board("id", "title")
runBlocking {
dao.insert(board)
}
dao.getAllBoard().observeOnce {
assertEquals(1, it.size)
assertEquals(board, it[0])
}
}
fun getInAscendingOrder() {
val board0 = Board("id0", "title0")
val board1 = Board("id1", "title1")
runBlocking {
dao.insert(board1)
}
runBlocking {
dao.insert(board0)
}
dao.getAllBoard().observeOnce {
assertEquals(2, it.size)
assertEquals(board0, it[0])
assertEquals(board1, it[1])
}
}
fun delete() {
val board = Board("id", "title")
runBlocking {
dao.insert(board)
}
runBlocking {
dao.delete(board)
}
dao.getAllBoard().observeOnce {
assertEquals(0, it.size)
}
}
}