diff --git a/pkg/models/task_collection_filter.go b/pkg/models/task_collection_filter.go index 7cabbeff9..7bea373de 100644 --- a/pkg/models/task_collection_filter.go +++ b/pkg/models/task_collection_filter.go @@ -362,7 +362,14 @@ func getNativeValueForTaskField(fieldName string, comparator taskFilterComparato if realFieldName == "Assignees" || realFieldName == "Creator" { vals := strings.Split(value, ",") - valueSlice := append([]string{}, vals...) + valueSlice := make([]string, 0, len(vals)) + for _, val := range vals { + val = strings.TrimSpace(val) + if val == "" { + continue + } + valueSlice = append(valueSlice, val) + } return nil, valueSlice, nil } diff --git a/pkg/models/task_collection_filter_test.go b/pkg/models/task_collection_filter_test.go index b34f47bb0..d5544a743 100644 --- a/pkg/models/task_collection_filter_test.go +++ b/pkg/models/task_collection_filter_test.go @@ -238,6 +238,24 @@ func TestParseFilter(t *testing.T) { assert.Equal(t, taskFilterComparatorIn, result[0].comparator) assert.Equal(t, []string{"user1", "user6"}, result[0].value) }) + t.Run("creator usernames are trimmed of surrounding whitespace", func(t *testing.T) { + result, err := getTaskFiltersFromFilterString("creator in 'user1, user6'", "UTC") + + require.NoError(t, err) + require.Len(t, result, 1) + assert.Equal(t, "creator", result[0].field) + assert.Equal(t, taskFilterComparatorIn, result[0].comparator) + assert.Equal(t, []string{"user1", "user6"}, result[0].value) + }) + t.Run("creator usernames drop empty entries from stray commas", func(t *testing.T) { + result, err := getTaskFiltersFromFilterString("creator in 'user1, , user6,'", "UTC") + + require.NoError(t, err) + require.Len(t, result, 1) + assert.Equal(t, "creator", result[0].field) + assert.Equal(t, taskFilterComparatorIn, result[0].comparator) + assert.Equal(t, []string{"user1", "user6"}, result[0].value) + }) t.Run("less than or equal comparator", func(t *testing.T) { result, err := getTaskFiltersFromFilterString("percent_done <= 50", "UTC")