#1416: Step 2b Use Reminders in updateDone and migrations
continuous-integration/drone/pr Build is failing Details

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.
// 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 {
for in, r := range oldTask.ReminderDates {
newTask.ReminderDates[in] = r.Add(repeatDuration)
for !newTask.ReminderDates[in].After(now) {
newTask.ReminderDates[in] = newTask.ReminderDates[in].Add(repeatDuration)
if len(oldTask.Reminders) > 0 {
for in, r := range oldTask.Reminders {
newTask.Reminders[in].Reminder = r.Reminder.Add(repeatDuration)
for !newTask.Reminders[in].Reminder.After(now) {
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.ReminderDates = oldTask.ReminderDates
if len(oldTask.ReminderDates) > 0 {
for in, r := range oldTask.ReminderDates {
newTask.ReminderDates[in] = addOneMonthToDate(r)
newTask.Reminders = oldTask.Reminders
if len(oldTask.Reminders) > 0 {
for in, r := range oldTask.Reminders {
newTask.Reminders[in].Reminder = addOneMonthToDate(r.Reminder)
}
}
@ -1426,17 +1426,17 @@ func setTaskDatesFromCurrentDateRepeat(oldTask, newTask *Task) {
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.
// 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 {
sort.Slice(oldTask.ReminderDates, func(i, j int) bool {
return oldTask.ReminderDates[i].Unix() < oldTask.ReminderDates[j].Unix()
if len(oldTask.Reminders) > 0 {
sort.Slice(oldTask.Reminders, func(i, j int) bool {
return oldTask.Reminders[i].Reminder.Unix() < oldTask.Reminders[j].Reminder.Unix()
})
first := oldTask.ReminderDates[0]
for in, r := range oldTask.ReminderDates {
diff := r.Sub(first)
newTask.ReminderDates[in] = now.Add(repeatDuration + diff)
first := oldTask.Reminders[0].Reminder
for in, r := range oldTask.Reminders {
diff := r.Reminder.Sub(first)
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
for _, r := range reminderMap {
_, err = s.Insert(&TaskReminder{TaskID: t.ID, Reminder: r.Reminder})
t.Reminders = append(t.Reminders, &r)
t.ReminderDates = append(t.ReminderDates, r.Reminder)
taskReminder := &TaskReminder{TaskID: t.ID, Reminder: r.Reminder}
_, err = s.Insert(taskReminder)
t.Reminders = append(t.Reminders, taskReminder)
t.ReminderDates = append(t.ReminderDates, taskReminder.Reminder)
if err != nil {
return err
}

View File

@ -516,9 +516,13 @@ func TestUpdateDone(t *testing.T) {
oldTask := &Task{
Done: false,
RepeatAfter: 8600,
ReminderDates: []time.Time{
time.Unix(1550000000, 0),
time.Unix(1555000000, 0),
Reminders: []*TaskReminder{
{
Reminder: time.Unix(1550000000, 0),
},
{
Reminder: time.Unix(1555000000, 0),
},
},
}
newTask := &Task{
@ -535,9 +539,9 @@ func TestUpdateDone(t *testing.T) {
expected2 = expected2.Add(time.Duration(oldTask.RepeatAfter) * time.Second)
}
assert.Len(t, newTask.ReminderDates, 2)
assert.Equal(t, expected1, newTask.ReminderDates[0])
assert.Equal(t, expected2, newTask.ReminderDates[1])
assert.Len(t, newTask.Reminders, 2)
assert.Equal(t, expected1, newTask.Reminders[0].Reminder)
assert.Equal(t, expected2, newTask.Reminders[1].Reminder)
assert.False(t, newTask.Done)
})
t.Run("update start date", func(t *testing.T) {
@ -614,22 +618,25 @@ func TestUpdateDone(t *testing.T) {
Done: false,
RepeatAfter: 8600,
RepeatMode: TaskRepeatModeFromCurrentDate,
ReminderDates: []time.Time{
time.Unix(1550000000, 0),
time.Unix(1555000000, 0),
},
}
Reminders: []*TaskReminder{
{
Reminder: time.Unix(1550000000, 0),
},
{
Reminder: time.Unix(1555000000, 0),
},
}}
newTask := &Task{
Done: true,
}
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
assert.Equal(t, time.Now().Add(time.Duration(oldTask.RepeatAfter)*time.Second).Unix(), newTask.ReminderDates[0].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(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.Reminders[1].Reminder.Unix())
assert.False(t, newTask.Done)
})
t.Run("start date", func(t *testing.T) {
@ -707,23 +714,28 @@ func TestUpdateDone(t *testing.T) {
oldTask := &Task{
Done: false,
RepeatMode: TaskRepeatModeMonth,
ReminderDates: []time.Time{
time.Unix(1550000000, 0),
time.Unix(1555000000, 0),
},
}
Reminders: []*TaskReminder{
{
Reminder: time.Unix(1550000000, 0),
},
{
Reminder: time.Unix(1555000000, 0),
},
}}
newTask := &Task{
Done: true,
}
oldReminders := make([]time.Time, len(oldTask.ReminderDates))
copy(oldReminders, oldTask.ReminderDates)
oldReminders := make([]time.Time, len(oldTask.Reminders))
for i, r := range newTask.Reminders {
oldReminders[i] = r.Reminder
}
updateDone(oldTask, newTask)
assert.Len(t, newTask.ReminderDates, len(oldReminders))
for i, r := range newTask.ReminderDates {
assert.True(t, r.After(oldReminders[i]))
assert.NotEqual(t, oldReminders[i].Month(), r.Month())
assert.Len(t, newTask.Reminders, len(oldReminders))
for i, r := range newTask.Reminders {
assert.True(t, r.Reminder.After(oldReminders[i]))
assert.NotEqual(t, oldReminders[i].Month(), r.Reminder.Month())
}
assert.False(t, newTask.Done)
})

View File

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

View File

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

View File

@ -471,7 +471,10 @@ func convertTodoistToVikunja(sync *sync, doneItems map[string]*doneItem) (fullVi
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{

View File

@ -388,9 +388,9 @@ func TestConvertTodoistToVikunja(t *testing.T) {
Description: "Lorem Ipsum dolor sit amet",
Done: false,
Created: time1,
ReminderDates: []time.Time{
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()),
Reminders: []*models.TaskReminder{
{Reminder: time.Date(2020, time.June, 15, 23, 59, 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",
Done: false,
Created: time1,
ReminderDates: []time.Time{
time.Date(2020, time.July, 15, 7, 0, 0, 0, time.UTC).In(config.GetTimeZone()),
Reminders: []*models.TaskReminder{
{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,
DoneAt: time3,
Labels: vikunjaLabels,
ReminderDates: []time.Time{
time.Date(2020, time.June, 15, 7, 0, 0, 0, time.UTC).In(config.GetTimeZone()),
Reminders: []*models.TaskReminder{
{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,
Created: time1,
DoneAt: time3,
ReminderDates: []time.Time{
time.Date(2020, time.June, 15, 7, 0, 0, 0, time.UTC).In(config.GetTimeZone()),
Reminders: []*models.TaskReminder{
{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",
Done: false,
Created: time1,
ReminderDates: []time.Time{
time.Date(2020, time.June, 15, 7, 0, 0, 0, time.UTC).In(config.GetTimeZone()),
Reminders: []*models.TaskReminder{
{Reminder: time.Date(2020, time.June, 15, 7, 0, 0, 0, time.UTC).In(config.GetTimeZone())},
},
},
},