Manual task reordering feature (#6)

This PR contains the work done to add support for manual todo task reordering in the *Task list* view

Reviewed-on: rock-n-code/todos-app#6
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
This commit was merged in pull request #6.
This commit is contained in:
2026-02-11 15:28:22 +00:00
committed by javier
parent cbf33302dd
commit ac0e0f6556
9 changed files with 298 additions and 101 deletions
@@ -36,7 +36,7 @@ struct TaskListViewModelTests {
) {
// GIVEN
let viewModel = TaskListView.ViewModel(group: group)
viewModel.showCompleted = showCompleted
// WHEN
@@ -46,7 +46,8 @@ struct TaskListViewModelTests {
if showCompleted {
#expect(title == "view.task-list.label.hide-completed")
#expect(icon == "eye.slash")
} else {
}
else {
#expect(title == "view.task-list.label.show-completed")
#expect(icon == "eye")
}
@@ -90,6 +91,56 @@ struct TaskListViewModelTests {
// MARK: Method tests
@Test("reorderTasks updates order property when moving task forward")
func reorderTasksMovingForward() {
// GIVEN
let viewModel = TaskListView.ViewModel(group: .today)
let tasks: [Todo] = [
.init(title: "Task 1", due: .now, order: 0),
.init(title: "Task 2", due: .now, order: 1),
.init(title: "Task 3", due: .now, order: 2),
.init(title: "Task 4", due: .now, order: 3),
]
// WHEN
viewModel.reorderTasks(
tasks,
from: IndexSet(integer: 0),
to: 3
)
// THEN
#expect(tasks[0].order == 2)
#expect(tasks[1].order == 0)
#expect(tasks[2].order == 1)
#expect(tasks[3].order == 3)
}
@Test("reorderTasks updates order property when moving task backward")
func reorderTasksMovingBackward() {
// GIVEN
let viewModel = TaskListView.ViewModel(group: .today)
let tasks: [Todo] = [
.init(title: "Task 1", due: .now, order: 0),
.init(title: "Task 2", due: .now, order: 1),
.init(title: "Task 3", due: .now, order: 2),
.init(title: "Task 4", due: .now, order: 3),
]
// WHEN
viewModel.reorderTasks(
tasks,
from: IndexSet(integer: 3),
to: 1
)
// THEN
#expect(tasks[0].order == 0)
#expect(tasks[1].order == 2)
#expect(tasks[2].order == 3)
#expect(tasks[3].order == 1)
}
@Test("toggleCompletedVisbility toggles the showCompleted property")
func toggleCompletedVisibility() {
// GIVEN