#1416: Step 2b Use Reminders in updateDone and migrations

This commit is contained in:
cernst 2023-03-07 08:27:56 +01:00
parent 85267d26bb
commit 4a41a8a6ca
6 changed files with 82 additions and 62 deletions

View File

@ -1352,14 +1352,14 @@ func setTaskDatesDefault(oldTask, newTask *Task) {
} }
} }
newTask.ReminderDates = oldTask.ReminderDates newTask.Reminders = oldTask.Reminders
// When repeating from the current date, all reminders should keep their difference to each other. // When repeating from the current date, all reminders should keep their difference to each other.
// To make this easier, we sort them first because we can then rely on the fact the first is the smallest // To make this easier, we sort them first because we can then rely on the fact the first is the smallest
if len(oldTask.ReminderDates) > 0 { if len(oldTask.Reminders) > 0 {
for in, r := range oldTask.ReminderDates { for in, r := range oldTask.Reminders {
newTask.ReminderDates[in] = r.Add(repeatDuration) newTask.Reminders[in].Reminder = r.Reminder.Add(repeatDuration)
for !newTask.ReminderDates[in].After(now) { for !newTask.Reminders[in].Reminder.After(now) {
newTask.ReminderDates[in] = newTask.ReminderDates[in].Add(repeatDuration) newTask.Reminders[in].Reminder = newTask.Reminders[in].Reminder.Add(repeatDuration)
} }
} }
} }
@ -1387,10 +1387,10 @@ func setTaskDatesMonthRepeat(oldTask, newTask *Task) {
newTask.DueDate = addOneMonthToDate(oldTask.DueDate) newTask.DueDate = addOneMonthToDate(oldTask.DueDate)
} }
newTask.ReminderDates = oldTask.ReminderDates newTask.Reminders = oldTask.Reminders
if len(oldTask.ReminderDates) > 0 { if len(oldTask.Reminders) > 0 {
for in, r := range oldTask.ReminderDates { for in, r := range oldTask.Reminders {
newTask.ReminderDates[in] = addOneMonthToDate(r) newTask.Reminders[in].Reminder = addOneMonthToDate(r.Reminder)
} }
} }
@ -1426,17 +1426,17 @@ func setTaskDatesFromCurrentDateRepeat(oldTask, newTask *Task) {
newTask.DueDate = now.Add(repeatDuration) newTask.DueDate = now.Add(repeatDuration)
} }
newTask.ReminderDates = oldTask.ReminderDates newTask.Reminders = oldTask.Reminders
// When repeating from the current date, all reminders should keep their difference to each other. // When repeating from the current date, all reminders should keep their difference to each other.
// To make this easier, we sort them first because we can then rely on the fact the first is the smallest // To make this easier, we sort them first because we can then rely on the fact the first is the smallest
if len(oldTask.ReminderDates) > 0 { if len(oldTask.Reminders) > 0 {
sort.Slice(oldTask.ReminderDates, func(i, j int) bool { sort.Slice(oldTask.Reminders, func(i, j int) bool {
return oldTask.ReminderDates[i].Unix() < oldTask.ReminderDates[j].Unix() return oldTask.Reminders[i].Reminder.Unix() < oldTask.Reminders[j].Reminder.Unix()
}) })
first := oldTask.ReminderDates[0] first := oldTask.Reminders[0].Reminder
for in, r := range oldTask.ReminderDates { for in, r := range oldTask.Reminders {
diff := r.Sub(first) diff := r.Reminder.Sub(first)
newTask.ReminderDates[in] = now.Add(repeatDuration + diff) newTask.Reminders[in].Reminder = now.Add(repeatDuration + diff)
} }
} }
@ -1543,9 +1543,10 @@ func (t *Task) updateReminders(s *xorm.Session, reminders []*TaskReminder) (err
// Loop through all reminders and add them // Loop through all reminders and add them
for _, r := range reminderMap { for _, r := range reminderMap {
_, err = s.Insert(&TaskReminder{TaskID: t.ID, Reminder: r.Reminder}) taskReminder := &TaskReminder{TaskID: t.ID, Reminder: r.Reminder}
t.Reminders = append(t.Reminders, &r) _, err = s.Insert(taskReminder)
t.ReminderDates = append(t.ReminderDates, r.Reminder) t.Reminders = append(t.Reminders, taskReminder)
t.ReminderDates = append(t.ReminderDates, taskReminder.Reminder)
if err != nil { if err != nil {
return err return err
} }

View File

@ -516,9 +516,13 @@ func TestUpdateDone(t *testing.T) {
oldTask := &Task{ oldTask := &Task{
Done: false, Done: false,
RepeatAfter: 8600, RepeatAfter: 8600,
ReminderDates: []time.Time{ Reminders: []*TaskReminder{
time.Unix(1550000000, 0), {
time.Unix(1555000000, 0), Reminder: time.Unix(1550000000, 0),
},
{
Reminder: time.Unix(1555000000, 0),
},
}, },
} }
newTask := &Task{ newTask := &Task{
@ -535,9 +539,9 @@ func TestUpdateDone(t *testing.T) {
expected2 = expected2.Add(time.Duration(oldTask.RepeatAfter) * time.Second) expected2 = expected2.Add(time.Duration(oldTask.RepeatAfter) * time.Second)
} }
assert.Len(t, newTask.ReminderDates, 2) assert.Len(t, newTask.Reminders, 2)
assert.Equal(t, expected1, newTask.ReminderDates[0]) assert.Equal(t, expected1, newTask.Reminders[0].Reminder)
assert.Equal(t, expected2, newTask.ReminderDates[1]) assert.Equal(t, expected2, newTask.Reminders[1].Reminder)
assert.False(t, newTask.Done) assert.False(t, newTask.Done)
}) })
t.Run("update start date", func(t *testing.T) { t.Run("update start date", func(t *testing.T) {
@ -614,22 +618,25 @@ func TestUpdateDone(t *testing.T) {
Done: false, Done: false,
RepeatAfter: 8600, RepeatAfter: 8600,
RepeatMode: TaskRepeatModeFromCurrentDate, RepeatMode: TaskRepeatModeFromCurrentDate,
ReminderDates: []time.Time{ Reminders: []*TaskReminder{
time.Unix(1550000000, 0), {
time.Unix(1555000000, 0), Reminder: time.Unix(1550000000, 0),
}, },
} {
Reminder: time.Unix(1555000000, 0),
},
}}
newTask := &Task{ newTask := &Task{
Done: true, Done: true,
} }
updateDone(oldTask, newTask) updateDone(oldTask, newTask)
diff := oldTask.ReminderDates[1].Sub(oldTask.ReminderDates[0]) diff := oldTask.Reminders[1].Reminder.Sub(oldTask.Reminders[0].Reminder)
assert.Len(t, newTask.ReminderDates, 2) assert.Len(t, newTask.Reminders, 2)
// Only comparing unix timestamps because time.Time use nanoseconds which can't ever possibly have the same value // Only comparing unix timestamps because time.Time use nanoseconds which can't ever possibly have the same value
assert.Equal(t, time.Now().Add(time.Duration(oldTask.RepeatAfter)*time.Second).Unix(), newTask.ReminderDates[0].Unix()) assert.Equal(t, time.Now().Add(time.Duration(oldTask.RepeatAfter)*time.Second).Unix(), newTask.Reminders[0].Reminder.Unix())
assert.Equal(t, time.Now().Add(diff+time.Duration(oldTask.RepeatAfter)*time.Second).Unix(), newTask.ReminderDates[1].Unix()) assert.Equal(t, time.Now().Add(diff+time.Duration(oldTask.RepeatAfter)*time.Second).Unix(), newTask.Reminders[1].Reminder.Unix())
assert.False(t, newTask.Done) assert.False(t, newTask.Done)
}) })
t.Run("start date", func(t *testing.T) { t.Run("start date", func(t *testing.T) {
@ -707,23 +714,28 @@ func TestUpdateDone(t *testing.T) {
oldTask := &Task{ oldTask := &Task{
Done: false, Done: false,
RepeatMode: TaskRepeatModeMonth, RepeatMode: TaskRepeatModeMonth,
ReminderDates: []time.Time{ Reminders: []*TaskReminder{
time.Unix(1550000000, 0), {
time.Unix(1555000000, 0), Reminder: time.Unix(1550000000, 0),
}, },
} {
Reminder: time.Unix(1555000000, 0),
},
}}
newTask := &Task{ newTask := &Task{
Done: true, Done: true,
} }
oldReminders := make([]time.Time, len(oldTask.ReminderDates)) oldReminders := make([]time.Time, len(oldTask.Reminders))
copy(oldReminders, oldTask.ReminderDates) for i, r := range newTask.Reminders {
oldReminders[i] = r.Reminder
}
updateDone(oldTask, newTask) updateDone(oldTask, newTask)
assert.Len(t, newTask.ReminderDates, len(oldReminders)) assert.Len(t, newTask.Reminders, len(oldReminders))
for i, r := range newTask.ReminderDates { for i, r := range newTask.Reminders {
assert.True(t, r.After(oldReminders[i])) assert.True(t, r.Reminder.After(oldReminders[i]))
assert.NotEqual(t, oldReminders[i].Month(), r.Month()) assert.NotEqual(t, oldReminders[i].Month(), r.Reminder.Month())
} }
assert.False(t, newTask.Done) assert.False(t, newTask.Done)
}) })

View File

@ -329,7 +329,9 @@ func convertMicrosoftTodoData(todoData []*list) (vikunjsStructure []*models.Name
return nil, err return nil, err
} }
task.ReminderDates = []time.Time{reminder} task.Reminders = []*models.TaskReminder{
{Reminder: reminder},
}
} }
// Due Date // Due Date

