Prevent unindenting in middle of caldav subtasks

pull/996/head
Alex Baker 6 years ago
parent 6cc222ba5a
commit aa00da4739

@ -2,6 +2,7 @@ package com.todoroo.astrid.adapter
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.natpryce.makeiteasy.MakeItEasy.with
import com.natpryce.makeiteasy.PropertyValue
import com.todoroo.astrid.dao.TaskDao
import org.junit.Assert.*
import org.junit.Before
@ -41,18 +42,17 @@ class CaldavTaskAdapterTest : InjectingTestCase() {
@Test
fun canMoveTask() {
add(
newTaskContainer(),
newTaskContainer())
addTask()
addTask()
assertTrue(adapter.canMove(tasks[0], 0, tasks[1], 1))
}
@Test
fun cantMoveTaskToChildPosition() {
add(newTaskContainer())
add(newTaskContainer(with(PARENT, tasks[0])),
newTaskContainer(with(PARENT, tasks[0])))
addTask()
addTask(with(PARENT, tasks[0]))
addTask(with(PARENT, tasks[0]))
assertFalse(adapter.canMove(tasks[0], 0, tasks[1], 1))
assertFalse(adapter.canMove(tasks[0], 0, tasks[2], 2))
@ -60,17 +60,17 @@ class CaldavTaskAdapterTest : InjectingTestCase() {
@Test
fun canMoveChildAboveParent() {
add(newTaskContainer())
add(newTaskContainer(with(PARENT, tasks[0])))
addTask()
addTask(with(PARENT, tasks[0]))
assertTrue(adapter.canMove(tasks[1], 1, tasks[0], 0))
}
@Test
fun canMoveChildBetweenSiblings() {
add(newTaskContainer())
add(newTaskContainer(with(PARENT, tasks[0])),
newTaskContainer(with(PARENT, tasks[0])))
addTask()
addTask(with(PARENT, tasks[0]))
addTask(with(PARENT, tasks[0]))
assertTrue(adapter.canMove(tasks[1], 1, tasks[2], 2))
assertTrue(adapter.canMove(tasks[2], 2, tasks[1], 1))
@ -78,25 +78,66 @@ class CaldavTaskAdapterTest : InjectingTestCase() {
@Test
fun maxIndentNoChildren() {
add(newTaskContainer(),
newTaskContainer())
addTask()
addTask()
assertEquals(1, adapter.maxIndent(0, tasks[1]))
}
@Test
fun maxIndentMultiLevelSubtask() {
add(newTaskContainer())
add(newTaskContainer(with(PARENT, tasks[0])),
newTaskContainer())
addTask()
addTask(with(PARENT, tasks[0]))
addTask()
assertEquals(1, adapter.maxIndent(0, tasks[1]))
assertEquals(2, adapter.maxIndent(1, tasks[2]))
}
@Test
fun minIndentInMiddleOfSubtasks() {
addTask()
addTask(with(PARENT, tasks[0]))
addTask(with(PARENT, tasks[0]))
assertEquals(1, adapter.minIndent(2, tasks[1]))
}
@Test
fun minIndentAtEndOfSubtasks() {
addTask()
addTask(with(PARENT, tasks[0]))
addTask(with(PARENT, tasks[0]))
addTask()
assertEquals(0, adapter.minIndent(3, tasks[2]))
}
@Test
fun minIndentAtEndOfMultiLevelSubtask() {
addTask()
addTask(with(PARENT, tasks[0]))
addTask(with(PARENT, tasks[1]))
addTask()
assertEquals(0, adapter.minIndent(2, tasks[1]))
}
@Test
fun minIndentInMiddleOfMultiLevelSubtasks() {
addTask()
addTask(with(PARENT, tasks[0]))
addTask(with(PARENT, tasks[1]))
addTask(with(PARENT, tasks[0]))
addTask()
assertEquals(1, adapter.minIndent(3, tasks[2]))
}
@Test
fun movingTaskToNewParentSetsId() {
add(newTaskContainer(),
newTaskContainer())
addTask()
addTask()
adapter.moved(1, 1, 1)
@ -105,8 +146,8 @@ class CaldavTaskAdapterTest : InjectingTestCase() {
@Test
fun movingTaskToNewParentSetsRemoteId() {
add(newTaskContainer(),
newTaskContainer())
addTask()
addTask()
adapter.moved(1, 1, 1)
@ -118,8 +159,8 @@ class CaldavTaskAdapterTest : InjectingTestCase() {
@Test
fun unindentingTaskRemovesParent() {
add(newTaskContainer())
add(newTaskContainer(with(PARENT, tasks[0])))
addTask()
addTask(with(PARENT, tasks[0]))
adapter.moved(1, 1, 0)
@ -129,9 +170,9 @@ class CaldavTaskAdapterTest : InjectingTestCase() {
@Test
fun moveSubtaskUpToParent() {
add(newTaskContainer())
add(newTaskContainer(with(PARENT, tasks[0])))
add(newTaskContainer(with(PARENT, tasks[1])))
addTask()
addTask(with(PARENT, tasks[0]))
addTask(with(PARENT, tasks[1]))
adapter.moved(2, 2, 1)
@ -140,28 +181,27 @@ class CaldavTaskAdapterTest : InjectingTestCase() {
@Test
fun moveSubtaskUpToGrandparent() {
add(newTaskContainer())
add(newTaskContainer(with(PARENT, tasks[0])))
add(newTaskContainer(with(PARENT, tasks[1])))
add(newTaskContainer(with(PARENT, tasks[2])))
addTask()
addTask(with(PARENT, tasks[0]))
addTask(with(PARENT, tasks[1]))
addTask(with(PARENT, tasks[2]))
adapter.moved(3, 3, 1)
assertEquals(tasks[0].id, taskDao.fetch(tasks[3].id)!!.parent)
}
private fun add(vararg tasks: TaskContainer) {
this.tasks.addAll(tasks)
tasks.forEach {
val task = it.task
taskDao.createNew(task)
val caldavTask = CaldavTask(it.id, "calendar")
if (task.parent > 0) {
caldavTask.remoteParent = caldavDao.getRemoteIdForTask(task.parent)
}
caldavTask.id = caldavDao.insert(caldavTask)
it.caldavTask = caldavTask.toSubset()
private fun addTask(vararg properties: PropertyValue<in TaskContainer?, *>) {
val t = newTaskContainer(*properties)
tasks.add(t)
val task = t.task
taskDao.createNew(task)
val caldavTask = CaldavTask(t.id, "calendar")
if (task.parent > 0) {
caldavTask.remoteParent = caldavDao.getRemoteIdForTask(task.parent)
}
caldavTask.id = caldavDao.insert(caldavTask)
t.caldavTask = caldavTask.toSubset()
}
private fun CaldavTask.toSubset(): SubsetCaldav {

@ -9,7 +9,14 @@ open class CaldavManualSortTaskAdapter internal constructor(private val taskDao:
override fun maxIndent(previousPosition: Int, task: TaskContainer) = getTask(previousPosition).getIndent() + 1
override fun minIndent(nextPosition: Int, task: TaskContainer) = 0
override fun minIndent(nextPosition: Int, task: TaskContainer): Int {
(nextPosition until count).forEach {
if (!taskIsChild(task, it)) {
return getTask(it).indent
}
}
return 0
}
override fun supportsParentingOrManualSort() = true

Loading…
Cancel
Save