Skip to content

Commit 25b92ef

Browse files
authored
Move logic from DmfsTaskList companion object to DmfsTaskListProvider (#170)
* Move logic from DmfsTaskList companion object to DmfsTaskListProvider * Adapt tests * Use TaskContract.LOCAL_ACCOUNT_TYPE instead of from CalendarContract * Optimize imports * Add deleteTasks method * Remove trailing commas * Use RemoteException everywhere * Remove useless test
1 parent 0c84c5a commit 25b92ef

File tree

11 files changed

+575
-403
lines changed

11 files changed

+575
-403
lines changed

lib/src/androidTest/kotlin/at/bitfire/ical4android/DmfsTaskListTest.kt

Lines changed: 0 additions & 113 deletions
This file was deleted.

lib/src/androidTest/kotlin/at/bitfire/ical4android/DmfsTaskTest.kt

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ import android.content.ContentUris
1111
import android.content.ContentValues
1212
import android.database.DatabaseUtils
1313
import android.net.Uri
14-
import android.provider.CalendarContract
1514
import androidx.core.content.contentValuesOf
1615
import at.bitfire.ical4android.impl.TestTaskList
1716
import at.bitfire.synctools.storage.LocalStorageException
17+
import at.bitfire.synctools.storage.tasks.DmfsTaskList
1818
import net.fortuna.ical4j.model.Date
1919
import net.fortuna.ical4j.model.DateList
2020
import net.fortuna.ical4j.model.DateTime
@@ -38,6 +38,7 @@ import net.fortuna.ical4j.model.property.RRule
3838
import net.fortuna.ical4j.model.property.RelatedTo
3939
import net.fortuna.ical4j.model.property.Status
4040
import net.fortuna.ical4j.model.property.XProperty
41+
import org.dmfs.tasks.contract.TaskContract
4142
import org.dmfs.tasks.contract.TaskContract.Properties
4243
import org.dmfs.tasks.contract.TaskContract.Property
4344
import org.dmfs.tasks.contract.TaskContract.Property.Category
@@ -63,7 +64,7 @@ class DmfsTaskTest(
6364
private val tzChicago = tzRegistry.getTimeZone("America/Chicago")!!
6465
private val tzDefault = tzRegistry.getTimeZone(ZoneId.systemDefault().id)!!
6566

66-
private val testAccount = Account(javaClass.name, CalendarContract.ACCOUNT_TYPE_LOCAL)
67+
private val testAccount = Account(javaClass.name, TaskContract.LOCAL_ACCOUNT_TYPE)
6768

6869
private lateinit var taskListUri: Uri
6970
private var taskList: DmfsTaskList? = null
@@ -513,7 +514,7 @@ class DmfsTaskTest(
513514
categories.addAll(arrayOf("Cat_1", "Cat 2"))
514515
}.let { result ->
515516
val id = result.getAsLong(Tasks._ID)
516-
val uri = taskList!!.tasksPropertiesSyncUri()
517+
val uri = taskList!!.tasksPropertiesUri()
517518
provider.client.query(uri, arrayOf(Category.CATEGORY_NAME), "${Properties.MIMETYPE}=? AND ${PropertyColumns.TASK_ID}=?",
518519
arrayOf(Category.CONTENT_ITEM_TYPE, id.toString()), null)!!.use { cursor ->
519520
while (cursor.moveToNext())
@@ -534,7 +535,7 @@ class DmfsTaskTest(
534535
comment = "Comment value"
535536
}.let { result ->
536537
val id = result.getAsLong(Tasks._ID)
537-
val uri = taskList!!.tasksPropertiesSyncUri()
538+
val uri = taskList!!.tasksPropertiesUri()
538539
provider.client.query(uri, arrayOf(Property.Comment.COMMENT), "${Properties.MIMETYPE}=? AND ${PropertyColumns.TASK_ID}=?",
539540
arrayOf(Property.Comment.CONTENT_ITEM_TYPE, id.toString()), null)!!.use { cursor ->
540541
if (cursor.moveToNext())
@@ -551,7 +552,7 @@ class DmfsTaskTest(
551552
comment = null
552553
}.let { result ->
553554
val id = result.getAsLong(Tasks._ID)
554-
val uri = taskList!!.tasksPropertiesSyncUri()
555+
val uri = taskList!!.tasksPropertiesUri()
555556
provider.client.query(uri, arrayOf(Property.Comment.COMMENT), "${Properties.MIMETYPE}=? AND ${PropertyColumns.TASK_ID}=?",
556557
arrayOf(Property.Comment.CONTENT_ITEM_TYPE, id.toString()), null)!!.use { cursor ->
557558
hasComment = cursor.count > 0
@@ -561,7 +562,7 @@ class DmfsTaskTest(
561562
}
562563

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

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

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

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

754-
val testTask = taskList!!.findById(ContentUris.parseId(uri))
755+
val testTask = taskList!!.getTask(ContentUris.parseId(uri))
755756
try {
756757
// update test event in calendar
757758
val task2 = testTask.task!!
@@ -761,7 +762,7 @@ class DmfsTaskTest(
761762
testTask.update(task2)
762763

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

787-
val testTask = taskList!!.findById(ContentUris.parseId(uri))
788+
val testTask = taskList!!.getTask(ContentUris.parseId(uri))
788789
try {
789790
// read again and verify result
790791
val task2 = testTask.task!!

lib/src/androidTest/kotlin/at/bitfire/ical4android/impl/TestTaskList.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
package at.bitfire.ical4android.impl
88

99
import android.accounts.Account
10-
import android.content.ContentUris
1110
import android.content.ContentValues
12-
import at.bitfire.ical4android.DmfsTaskList
1311
import at.bitfire.ical4android.TaskProvider
12+
import at.bitfire.synctools.storage.tasks.DmfsTaskList
13+
import at.bitfire.synctools.storage.tasks.DmfsTaskListProvider
1414
import org.dmfs.tasks.contract.TaskContract
1515

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

29-
return DmfsTaskList(account, provider.client, provider.name, ContentUris.parseId(uri))
29+
return DmfsTaskList(dmfsTaskListProvider, values, provider.name)
3030
}
3131

3232
}

lib/src/androidTest/kotlin/at/bitfire/synctools/storage/TasksBatchOperationTest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import android.accounts.Account
1010
import at.bitfire.ical4android.DmfsStyleProvidersTaskTest
1111
import at.bitfire.ical4android.TaskProvider
1212
import at.bitfire.ical4android.impl.TestTaskList
13+
import at.bitfire.synctools.storage.tasks.TasksBatchOperation
1314
import at.bitfire.synctools.test.BuildConfig
1415
import org.dmfs.tasks.contract.TaskContract
1516
import org.junit.Test

lib/src/androidTest/kotlin/at/bitfire/synctools/storage/ContactsBatchOperationTest.kt renamed to lib/src/androidTest/kotlin/at/bitfire/synctools/storage/tasks/ContactsBatchOperationTest.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* SPDX-License-Identifier: GPL-3.0-or-later
55
*/
66

7-
package at.bitfire.synctools.storage
7+
package at.bitfire.synctools.storage.tasks
88

99
import android.Manifest
1010
import android.accounts.Account
@@ -13,6 +13,9 @@ import android.provider.ContactsContract
1313
import androidx.test.platform.app.InstrumentationRegistry
1414
import androidx.test.rule.GrantPermissionRule
1515
import at.bitfire.ical4android.util.MiscUtils.closeCompat
16+
import at.bitfire.synctools.storage.BatchOperation
17+
import at.bitfire.synctools.storage.ContactsBatchOperation
18+
import at.bitfire.synctools.storage.LocalStorageException
1619
import at.bitfire.synctools.test.BuildConfig
1720
import org.junit.After
1821
import org.junit.Before
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
/*
2+
* This file is part of bitfireAT/synctools which is released under GPLv3.
3+
* Copyright © All Contributors. See the LICENSE and AUTHOR files in the root directory for details.
4+
* SPDX-License-Identifier: GPL-3.0-or-later
5+
*/
6+
7+
package at.bitfire.synctools.storage.tasks
8+
9+
import android.accounts.Account
10+
import android.content.ContentUris
11+
import android.content.ContentValues
12+
import android.database.DatabaseUtils
13+
import at.bitfire.ical4android.DmfsStyleProvidersTaskTest
14+
import at.bitfire.ical4android.DmfsTask
15+
import at.bitfire.ical4android.Task
16+
import at.bitfire.ical4android.TaskProvider
17+
import net.fortuna.ical4j.model.property.RelatedTo
18+
import org.dmfs.tasks.contract.TaskContract
19+
import org.junit.Assert
20+
import org.junit.Test
21+
22+
class DmfsTaskListTest(providerName: TaskProvider.ProviderName):
23+
DmfsStyleProvidersTaskTest(providerName) {
24+
25+
private val testAccount = Account(javaClass.name, TaskContract.LOCAL_ACCOUNT_TYPE)
26+
27+
private fun createTaskList(): DmfsTaskList {
28+
val info = ContentValues()
29+
info.put(TaskContract.TaskLists.LIST_NAME, "Test Task List")
30+
info.put(TaskContract.TaskLists.LIST_COLOR, 0xffff0000)
31+
info.put(TaskContract.TaskLists.OWNER, "[email protected]")
32+
info.put(TaskContract.TaskLists.SYNC_ENABLED, 1)
33+
info.put(TaskContract.TaskLists.VISIBLE, 1)
34+
35+
val dmfsTaskListProvider = DmfsTaskListProvider(testAccount, provider.client, providerName)
36+
val id = dmfsTaskListProvider.createTaskList(info)
37+
Assert.assertNotNull(id)
38+
39+
dmfsTaskListProvider.createTaskList(info)
40+
41+
return dmfsTaskListProvider.getTaskList(id)!!
42+
}
43+
44+
@Test
45+
fun testTouchRelations() {
46+
val taskList = createTaskList()
47+
try {
48+
val parent = Task()
49+
parent.uid = "parent"
50+
parent.summary = "Parent task"
51+
52+
val child = Task()
53+
child.uid = "child"
54+
child.summary = "Child task"
55+
child.relatedTo.add(RelatedTo(parent.uid))
56+
57+
// insert child before parent
58+
val childContentUri = DmfsTask(
59+
taskList,
60+
child,
61+
"452a5672-e2b0-434e-92b4-bc70a7a51ef2",
62+
null,
63+
0
64+
).add()
65+
val childId = ContentUris.parseId(childContentUri)
66+
val parentContentUri = DmfsTask(
67+
taskList,
68+
parent,
69+
"452a5672-e2b0-434e-92b4-bc70a7a51ef2",
70+
null,
71+
0
72+
).add()
73+
val parentId = ContentUris.parseId(parentContentUri)
74+
75+
// OpenTasks should provide the correct relation
76+
taskList.provider.client.query(taskList.tasksPropertiesUri(), null,
77+
"${TaskContract.Properties.TASK_ID}=?", arrayOf(childId.toString()),
78+
null, null)!!.use { cursor ->
79+
Assert.assertEquals(1, cursor.count)
80+
cursor.moveToNext()
81+
82+
val row = ContentValues()
83+
DatabaseUtils.cursorRowToContentValues(cursor, row)
84+
85+
Assert.assertEquals(
86+
TaskContract.Property.Relation.CONTENT_ITEM_TYPE,
87+
row.getAsString(TaskContract.Properties.MIMETYPE)
88+
)
89+
Assert.assertEquals(
90+
parentId,
91+
row.getAsLong(TaskContract.Property.Relation.RELATED_ID)
92+
)
93+
Assert.assertEquals(
94+
parent.uid,
95+
row.getAsString(TaskContract.Property.Relation.RELATED_UID)
96+
)
97+
Assert.assertEquals(
98+
TaskContract.Property.Relation.RELTYPE_PARENT,
99+
row.getAsInteger(TaskContract.Property.Relation.RELATED_TYPE)
100+
)
101+
}
102+
103+
// touch the relations to update parent_id values
104+
taskList.touchRelations()
105+
106+
// now parent_id should bet set
107+
taskList.provider.client.query(childContentUri, arrayOf(TaskContract.Tasks.PARENT_ID),
108+
null, null, null)!!.use { cursor ->
109+
Assert.assertTrue(cursor.moveToNext())
110+
Assert.assertEquals(parentId, cursor.getLong(0))
111+
}
112+
} finally {
113+
taskList.delete()
114+
}
115+
}
116+
117+
}

0 commit comments

Comments
 (0)