Sort Order for tasks #110

Merged
konrad merged 62 commits from feature/sort-order into master 2019-12-07 14:30:52 +00:00
1 changed files with 350 additions and 47 deletions
Showing only changes of commit ea9f9463f1 - Show all commits

View File

@ -18,6 +18,7 @@ package models
import (
"github.com/stretchr/testify/assert"
"gopkg.in/d4l3k/messagediff.v1"
"testing"
)
@ -90,7 +91,7 @@ func TestSortParamValidation(t *testing.T) {
})
}
func buildSortTest(t *testing.T, sortProperty sortProperty, referenceTasks, ascSortedTasks []*Task) {
func runSortTest(t *testing.T, sortProperty sortProperty, referenceTasks, ascSortedTasks []*Task) {
t.Run("asc default", func(t *testing.T) {
by := []*sortParam{
{
@ -99,7 +100,9 @@ func buildSortTest(t *testing.T, sortProperty sortProperty, referenceTasks, ascS
}
sorted := referenceTasks
sortTasks(sorted, by)
assert.Equal(t, ascSortedTasks, sorted)
if diff, equal := messagediff.PrettyDiff(sorted, ascSortedTasks); !equal {
t.Errorf("Not Equal, got = %v, want %v, \ndiff: %v", sorted, ascSortedTasks, diff)
}
})
t.Run("asc", func(t *testing.T) {
by := []*sortParam{
@ -110,7 +113,9 @@ func buildSortTest(t *testing.T, sortProperty sortProperty, referenceTasks, ascS
}
sorted := referenceTasks
sortTasks(sorted, by)
assert.Equal(t, ascSortedTasks, sorted)
if diff, equal := messagediff.PrettyDiff(sorted, ascSortedTasks); !equal {
t.Errorf("Not Equal, got = %v, want %v, \ndiff: %v", sorted, ascSortedTasks, diff)
}
})
t.Run("desc", func(t *testing.T) {
by := []*sortParam{
@ -122,81 +127,86 @@ func buildSortTest(t *testing.T, sortProperty sortProperty, referenceTasks, ascS
// Reversing the asc sorted control group
// Algorithm taken from https://github.com/golang/go/wiki/SliceTricks#reversing
descReferenceTasks := referenceTasks
for i := len(descReferenceTasks)/2 - 1; i >= 0; i-- {
opp := len(descReferenceTasks) - 1 - i
descReferenceTasks[i], descReferenceTasks[opp] = descReferenceTasks[opp], descReferenceTasks[i]
descSortedTasks := ascSortedTasks
for i := len(descSortedTasks)/2 - 1; i >= 0; i-- {
opp := len(descSortedTasks) - 1 - i
descSortedTasks[i], descSortedTasks[opp] = descSortedTasks[opp], descSortedTasks[i]
}
sorted := referenceTasks
sortTasks(sorted, by)
assert.Equal(t, descReferenceTasks, sorted)
assert.Equal(t, descSortedTasks, sorted)
if diff, equal := messagediff.PrettyDiff(sorted, descSortedTasks); !equal {
t.Errorf("Not Equal, got = %v, want %v, \ndiff: %v", sorted, descSortedTasks, diff)
}
})
}
func TestTaskSort(t *testing.T) {
task1 := &Task{
ID: 1,
Text: "aaa",
Description: "Lorem Ipsum",
Done: true,
DoneAtUnix: 0,
DueDateUnix: 0,
CreatedByID: 1,
ListID: 1,
RepeatAfter: 0,
Priority: 0,
StartDateUnix: 0,
EndDateUnix: 0,
HexColor: "",
PercentDone: 0,
UID: "",
Created: 1543626724,
Updated: 1543626724,
ID: 1,
Text: "aaa",
Description: "Lorem Ipsum",
Done: true,
DoneAtUnix: 1543626000,
ListID: 1,
UID: "JywtBPCESImlyKugvaZWrxmXAFAWXFISMeXYImEh",
Created: 1543626724,
Updated: 1543626724,
}
task2 := &Task{
ID: 2,
Text: "bbb",
Description: "Lorem Ipsum",
Description: "Arem Ipsum",
Done: true,
DoneAtUnix: 0,
DueDateUnix: 0,
DoneAtUnix: 1543626724,
CreatedByID: 1,
ListID: 1,
RepeatAfter: 0,
Priority: 0,
StartDateUnix: 0,
EndDateUnix: 0,
HexColor: "",
PercentDone: 0,
UID: "",
Created: 1543626724,
Updated: 1543626724,
ListID: 2,
PercentDone: 0.3,
StartDateUnix: 1543626724,
Created: 1553626724,
Updated: 1553626724,
}
task3 := &Task{
ID: 3,
Text: "ccc",
Priority: 100,
ID: 3,
Text: "ccc",
DueDateUnix: 1583626724,
Priority: 100,
ListID: 3,
HexColor: "000000",
PercentDone: 0.1,
Updated: 1555555555,
}
task4 := &Task{
ID: 4,
Text: "ddd",
Priority: 1,
ID: 4,
Text: "ddd",
Priority: 1,
StartDateUnix: 1643626724,
ListID: 1,
}
task5 := &Task{
ID: 5,
Text: "efg",
Priority: 50,
UID: "shggzCHQWLhGNMNsOGOCOjcVkInOYjTAnORqTkdL",
DueDateUnix: 1543636724,
Updated: 1565555555,
}
task6 := &Task{
ID: 6,
Text: "eef",
DueDateUnix: 1543616724,
RepeatAfter: 6400,
CreatedByID: 2,
HexColor: "ffffff",
}
task7 := &Task{
ID: 7,
Text: "mmmn",
Description: "Zoremis",
StartDateUnix: 1544600000,
EndDateUnix: 1584600000,
UID: "tyzCZuLMSKhwclJOsDyDcUdyVAPBDOPHNTBOLTcW",
}
task8 := &Task{
ID: 8,
@ -205,13 +215,18 @@ func TestTaskSort(t *testing.T) {
}
task9 := &Task{
ID: 9,
Done: true,
DoneAtUnix: 1573626724,
Text: "a123",
RepeatAfter: 86000,
StartDateUnix: 1544600000,
EndDateUnix: 1544700000,
}
task10 := &Task{
ID: 10,
Text: "zzz",
ID: 10,
Text: "zzz",
Priority: 10,
PercentDone: 1,
}
tasks := []*Task{
@ -228,7 +243,7 @@ func TestTaskSort(t *testing.T) {
}
t.Run("id", func(t *testing.T) {
buildSortTest(
runSortTest(
t,
taskPropertyID,
tasks,
@ -245,5 +260,293 @@ func TestTaskSort(t *testing.T) {
task10,
})
})
t.Run("text", func(t *testing.T) {
runSortTest(
t,
taskPropertyText,
tasks,
[]*Task{
task9,
task1,
task8,
task2,
task3,
task4,
task6,
task5,
task7,
task10,
})
})
t.Run("description", func(t *testing.T) {
runSortTest(
t,
taskPropertyDescription,
tasks,
[]*Task{
task6,
task8,
task5,
task9,
task4,
task3,
task10,
task2,
task1,
task7,
})
})
t.Run("done", func(t *testing.T) {
runSortTest(
t,
taskPropertyDone,
tasks,
[]*Task{
task1,
task2,
task9,
task10,
task5,
task8,
task7,
task3,
task4,
task6,
})
})
t.Run("done at", func(t *testing.T) {
runSortTest(
t,
taskPropertyDoneAtUnix,
tasks,
[]*Task{
task10,
task8,
task5,
task6,
task4,
task3,
task7,
task1,
task2,
task9,
})
})
t.Run("due date", func(t *testing.T) {
runSortTest(
t,
taskPropertyDueDateUnix,
tasks,
[]*Task{
task1,
task2,
task4,
task7,
task8,
task9,
task10,
task6,
task5,
task3,
})
})
t.Run("created by id", func(t *testing.T) {
runSortTest(
t,
taskPropertyCreatedByID,
tasks,
[]*Task{
task5,
task7,
task8,
task10,
task4,
task3,
task1,
task9,
task2,
task6,
})
})
t.Run("list id", func(t *testing.T) {
runSortTest(
t,
taskPropertyListID,
tasks,
[]*Task{
task6,
task9,
task8,
task7,
task5,
task10,
task4,
task1,
task2,
task3,
})
})
t.Run("repeat after", func(t *testing.T) {
runSortTest(
t,
taskPropertyRepeatAfter,
tasks,
[]*Task{
task1,
task4,
task10,
task5,
task7,
task8,
task3,
task2,
task6,
task9,
})
})
t.Run("priority", func(t *testing.T) {
runSortTest(
t,
taskPropertyPriority,
tasks,
[]*Task{
task8,
task7,
task2,
task1,
task9,
task6,
task4,
task10,
task5,
task3,
})
})
t.Run("start date", func(t *testing.T) {
runSortTest(
t,
taskPropertyStartDateUnix,
tasks,
[]*Task{
task3,
task8,
task6,
task1,
task5,
task10,
task2,
task9,
task7,
task4,
})
})
t.Run("end date", func(t *testing.T) {
runSortTest(
t,
taskPropertyEndDateUnix,
tasks,
[]*Task{
task2,
task3,
task10,
task5,
task1,
task6,
task4,
task8,
task9,
task7,
})
})
t.Run("hex color", func(t *testing.T) {
runSortTest(
t,
taskPropertyHexColor,
tasks,
[]*Task{
task8,
task5,
task1,
task4,
task10,
task7,
task2,
task9,
task3,
task6,
})
})
t.Run("percent done", func(t *testing.T) {
runSortTest(
t,
taskPropertyPercentDone,
tasks,
[]*Task{
task4,
task9,
task1,
task5,
task8,
task6,
task7,
task3,
task2,
task10,
})
})
t.Run("uid", func(t *testing.T) {
runSortTest(
t,
taskPropertyUID,
tasks,
[]*Task{
task3,
task6,
task8,
task9,
task10,
task2,
task4,
task1,
task5,
task7,
})
})
t.Run("created", func(t *testing.T) {
runSortTest(
t,
taskPropertyCreated,
tasks,
[]*Task{
task7,
task9,
task10,
task4,
task8,
task6,
task3,
task5,
task1,
task2,
})
})
t.Run("updated", func(t *testing.T) {
runSortTest(
t,
taskPropertyUpdated,
tasks,
[]*Task{
task6,
task8,
task4,
task10,
task9,
task7,
task1,
task2,
task3,
task5,
})
})
}