fix: treat archived TickTick tasks as done during import

TickTick uses status "2" (Archived) for completed tasks that were
subsequently archived. The import only checked for status "1"
(Completed), causing archived tasks to be imported as open despite
having a completion timestamp.

Closes go-vikunja/vikunja#2278
This commit is contained in:
kolaente
2026-02-23 14:46:11 +01:00
parent 524d8f522d
commit 249b651692
2 changed files with 23 additions and 9 deletions

View File

@@ -118,7 +118,7 @@ func convertTickTickToVikunja(tasks []*tickTickTask) (result []*models.ProjectWi
StartDate: t.StartDate.Time,
EndDate: t.DueDate.Time,
DueDate: t.DueDate.Time,
Done: t.Status == "1",
Done: t.Status == "1" || t.Status == "2",
DoneAt: t.CompletedTime.Time,
Position: t.Order,
Labels: labels,

View File

@@ -82,12 +82,21 @@ func TestConvertTicktickTasksToVikunja(t *testing.T) {
Order: -109951627776,
},
{
TaskID: 4,
TaskID: 4,
ParentID: 0,
ProjectName: "Project 1",
Title: "Test task 4 - archived",
Status: "2",
CompletedTime: time3,
Order: -109951627777,
},
{
TaskID: 5,
ParentID: 0,
ProjectName: "Project 2",
Title: "Test task 4",
Title: "Test task 5",
Status: "0",
Order: -109951627777,
Order: -109951627778,
},
}
@@ -98,7 +107,7 @@ func TestConvertTicktickTasksToVikunja(t *testing.T) {
assert.Equal(t, vikunjaTasks[1].ParentProjectID, vikunjaTasks[0].ID)
assert.Equal(t, vikunjaTasks[2].ParentProjectID, vikunjaTasks[0].ID)
assert.Len(t, vikunjaTasks[1].Tasks, 3)
assert.Len(t, vikunjaTasks[1].Tasks, 4)
assert.Equal(t, vikunjaTasks[1].Title, tickTickTasks[0].ProjectName)
assert.Equal(t, vikunjaTasks[1].Tasks[0].Title, tickTickTasks[0].Title)
@@ -142,11 +151,16 @@ func TestConvertTicktickTasksToVikunja(t *testing.T) {
assert.Equal(t, vikunjaTasks[1].Tasks[2].Position, tickTickTasks[2].Order)
assert.False(t, vikunjaTasks[1].Tasks[2].Done)
assert.Len(t, vikunjaTasks[2].Tasks, 1)
assert.Equal(t, vikunjaTasks[2].Title, tickTickTasks[3].ProjectName)
assert.Equal(t, vikunjaTasks[1].Tasks[3].Title, tickTickTasks[3].Title)
assert.Equal(t, vikunjaTasks[1].Tasks[3].Position, tickTickTasks[3].Order)
assert.True(t, vikunjaTasks[1].Tasks[3].Done)
assert.Equal(t, vikunjaTasks[1].Tasks[3].DoneAt, tickTickTasks[3].CompletedTime.Time)
assert.Equal(t, vikunjaTasks[2].Tasks[0].Title, tickTickTasks[3].Title)
assert.Equal(t, vikunjaTasks[2].Tasks[0].Position, tickTickTasks[3].Order)
assert.Len(t, vikunjaTasks[2].Tasks, 1)
assert.Equal(t, vikunjaTasks[2].Title, tickTickTasks[4].ProjectName)
assert.Equal(t, vikunjaTasks[2].Tasks[0].Title, tickTickTasks[4].Title)
assert.Equal(t, vikunjaTasks[2].Tasks[0].Position, tickTickTasks[4].Order)
}
func TestLinesToSkipBeforeHeader(t *testing.T) {