View File

@ -141,8 +141,10 @@ func TestConverting(t *testing.T) {
{ {
Task: models.Task{ Task: models.Task{
Title: "Task 5", Title: "Task 5",
ReminderDates: []time.Time{ Reminders: []*models.TaskReminder{
testtimeTime, {
Reminder: testtimeTime,
},
}, },
}, },
}, },

View File

@ -471,7 +471,10 @@ func convertTodoistToVikunja(sync *sync, doneItems map[string]*doneItem) (fullVi
return nil, err return nil, err
} }
tasks[r.ItemID].ReminderDates = append(tasks[r.ItemID].ReminderDates, date.In(config.GetTimeZone())) tasks[r.ItemID].Reminders = append(tasks[r.ItemID].Reminders, &models.TaskReminder{
Reminder: date.In(config.GetTimeZone()),
},
)
} }
return []*models.NamespaceWithListsAndTasks{ return []*models.NamespaceWithListsAndTasks{

View File

@ -388,9 +388,9 @@ func TestConvertTodoistToVikunja(t *testing.T) {
Description: "Lorem Ipsum dolor sit amet", Description: "Lorem Ipsum dolor sit amet",
Done: false, Done: false,
Created: time1, Created: time1,
ReminderDates: []time.Time{ Reminders: []*models.TaskReminder{
time.Date(2020, time.June, 15, 23, 59, 0, 0, time.UTC).In(config.GetTimeZone()), {Reminder: time.Date(2020, time.June, 15, 23, 59, 0, 0, time.UTC).In(config.GetTimeZone())},
time.Date(2020, time.June, 16, 7, 0, 0, 0, time.UTC).In(config.GetTimeZone()), {Reminder: time.Date(2020, time.June, 16, 7, 0, 0, 0, time.UTC).In(config.GetTimeZone())},
}, },
}, },
}, },
@ -407,8 +407,8 @@ func TestConvertTodoistToVikunja(t *testing.T) {
Title: "Task400000002", Title: "Task400000002",
Done: false, Done: false,
Created: time1, Created: time1,
ReminderDates: []time.Time{ Reminders: []*models.TaskReminder{
time.Date(2020, time.July, 15, 7, 0, 0, 0, time.UTC).In(config.GetTimeZone()), {Reminder: time.Date(2020, time.July, 15, 7, 0, 0, 0, time.UTC).In(config.GetTimeZone())},
}, },
}, },
}, },
@ -421,8 +421,8 @@ func TestConvertTodoistToVikunja(t *testing.T) {
Created: time1, Created: time1,
DoneAt: time3, DoneAt: time3,
Labels: vikunjaLabels, Labels: vikunjaLabels,
ReminderDates: []time.Time{ Reminders: []*models.TaskReminder{
time.Date(2020, time.June, 15, 7, 0, 0, 0, time.UTC).In(config.GetTimeZone()), {Reminder: time.Date(2020, time.June, 15, 7, 0, 0, 0, time.UTC).In(config.GetTimeZone())},
}, },
}, },
}, },
@ -441,8 +441,8 @@ func TestConvertTodoistToVikunja(t *testing.T) {
DueDate: dueTime, DueDate: dueTime,
Created: time1, Created: time1,
DoneAt: time3, DoneAt: time3,
ReminderDates: []time.Time{ Reminders: []*models.TaskReminder{
time.Date(2020, time.June, 15, 7, 0, 0, 0, time.UTC).In(config.GetTimeZone()), {Reminder: time.Date(2020, time.June, 15, 7, 0, 0, 0, time.UTC).In(config.GetTimeZone())},
}, },
}, },
}, },
@ -531,8 +531,8 @@ func TestConvertTodoistToVikunja(t *testing.T) {
Title: "Task400000009", Title: "Task400000009",
Done: false, Done: false,
Created: time1, Created: time1,
ReminderDates: []time.Time{ Reminders: []*models.TaskReminder{
time.Date(2020, time.June, 15, 7, 0, 0, 0, time.UTC).In(config.GetTimeZone()), {Reminder: time.Date(2020, time.June, 15, 7, 0, 0, 0, time.UTC).In(config.GetTimeZone())},
}, },
}, },
}, },