Sort Order for tasks #110
|
@ -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,
|
||||
})
|
||||
})
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue