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() 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]) } } @Test fun replaceOnConflict() { val board0 = Board("id", "title0") val board1 = Board("id", "title1") runBlocking { dao.insert(board0) dao.insert(board1) } dao.getAllBoard().observeOnce { assertEquals(1, it.size) assertEquals("title1", it[0].title) } } @Test fun getInAscendingOrder() { val board0 = Board("id0", "title0") val board1 = Board("id1", "title1") runBlocking { dao.insert(board1) dao.insert(board0) } dao.getAllBoard().observeOnce { assertEquals(2, it.size) assertEquals(board0, it[0]) assertEquals(board1, it[1]) } } @Test fun delete() { val board = Board("id", "title") runBlocking { dao.insert(board) dao.delete(board) } dao.getAllBoard().observeOnce { assertEquals(0, it.size) } } }