mirror of https://github.com/tasks/tasks
Initial OpenTasksSynchronizer tests
parent
47e30b89ba
commit
0900112f08
@ -0,0 +1,87 @@
|
||||
package org.tasks.opentasks
|
||||
|
||||
import dagger.hilt.android.testing.HiltAndroidTest
|
||||
import dagger.hilt.android.testing.UninstallModules
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Assert.assertTrue
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.tasks.R
|
||||
import org.tasks.data.CaldavAccount
|
||||
import org.tasks.data.CaldavAccount.Companion.TYPE_OPENTASKS
|
||||
import org.tasks.data.CaldavDao
|
||||
import org.tasks.injection.InjectingTestCase
|
||||
import org.tasks.injection.ProductionModule
|
||||
import org.tasks.preferences.Preferences
|
||||
import javax.inject.Inject
|
||||
|
||||
@UninstallModules(ProductionModule::class)
|
||||
@HiltAndroidTest
|
||||
class OpenTasksSynchronizerTest : InjectingTestCase() {
|
||||
@Inject lateinit var openTaskDao: TestOpenTaskDao
|
||||
@Inject lateinit var caldavDao: CaldavDao
|
||||
@Inject lateinit var synchronizer: OpenTasksSynchronizer
|
||||
@Inject lateinit var preferences: Preferences
|
||||
|
||||
@Before
|
||||
override fun setUp() {
|
||||
super.setUp()
|
||||
|
||||
openTaskDao.reset()
|
||||
preferences.setBoolean(R.string.p_debug_pro, true)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun createNewAccounts() = runBlocking {
|
||||
openTaskDao.insertList()
|
||||
|
||||
synchronizer.sync()
|
||||
|
||||
val accounts = caldavDao.getAccounts()
|
||||
assertEquals(1, accounts.size)
|
||||
with(accounts[0]) {
|
||||
assertEquals("bitfire.at.davdroid:test_account", uuid)
|
||||
assertEquals("test_account", name)
|
||||
assertEquals(TYPE_OPENTASKS, accountType)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun cantSyncWithoutPro() = runBlocking {
|
||||
preferences.setBoolean(R.string.p_debug_pro, false)
|
||||
openTaskDao.insertList()
|
||||
|
||||
synchronizer.sync()
|
||||
|
||||
assertEquals(
|
||||
context.getString(R.string.requires_pro_subscription),
|
||||
caldavDao.getAccounts()[0].error
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun deleteRemovedAccounts() = runBlocking {
|
||||
caldavDao.insert(CaldavAccount().apply {
|
||||
uuid = "bitfire.at.davdroid:test_account"
|
||||
accountType = TYPE_OPENTASKS
|
||||
})
|
||||
|
||||
synchronizer.sync()
|
||||
|
||||
assertTrue(caldavDao.getAccounts().isEmpty())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun createNewLists() = runBlocking {
|
||||
openTaskDao.insertList()
|
||||
|
||||
synchronizer.sync()
|
||||
|
||||
val lists = caldavDao.getCalendarsByAccount("bitfire.at.davdroid:test_account")
|
||||
assertEquals(1, lists.size)
|
||||
with(lists[0]) {
|
||||
assertEquals(name, "default_list")
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,77 @@
|
||||
package org.tasks.opentasks
|
||||
|
||||
import android.content.ContentProviderResult
|
||||
import android.content.Context
|
||||
import at.bitfire.ical4android.BatchOperation
|
||||
import com.todoroo.astrid.helper.UUIDHelper
|
||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||
import org.dmfs.tasks.contract.TaskContract
|
||||
import org.tasks.TestUtilities
|
||||
import org.tasks.data.CaldavCalendar
|
||||
import org.tasks.data.CaldavDao
|
||||
import org.tasks.data.MyAndroidTask
|
||||
import org.tasks.data.OpenTaskDao
|
||||
import javax.inject.Inject
|
||||
|
||||
class TestOpenTaskDao @Inject constructor(
|
||||
@ApplicationContext context: Context,
|
||||
private val caldavDao: CaldavDao
|
||||
) : OpenTaskDao(context, caldavDao) {
|
||||
suspend fun insertList(
|
||||
name: String = DEFAULT_LIST,
|
||||
type: String = DEFAULT_TYPE,
|
||||
account: String = DEFAULT_ACCOUNT
|
||||
): Pair<String, CaldavCalendar> {
|
||||
val url = UUIDHelper.newUUID()
|
||||
val uri = taskLists.buildUpon()
|
||||
.appendQueryParameter(TaskContract.CALLER_IS_SYNCADAPTER, "true")
|
||||
.appendQueryParameter(TaskContract.TaskLists.ACCOUNT_NAME, account)
|
||||
.appendQueryParameter(TaskContract.TaskLists.ACCOUNT_TYPE, type)
|
||||
.build()
|
||||
val result = applyOperation(
|
||||
BatchOperation.CpoBuilder.newInsert(uri)
|
||||
.withValue(TaskContract.CommonSyncColumns._SYNC_ID, url)
|
||||
.withValue(TaskContract.TaskListColumns.LIST_NAME, name)
|
||||
.withValue(TaskContract.TaskLists.SYNC_ENABLED, "1")
|
||||
)
|
||||
return Pair(result.uri!!.lastPathSegment!!, CaldavCalendar().apply {
|
||||
uuid = UUIDHelper.newUUID()
|
||||
this.account = "$type:$account"
|
||||
this.url = url
|
||||
caldavDao.insert(this)
|
||||
})
|
||||
}
|
||||
|
||||
fun insertTask(listId: String, vtodo: String) {
|
||||
applyOperation(
|
||||
MyAndroidTask(TestUtilities.fromString(vtodo))
|
||||
.toBuilder(tasks, true)
|
||||
.withValue(TaskContract.TaskColumns.LIST_ID, listId)
|
||||
)
|
||||
}
|
||||
|
||||
fun reset(
|
||||
type: String = DEFAULT_TYPE,
|
||||
account: String = DEFAULT_ACCOUNT
|
||||
) {
|
||||
cr.delete(
|
||||
taskLists.buildUpon()
|
||||
.appendQueryParameter(TaskContract.CALLER_IS_SYNCADAPTER, "true")
|
||||
.appendQueryParameter(TaskContract.TaskLists.ACCOUNT_NAME, account)
|
||||
.appendQueryParameter(TaskContract.TaskLists.ACCOUNT_TYPE, type)
|
||||
.build(),
|
||||
null,
|
||||
null
|
||||
)
|
||||
cr.delete(tasks, null, null)
|
||||
}
|
||||
|
||||
private fun applyOperation(build: BatchOperation.CpoBuilder): ContentProviderResult =
|
||||
cr.applyBatch(authority, arrayListOf(build.build()))[0]
|
||||
|
||||
companion object {
|
||||
const val DEFAULT_ACCOUNT = "test_account"
|
||||
const val DEFAULT_TYPE = ACCOUNT_TYPE_DAVx5
|
||||
const val DEFAULT_LIST = "default_list"
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue