diff --git a/pkg/db/fixtures/saved_filters.yml b/pkg/db/fixtures/saved_filters.yml index 844ceb1a4..43cc486ca 100644 --- a/pkg/db/fixtures/saved_filters.yml +++ b/pkg/db/fixtures/saved_filters.yml @@ -1,5 +1,5 @@ - id: 1 - filters: '{"sort_by":null,"order_by":null,"filter_by":["start_date","end_date","due_date"],"filter_value":["2018-12-11T03:46:40+00:00","2018-12-13T11:20:01+00:00","2018-11-29T14:00:00+00:00"],"filter_comparator":["greater","less","greater"],"filter_concat":"","filter_include_nulls":false}' + filters: '{"sort_by":null,"order_by":null,"filter":"start_date > \u00272018-12-11T03:46:40+00:00\u0027 || end_date < \u00272018-12-13T11:20:01+00:00\u0027 || due_date > \u00272018-11-29T14:00:00+00:00\u0027","filter_include_nulls":false}' title: testfilter1 owner_id: 1 updated: 2020-09-08 15:13:12 diff --git a/pkg/models/task_collection_test.go b/pkg/models/task_collection_test.go index 52d9117c8..a3e72af6b 100644 --- a/pkg/models/task_collection_test.go +++ b/pkg/models/task_collection_test.go @@ -29,6 +29,8 @@ import ( "gopkg.in/d4l3k/messagediff.v1" ) +// To only run a selected tests: ^\QTestTaskCollection_ReadAll\E$/^\QReadAll_Tasks_with_range\E$ + func TestTaskCollection_ReadAll(t *testing.T) { // Dummy users user1 := &user.User{ @@ -794,9 +796,6 @@ func TestTaskCollection_ReadAll(t *testing.T) { { name: "ReadAll Tasks with range", fields: fields{ - //FilterBy: []string{"start_date", "end_date"}, - //FilterValue: []string{"2018-12-11T03:46:40+00:00", "2018-12-13T11:20:01+00:00"}, - //FilterComparator: []string{"greater", "less"}, Filter: "start_date > '2018-12-11T03:46:40+00:00' || end_date < '2018-12-13T11:20:01+00:00'", }, args: defaultArgs, @@ -810,9 +809,7 @@ func TestTaskCollection_ReadAll(t *testing.T) { { name: "ReadAll Tasks with different range", fields: fields{ - FilterBy: []string{"start_date", "end_date"}, - FilterValue: []string{"2018-12-13T11:20:00+00:00", "2018-12-16T22:40:00+00:00"}, - FilterComparator: []string{"greater", "less"}, + Filter: "start_date > '2018-12-13T11:20:00+00:00' || end_date < '2018-12-16T22:40:00+00:00'", }, args: defaultArgs, want: []*Task{ @@ -824,9 +821,7 @@ func TestTaskCollection_ReadAll(t *testing.T) { { name: "ReadAll Tasks with range with start date only", fields: fields{ - FilterBy: []string{"start_date"}, - FilterValue: []string{"2018-12-12T07:33:20+00:00"}, - FilterComparator: []string{"greater"}, + Filter: "start_date > '2018-12-12T07:33:20+00:00'", }, args: defaultArgs, want: []*Task{}, @@ -835,9 +830,7 @@ func TestTaskCollection_ReadAll(t *testing.T) { { name: "ReadAll Tasks with range with start date only and greater equals", fields: fields{ - FilterBy: []string{"start_date"}, - FilterValue: []string{"2018-12-12T07:33:20+00:00"}, - FilterComparator: []string{"greater_equals"}, + Filter: "start_date >= '2018-12-12T07:33:20+00:00'", }, args: defaultArgs, want: []*Task{ @@ -849,9 +842,7 @@ func TestTaskCollection_ReadAll(t *testing.T) { { name: "undone tasks only", fields: fields{ - FilterBy: []string{"done"}, - FilterValue: []string{"false"}, - FilterComparator: []string{"equals"}, + Filter: "done = false", }, args: defaultArgs, want: []*Task{ @@ -895,9 +886,7 @@ func TestTaskCollection_ReadAll(t *testing.T) { { name: "done tasks only", fields: fields{ - FilterBy: []string{"done"}, - FilterValue: []string{"true"}, - FilterComparator: []string{"equals"}, + Filter: "done = true", }, args: defaultArgs, want: []*Task{ @@ -908,9 +897,7 @@ func TestTaskCollection_ReadAll(t *testing.T) { { name: "done tasks only - not equals done", fields: fields{ - FilterBy: []string{"done"}, - FilterValue: []string{"false"}, - FilterComparator: []string{"not_equals"}, + Filter: "done != false", }, args: defaultArgs, want: []*Task{ @@ -921,10 +908,8 @@ func TestTaskCollection_ReadAll(t *testing.T) { { name: "range with nulls", fields: fields{ - FilterBy: []string{"start_date", "end_date"}, - FilterValue: []string{"2018-12-11T03:46:40+00:00", "2018-12-13T11:20:01+00:00"}, - FilterComparator: []string{"greater", "less"}, FilterIncludeNulls: true, + Filter: "start_date > '2018-12-11T03:46:40+00:00' || end_date < '2018-12-13T11:20:01+00:00'", }, args: defaultArgs, want: []*Task{ @@ -979,9 +964,26 @@ func TestTaskCollection_ReadAll(t *testing.T) { { name: "filtered with like", fields: fields{ - FilterBy: []string{"title"}, - FilterValue: []string{"with"}, - FilterComparator: []string{"like"}, + Filter: "title ~ with", + }, + args: defaultArgs, + want: []*Task{ + task7, + task8, + task9, + task27, + task28, + task29, + task30, + task31, + task33, + }, + wantErr: false, + }, + { + name: "filtered with like and '", + fields: fields{ + Filter: "title ~ 'with'", }, args: defaultArgs, want: []*Task{ @@ -1000,9 +1002,7 @@ func TestTaskCollection_ReadAll(t *testing.T) { { name: "filtered reminder dates", fields: fields{ - FilterBy: []string{"reminders", "reminders"}, - FilterValue: []string{"2018-10-01T00:00:00+00:00", "2018-12-10T00:00:00+00:00"}, - FilterComparator: []string{"greater", "less"}, + Filter: "reminders > '2018-10-01T00:00:00+00:00' && reminders < '2018-12-10T00:00:00+00:00'", }, args: defaultArgs, want: []*Task{ @@ -1014,9 +1014,7 @@ func TestTaskCollection_ReadAll(t *testing.T) { { name: "filter in", fields: fields{ - FilterBy: []string{"id"}, - FilterValue: []string{"1,2,34"}, // Task 34 is forbidden for user 1 - FilterComparator: []string{"in"}, + Filter: "id ?= '1,2,34'", }, args: defaultArgs, want: []*Task{ @@ -1028,9 +1026,7 @@ func TestTaskCollection_ReadAll(t *testing.T) { { name: "filter assignees by username", fields: fields{ - FilterBy: []string{"assignees"}, - FilterValue: []string{"user1"}, - FilterComparator: []string{"equals"}, + Filter: "assignees = 'user1'", }, args: defaultArgs, want: []*Task{ @@ -1041,9 +1037,7 @@ func TestTaskCollection_ReadAll(t *testing.T) { { name: "filter assignees by username with users field name", fields: fields{ - FilterBy: []string{"users"}, - FilterValue: []string{"user1"}, - FilterComparator: []string{"equals"}, + Filter: "users = 'user1'", }, args: defaultArgs, want: nil, @@ -1052,9 +1046,7 @@ func TestTaskCollection_ReadAll(t *testing.T) { { name: "filter assignees by username with user_id field name", fields: fields{ - FilterBy: []string{"user_id"}, - FilterValue: []string{"user1"}, - FilterComparator: []string{"equals"}, + Filter: "user_id = 'user1'", }, args: defaultArgs, want: nil, @@ -1063,9 +1055,7 @@ func TestTaskCollection_ReadAll(t *testing.T) { { name: "filter assignees by multiple username", fields: fields{ - FilterBy: []string{"assignees", "assignees"}, - FilterValue: []string{"user1", "user2"}, - FilterComparator: []string{"equals", "equals"}, + Filter: "assignees = 'user1' || assignees = 'user2'", }, args: defaultArgs, want: []*Task{ @@ -1077,9 +1067,7 @@ func TestTaskCollection_ReadAll(t *testing.T) { { name: "filter assignees by numbers", fields: fields{ - FilterBy: []string{"assignees"}, - FilterValue: []string{"1"}, - FilterComparator: []string{"equals"}, + Filter: "assignees = 1", }, args: defaultArgs, want: []*Task{}, @@ -1088,9 +1076,7 @@ func TestTaskCollection_ReadAll(t *testing.T) { { name: "filter assignees by name with like", fields: fields{ - FilterBy: []string{"assignees"}, - FilterValue: []string{"user"}, - FilterComparator: []string{"like"}, + Filter: "assignees ~ 'user'", }, args: defaultArgs, want: []*Task{}, @@ -1099,9 +1085,7 @@ func TestTaskCollection_ReadAll(t *testing.T) { { name: "filter assignees in by id", fields: fields{ - FilterBy: []string{"assignees"}, - FilterValue: []string{"1,2"}, - FilterComparator: []string{"in"}, + Filter: "assignees ?= '1,2'", }, args: defaultArgs, want: []*Task{}, @@ -1110,9 +1094,7 @@ func TestTaskCollection_ReadAll(t *testing.T) { { name: "filter assignees in by username", fields: fields{ - FilterBy: []string{"assignees"}, - FilterValue: []string{"user1,user2"}, - FilterComparator: []string{"in"}, + Filter: "assignees ?= 'user1,user2'", }, args: defaultArgs, want: []*Task{ @@ -1124,9 +1106,7 @@ func TestTaskCollection_ReadAll(t *testing.T) { { name: "filter labels", fields: fields{ - FilterBy: []string{"labels"}, - FilterValue: []string{"4"}, - FilterComparator: []string{"equals"}, + Filter: "labels = 4", }, args: defaultArgs, want: []*Task{ @@ -1137,11 +1117,9 @@ func TestTaskCollection_ReadAll(t *testing.T) { wantErr: false, }, { - name: "filter project", + name: "filter project_id", fields: fields{ - FilterBy: []string{"project_id"}, - FilterValue: []string{"6"}, - FilterComparator: []string{"equals"}, + Filter: "project_id = 6", }, args: defaultArgs, want: []*Task{ @@ -1149,13 +1127,31 @@ func TestTaskCollection_ReadAll(t *testing.T) { }, wantErr: false, }, + { + name: "filter project", + fields: fields{ + Filter: "project = 6", + }, + args: defaultArgs, + want: []*Task{ + task15, + }, + wantErr: false, + }, + { + name: "filter project forbidden", + fields: fields{ + Filter: "project_id = 20", // user1 has no access to project 20 + }, + args: defaultArgs, + want: []*Task{}, + wantErr: false, + }, // TODO filter parent project? { name: "filter by index", fields: fields{ - FilterBy: []string{"index"}, - FilterValue: []string{"5"}, - FilterComparator: []string{"equals"}, + Filter: "index = 5", }, args: defaultArgs, want: []*Task{