This commit is contained in:
parent
47fa49aa07
commit
1273e080ac
@ -71,6 +71,7 @@ dependencies {
|
|||||||
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
|
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
|
||||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
|
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
|
||||||
androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.2.0'
|
androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.2.0'
|
||||||
|
androidTestImplementation 'androidx.test.espresso:espresso-intents:3.2.0'
|
||||||
androidTestImplementation 'androidx.test:runner:1.2.0'
|
androidTestImplementation 'androidx.test:runner:1.2.0'
|
||||||
androidTestImplementation 'androidx.test:rules:1.2.0'
|
androidTestImplementation 'androidx.test:rules:1.2.0'
|
||||||
|
|
||||||
|
@ -0,0 +1,111 @@
|
|||||||
|
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.WListDatabase
|
||||||
|
import it.unisannio.ding.ids.wedroid.app.data.entity.WList
|
||||||
|
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 WListDaoTest {
|
||||||
|
private lateinit var dao: WListDao
|
||||||
|
private lateinit var db: WListDatabase
|
||||||
|
|
||||||
|
@get:Rule
|
||||||
|
val instantTaskExecutorRule = InstantTaskExecutorRule()
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun createDb() {
|
||||||
|
val context = ApplicationProvider.getApplicationContext<Context>()
|
||||||
|
db = Room.inMemoryDatabaseBuilder(
|
||||||
|
context, WListDatabase::class.java
|
||||||
|
).build()
|
||||||
|
dao = db.wListDao()
|
||||||
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
@Throws(IOException::class)
|
||||||
|
fun closeDb() {
|
||||||
|
db.close()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun emptyDatabaseOnCreation() {
|
||||||
|
dao.allWList.observeOnce {
|
||||||
|
assertEquals(0, it.size)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun insert() {
|
||||||
|
val wList = WList("id", "title")
|
||||||
|
|
||||||
|
runBlocking {
|
||||||
|
dao.insert(wList)
|
||||||
|
}
|
||||||
|
|
||||||
|
dao.allWList.observeOnce {
|
||||||
|
assertEquals(1, it.size)
|
||||||
|
assertEquals(wList, it[0])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun replaceOnConflict() {
|
||||||
|
val wList0 = WList("id", "title0")
|
||||||
|
val wList1 = WList("id", "title1")
|
||||||
|
|
||||||
|
runBlocking {
|
||||||
|
dao.insert(wList0)
|
||||||
|
dao.insert(wList1)
|
||||||
|
}
|
||||||
|
|
||||||
|
dao.allWList.observeOnce {
|
||||||
|
assertEquals(1, it.size)
|
||||||
|
assertEquals("title1", it[0].title)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun getInAscendingOrder() {
|
||||||
|
val wList0 = WList("id0", "title0")
|
||||||
|
val wList1 = WList("id1", "title1")
|
||||||
|
|
||||||
|
runBlocking {
|
||||||
|
dao.insert(wList1)
|
||||||
|
dao.insert(wList0)
|
||||||
|
}
|
||||||
|
|
||||||
|
dao.allWList.observeOnce {
|
||||||
|
assertEquals(2, it.size)
|
||||||
|
assertEquals(wList0, it[0])
|
||||||
|
assertEquals(wList1, it[1])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun delete() {
|
||||||
|
val wlist = WList("id", "title")
|
||||||
|
|
||||||
|
runBlocking {
|
||||||
|
dao.insert(wlist)
|
||||||
|
dao.delete(wlist)
|
||||||
|
}
|
||||||
|
|
||||||
|
dao.allWList.observeOnce {
|
||||||
|
assertEquals(0, it.size)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,203 @@
|
|||||||
|
package it.unisannio.ding.ids.wedroid.app.data.repository
|
||||||
|
|
||||||
|
import android.util.Log
|
||||||
|
import androidx.lifecycle.LiveData
|
||||||
|
import io.mockk.*
|
||||||
|
import it.unisannio.ding.ids.wedroid.app.data.dao.WListDao
|
||||||
|
import it.unisannio.ding.ids.wedroid.app.data.entity.WList
|
||||||
|
import it.unisannio.ding.ids.wedroid.app.getPrivateFun
|
||||||
|
import it.unisannio.ding.ids.wedroid.app.util.PreferenceReader
|
||||||
|
import it.unisannio.ding.ids.wedroid.wrapper.api.ListService
|
||||||
|
import junit.framework.TestCase
|
||||||
|
import kotlinx.coroutines.runBlocking
|
||||||
|
import okhttp3.mockwebserver.MockWebServer
|
||||||
|
import org.junit.After
|
||||||
|
import org.junit.Before
|
||||||
|
import org.junit.Test
|
||||||
|
import retrofit2.Response
|
||||||
|
import retrofit2.Retrofit
|
||||||
|
import retrofit2.converter.gson.GsonConverterFactory
|
||||||
|
import kotlin.reflect.full.callSuspend
|
||||||
|
|
||||||
|
class WListRepositoryTest {
|
||||||
|
private val reader = mockk<PreferenceReader>()
|
||||||
|
private val webServer = MockWebServer()
|
||||||
|
private lateinit var service: ListService
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun setUp() {
|
||||||
|
webServer.start()
|
||||||
|
service = Retrofit.Builder()
|
||||||
|
.baseUrl(webServer.url("/"))
|
||||||
|
.addConverterFactory(GsonConverterFactory.create())
|
||||||
|
.build()
|
||||||
|
.create(ListService::class.java)
|
||||||
|
|
||||||
|
mockkStatic(Log::class)
|
||||||
|
every { reader.boardId } returns "board id"
|
||||||
|
every { Log.e(any(), any()) } returns 0
|
||||||
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
fun teardown() {
|
||||||
|
webServer.close()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun addNewBoardsToDb() {
|
||||||
|
val dao = mockk<WListDao>()
|
||||||
|
var count = 0
|
||||||
|
|
||||||
|
coEvery {
|
||||||
|
dao.insert(any())
|
||||||
|
} answers {
|
||||||
|
count++
|
||||||
|
}
|
||||||
|
|
||||||
|
val addNewListToDb = getPrivateFun(
|
||||||
|
"addNewWListToDb", WListRepository::class
|
||||||
|
)
|
||||||
|
|
||||||
|
val repository = WListRepository(
|
||||||
|
dao, service, reader
|
||||||
|
)
|
||||||
|
|
||||||
|
val list0 = WList("id0", "title0")
|
||||||
|
val list1 = WList("id1", "title1")
|
||||||
|
val list2 = WList("id2", "title2")
|
||||||
|
|
||||||
|
runBlocking {
|
||||||
|
addNewListToDb?.callSuspend(
|
||||||
|
repository,
|
||||||
|
listOf(list0, list1, list2)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
coVerifyAll {
|
||||||
|
dao.insert(list0)
|
||||||
|
dao.insert(list1)
|
||||||
|
dao.insert(list2)
|
||||||
|
}
|
||||||
|
|
||||||
|
TestCase.assertEquals(3, count)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun deleteWListCallbackSuccess() {
|
||||||
|
val dao = mockk<WListDao>()
|
||||||
|
val response =
|
||||||
|
mockk<Response<Void>>()
|
||||||
|
|
||||||
|
every { response.isSuccessful } returns true
|
||||||
|
coEvery { dao.delete(any()) } answers {}
|
||||||
|
|
||||||
|
val deleteWList = getPrivateFun(
|
||||||
|
"deleteWListCallBack", WListRepository::class
|
||||||
|
)
|
||||||
|
|
||||||
|
val repository = WListRepository(
|
||||||
|
dao, service, reader
|
||||||
|
)
|
||||||
|
|
||||||
|
runBlocking {
|
||||||
|
deleteWList?.callSuspend(
|
||||||
|
repository,
|
||||||
|
response,
|
||||||
|
"id"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
coVerify { dao.delete(WList("id")) }
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun deleteWListCallbackError() {
|
||||||
|
val dao = mockk<WListDao>()
|
||||||
|
val response = mockk<Response<Void>>()
|
||||||
|
|
||||||
|
every { response.isSuccessful } returns false
|
||||||
|
every { response.code() } returns 400
|
||||||
|
every { response.message() } returns "Error"
|
||||||
|
|
||||||
|
val repository = WListRepository(dao, service, reader)
|
||||||
|
|
||||||
|
val deleteWList = getPrivateFun(
|
||||||
|
"deleteWListCallBack", WListRepository::class
|
||||||
|
)
|
||||||
|
|
||||||
|
runBlocking {
|
||||||
|
deleteWList?.callSuspend(
|
||||||
|
repository,
|
||||||
|
response,
|
||||||
|
"id"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
verify { Log.e("RETROFIT", "400 Error") }
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun deleteOldWListFromDb() {
|
||||||
|
val dao = mockk<WListDao>()
|
||||||
|
val dbWLists = mockk<LiveData<List<WList>>>()
|
||||||
|
|
||||||
|
val wList0 = WList("id0", "title0")
|
||||||
|
val wList1 = WList("id1", "title1")
|
||||||
|
val wList2 = WList("id2", "title2")
|
||||||
|
val wList3 = WList("id2", "title3")
|
||||||
|
|
||||||
|
every { dbWLists.value } returns listOf(
|
||||||
|
wList0, wList1, wList2, wList3
|
||||||
|
)
|
||||||
|
coEvery { dao.allWList } returns dbWLists
|
||||||
|
coEvery { dao.delete(any()) } answers {}
|
||||||
|
|
||||||
|
val removeOldWLists = getPrivateFun(
|
||||||
|
"removeOldWListsFromDb", WListRepository::class
|
||||||
|
)
|
||||||
|
|
||||||
|
val repository = WListRepository(
|
||||||
|
dao, service, reader
|
||||||
|
)
|
||||||
|
|
||||||
|
runBlocking {
|
||||||
|
removeOldWLists?.callSuspend(
|
||||||
|
repository,
|
||||||
|
listOf(
|
||||||
|
wList0, wList2, wList3
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
coVerify { dao.delete(wList1) }
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun synchronizeCallbackError() {
|
||||||
|
val dao = mockk<WListDao>()
|
||||||
|
|
||||||
|
val response =
|
||||||
|
mockk<Response<MutableList<it.unisannio.ding.ids.wedroid.wrapper.entity.WList>>>()
|
||||||
|
|
||||||
|
every { response.isSuccessful } returns false
|
||||||
|
every { response.code() } returns 400
|
||||||
|
every { response.message() } returns "Error"
|
||||||
|
|
||||||
|
val synchronize = getPrivateFun(
|
||||||
|
"synchronizeCallback", WListRepository::class
|
||||||
|
)
|
||||||
|
|
||||||
|
val repository = WListRepository(
|
||||||
|
dao, service, reader
|
||||||
|
)
|
||||||
|
|
||||||
|
runBlocking {
|
||||||
|
synchronize?.callSuspend(
|
||||||
|
repository,
|
||||||
|
response
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
verify { Log.e("RETROFIT", "400 Error") }
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user