diff --git a/pkg/models/task_collection_filter.go b/pkg/models/task_collection_filter.go index a28040057..47d804ee8 100644 --- a/pkg/models/task_collection_filter.go +++ b/pkg/models/task_collection_filter.go @@ -134,8 +134,8 @@ func parseFilterFromExpression(f fexpr.ExprGroup, loc *time.Location) (filter *t reflectValue, filter.value, err = getNativeValueForTaskField(filter.field, filter.comparator, value, loc) if err != nil { return nil, ErrInvalidTaskFilterValue{ - Value: filter.field, - Field: value, + Field: filter.field, + Value: value, } } if reflectValue != nil { @@ -256,6 +256,8 @@ func getValueForField(field reflect.StructField, rawValue string, loc *time.Loca loc = config.GetTimeZone() } + rawValue = strings.TrimSpace(rawValue) + switch field.Type.Kind() { case reflect.Int64: value, err = strconv.ParseInt(rawValue, 10, 64) diff --git a/pkg/models/task_collection_filter_test.go b/pkg/models/task_collection_filter_test.go index 2b53af063..fa3569b97 100644 --- a/pkg/models/task_collection_filter_test.go +++ b/pkg/models/task_collection_filter_test.go @@ -66,6 +66,10 @@ func TestParseFilter(t *testing.T) { require.Len(t, result, 1) assert.Equal(t, "project_id", result[0].field) assert.Equal(t, taskFilterComparatorIn, result[0].comparator) + require.Len(t, result[0].value, 3) + assert.Equal(t, int64(1), result[0].value.([]interface{})[0]) + assert.Equal(t, int64(2), result[0].value.([]interface{})[1]) + assert.Equal(t, int64(3), result[0].value.([]interface{})[2]) }) t.Run("use project for project_id", func(t *testing.T) { result, err := getTaskFiltersFromFilterString("project in 1,2,3", "UTC") @@ -73,6 +77,21 @@ func TestParseFilter(t *testing.T) { require.NoError(t, err) require.Len(t, result, 1) assert.Equal(t, "project_id", result[0].field) + require.Len(t, result[0].value, 3) + assert.Equal(t, int64(1), result[0].value.([]interface{})[0]) + assert.Equal(t, int64(2), result[0].value.([]interface{})[1]) + assert.Equal(t, int64(3), result[0].value.([]interface{})[2]) + }) + t.Run("project in with spaces", func(t *testing.T) { + result, err := getTaskFiltersFromFilterString("project in 1, 2, 3", "UTC") + + require.NoError(t, err) + require.Len(t, result, 1) + assert.Equal(t, "project_id", result[0].field) + require.Len(t, result[0].value, 3) + assert.Equal(t, int64(1), result[0].value.([]interface{})[0]) + assert.Equal(t, int64(2), result[0].value.([]interface{})[1]) + assert.Equal(t, int64(3), result[0].value.([]interface{})[2]) }) t.Run("date math strings", func(t *testing.T) { result, err := getTaskFiltersFromFilterString("due_date < now+30d", "UTC")