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

Loading…
Cancel
Save