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