Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ import android.content.ContentUris
import android.content.ContentValues
import android.database.DatabaseUtils
import android.net.Uri
import android.provider.CalendarContract
import androidx.core.content.contentValuesOf
import at.bitfire.ical4android.impl.TestTaskList
import at.bitfire.synctools.storage.LocalStorageException
import at.bitfire.synctools.storage.tasks.DmfsTaskList
import net.fortuna.ical4j.model.Date
import net.fortuna.ical4j.model.DateList
import net.fortuna.ical4j.model.DateTime
Expand All @@ -38,6 +38,7 @@ import net.fortuna.ical4j.model.property.RRule
import net.fortuna.ical4j.model.property.RelatedTo
import net.fortuna.ical4j.model.property.Status
import net.fortuna.ical4j.model.property.XProperty
import org.dmfs.tasks.contract.TaskContract
import org.dmfs.tasks.contract.TaskContract.Properties
import org.dmfs.tasks.contract.TaskContract.Property
import org.dmfs.tasks.contract.TaskContract.Property.Category
Expand All @@ -63,7 +64,7 @@ class DmfsTaskTest(
private val tzChicago = tzRegistry.getTimeZone("America/Chicago")!!
private val tzDefault = tzRegistry.getTimeZone(ZoneId.systemDefault().id)!!

private val testAccount = Account(javaClass.name, CalendarContract.ACCOUNT_TYPE_LOCAL)
private val testAccount = Account(javaClass.name, TaskContract.LOCAL_ACCOUNT_TYPE)

private lateinit var taskListUri: Uri
private var taskList: DmfsTaskList? = null
Expand Down Expand Up @@ -513,7 +514,7 @@ class DmfsTaskTest(
categories.addAll(arrayOf("Cat_1", "Cat 2"))
}.let { result ->
val id = result.getAsLong(Tasks._ID)
val uri = taskList!!.tasksPropertiesSyncUri()
val uri = taskList!!.tasksPropertiesUri()
provider.client.query(uri, arrayOf(Category.CATEGORY_NAME), "${Properties.MIMETYPE}=? AND ${PropertyColumns.TASK_ID}=?",
arrayOf(Category.CONTENT_ITEM_TYPE, id.toString()), null)!!.use { cursor ->
while (cursor.moveToNext())
Expand All @@ -534,7 +535,7 @@ class DmfsTaskTest(
comment = "Comment value"
}.let { result ->
val id = result.getAsLong(Tasks._ID)
val uri = taskList!!.tasksPropertiesSyncUri()
val uri = taskList!!.tasksPropertiesUri()
provider.client.query(uri, arrayOf(Property.Comment.COMMENT), "${Properties.MIMETYPE}=? AND ${PropertyColumns.TASK_ID}=?",
arrayOf(Property.Comment.CONTENT_ITEM_TYPE, id.toString()), null)!!.use { cursor ->
if (cursor.moveToNext())
Expand All @@ -551,7 +552,7 @@ class DmfsTaskTest(
comment = null
}.let { result ->
val id = result.getAsLong(Tasks._ID)
val uri = taskList!!.tasksPropertiesSyncUri()
val uri = taskList!!.tasksPropertiesUri()
provider.client.query(uri, arrayOf(Property.Comment.COMMENT), "${Properties.MIMETYPE}=? AND ${PropertyColumns.TASK_ID}=?",
arrayOf(Property.Comment.CONTENT_ITEM_TYPE, id.toString()), null)!!.use { cursor ->
hasComment = cursor.count > 0
Expand All @@ -561,7 +562,7 @@ class DmfsTaskTest(
}

private fun firstProperty(taskId: Long, mimeType: String): ContentValues? {
val uri = taskList!!.tasksPropertiesSyncUri()
val uri = taskList!!.tasksPropertiesUri()
provider.client.query(uri, null, "${Properties.MIMETYPE}=? AND ${PropertyColumns.TASK_ID}=?",
arrayOf(mimeType, taskId.toString()), null)!!.use { cursor ->
if (cursor.moveToNext()) {
Expand Down Expand Up @@ -691,7 +692,7 @@ class DmfsTaskTest(
assertNotNull("Couldn't add task", uri)

// read and parse event from calendar provider
val testTask = taskList!!.findById(ContentUris.parseId(uri))
val testTask = taskList!!.getTask(ContentUris.parseId(uri))
try {
assertNotNull("Inserted task is not here", testTask)
val task2 = testTask.task
Expand Down Expand Up @@ -734,7 +735,7 @@ class DmfsTaskTest(
task.alarms += VAlarm(java.time.Duration.ofMinutes(i.toLong()))

val uri = DmfsTask(taskList!!, task, "9468a4cf-0d5b-4379-a704-12f1f84100ba", null, 0).add()
val task2 = taskList!!.findById(ContentUris.parseId(uri))
val task2 = taskList!!.getTask(ContentUris.parseId(uri))
assertEquals(1050, task2.task?.alarms?.size)
}

Expand All @@ -751,7 +752,7 @@ class DmfsTaskTest(
val uri = DmfsTask(taskList!!, task, "9468a4cf-0d5b-4379-a704-12f1f84100ba", null, 0).add()
assertNotNull(uri)

val testTask = taskList!!.findById(ContentUris.parseId(uri))
val testTask = taskList!!.getTask(ContentUris.parseId(uri))
try {
// update test event in calendar
val task2 = testTask.task!!
Expand All @@ -761,7 +762,7 @@ class DmfsTaskTest(
testTask.update(task2)

// read again and verify result
val updatedTask = taskList!!.findById(ContentUris.parseId(uri)).task!!
val updatedTask = taskList!!.getTask(ContentUris.parseId(uri)).task!!
assertEquals(task2.summary, updatedTask.summary)
assertEquals(task2.location, updatedTask.location)
assertEquals(task2.dtStart, updatedTask.dtStart)
Expand All @@ -784,7 +785,7 @@ class DmfsTaskTest(
val uri = DmfsTask(taskList!!, task, "9468a4cf-0d5b-4379-a704-12f1f84100ba", null, 0).add()
assertNotNull(uri)

val testTask = taskList!!.findById(ContentUris.parseId(uri))
val testTask = taskList!!.getTask(ContentUris.parseId(uri))
try {
// read again and verify result
val task2 = testTask.task!!
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@
package at.bitfire.ical4android.impl

import android.accounts.Account
import android.content.ContentUris
import android.content.ContentValues
import at.bitfire.ical4android.DmfsTaskList
import at.bitfire.ical4android.TaskProvider
import at.bitfire.synctools.storage.tasks.DmfsTaskList
import at.bitfire.synctools.storage.tasks.DmfsTaskListProvider
import org.dmfs.tasks.contract.TaskContract

object TestTaskList {
Expand All @@ -24,9 +24,9 @@ object TestTaskList {
values.put(TaskContract.TaskListColumns.LIST_COLOR, 0xffff0000)
values.put(TaskContract.TaskListColumns.SYNC_ENABLED, 1)
values.put(TaskContract.TaskListColumns.VISIBLE, 1)
val uri = DmfsTaskList.create(account, provider.client, provider.name, values)
val dmfsTaskListProvider = DmfsTaskListProvider(account, provider.client, provider.name)

return DmfsTaskList(account, provider.client, provider.name, ContentUris.parseId(uri))
return DmfsTaskList(dmfsTaskListProvider, values, provider.name)
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import android.accounts.Account
import at.bitfire.ical4android.DmfsStyleProvidersTaskTest
import at.bitfire.ical4android.TaskProvider
import at.bitfire.ical4android.impl.TestTaskList
import at.bitfire.synctools.storage.tasks.TasksBatchOperation
import at.bitfire.synctools.test.BuildConfig
import org.dmfs.tasks.contract.TaskContract
import org.junit.Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* SPDX-License-Identifier: GPL-3.0-or-later
*/

package at.bitfire.synctools.storage
package at.bitfire.synctools.storage.tasks

import android.Manifest
import android.accounts.Account
Expand All @@ -13,6 +13,9 @@ import android.provider.ContactsContract
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.rule.GrantPermissionRule
import at.bitfire.ical4android.util.MiscUtils.closeCompat
import at.bitfire.synctools.storage.BatchOperation
import at.bitfire.synctools.storage.ContactsBatchOperation
import at.bitfire.synctools.storage.LocalStorageException
import at.bitfire.synctools.test.BuildConfig
import org.junit.After
import org.junit.Before
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
/*
* This file is part of bitfireAT/synctools which is released under GPLv3.
* Copyright © All Contributors. See the LICENSE and AUTHOR files in the root directory for details.
* SPDX-License-Identifier: GPL-3.0-or-later
*/

package at.bitfire.synctools.storage.tasks

import android.accounts.Account
import android.content.ContentUris
import android.content.ContentValues
import android.database.DatabaseUtils
import at.bitfire.ical4android.DmfsStyleProvidersTaskTest
import at.bitfire.ical4android.DmfsTask
import at.bitfire.ical4android.Task
import at.bitfire.ical4android.TaskProvider
import net.fortuna.ical4j.model.property.RelatedTo
import org.dmfs.tasks.contract.TaskContract
import org.junit.Assert
import org.junit.Test

class DmfsTaskListTest(providerName: TaskProvider.ProviderName):
DmfsStyleProvidersTaskTest(providerName) {

private val testAccount = Account(javaClass.name, TaskContract.LOCAL_ACCOUNT_TYPE)

private fun createTaskList(): DmfsTaskList {
val info = ContentValues()
info.put(TaskContract.TaskLists.LIST_NAME, "Test Task List")
info.put(TaskContract.TaskLists.LIST_COLOR, 0xffff0000)
info.put(TaskContract.TaskLists.OWNER, "test@example.com")
info.put(TaskContract.TaskLists.SYNC_ENABLED, 1)
info.put(TaskContract.TaskLists.VISIBLE, 1)

val dmfsTaskListProvider = DmfsTaskListProvider(testAccount, provider.client, providerName)
val id = dmfsTaskListProvider.createTaskList(info)
Assert.assertNotNull(id)

dmfsTaskListProvider.createTaskList(info)

return dmfsTaskListProvider.getTaskList(id)!!
}

@Test
fun testTouchRelations() {
val taskList = createTaskList()
try {
val parent = Task()
parent.uid = "parent"
parent.summary = "Parent task"

val child = Task()
child.uid = "child"
child.summary = "Child task"
child.relatedTo.add(RelatedTo(parent.uid))

// insert child before parent
val childContentUri = DmfsTask(
taskList,
child,
"452a5672-e2b0-434e-92b4-bc70a7a51ef2",
null,
0
).add()
val childId = ContentUris.parseId(childContentUri)
val parentContentUri = DmfsTask(
taskList,
parent,
"452a5672-e2b0-434e-92b4-bc70a7a51ef2",
null,
0
).add()
val parentId = ContentUris.parseId(parentContentUri)

// OpenTasks should provide the correct relation
taskList.provider.client.query(taskList.tasksPropertiesUri(), null,
"${TaskContract.Properties.TASK_ID}=?", arrayOf(childId.toString()),
null, null)!!.use { cursor ->
Assert.assertEquals(1, cursor.count)
cursor.moveToNext()

val row = ContentValues()
DatabaseUtils.cursorRowToContentValues(cursor, row)

Assert.assertEquals(
TaskContract.Property.Relation.CONTENT_ITEM_TYPE,
row.getAsString(TaskContract.Properties.MIMETYPE)
)
Assert.assertEquals(
parentId,
row.getAsLong(TaskContract.Property.Relation.RELATED_ID)
)
Assert.assertEquals(
parent.uid,
row.getAsString(TaskContract.Property.Relation.RELATED_UID)
)
Assert.assertEquals(
TaskContract.Property.Relation.RELTYPE_PARENT,
row.getAsInteger(TaskContract.Property.Relation.RELATED_TYPE)
)
}

// touch the relations to update parent_id values
taskList.touchRelations()

// now parent_id should bet set
taskList.provider.client.query(childContentUri, arrayOf(TaskContract.Tasks.PARENT_ID),
null, null, null)!!.use { cursor ->
Assert.assertTrue(cursor.moveToNext())
Assert.assertEquals(parentId, cursor.getLong(0))
}
} finally {
taskList.delete()
}
}

}
Loading