Skip to content

Commit

Permalink
Merge pull request #98 from pinpt/GOLD-117
Browse files Browse the repository at this point in the history
fix ability to use multiple groupings
  • Loading branch information
Jeff Haynie authored Jun 29, 2020
2 parents 6eeafc5 + de2c3e6 commit 5c9a509
Show file tree
Hide file tree
Showing 4 changed files with 671 additions and 194 deletions.
4 changes: 2 additions & 2 deletions filterexpr/filterexpr.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ type Filter interface {
}

type filter struct {
expr *ExpressionGroup
expr Filter
}

var _ Filter = (*filter)(nil)
Expand All @@ -37,5 +37,5 @@ func Compile(expr string) (Filter, error) {
return nil, err
}
// fmt.Println(object)
return &filter{object.(*ExpressionGroup)}, nil
return &filter{object.(*ExpressionList)}, nil
}
40 changes: 39 additions & 1 deletion filterexpr/filterexpr_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -176,5 +176,43 @@ func TestStringify(t *testing.T) {
assert := assert.New(t)
filter, err := Compile(`user-id:"a"`)
assert.NoError(err)
assert.Equal("ExpressionGroup[[Expression[Node[user-id=a],,<nil>]]]", filter.String())
assert.Equal("ExpressionList[[ExpressionGroup[[Expression[Node[user-id=a],,<nil>]]]]]", filter.String())
}

func TestMultipleAndClausesWithJoinedOr(t *testing.T) {
assert := assert.New(t)
filter, err := Compile(`(model:"A" AND user_id:"1") OR (model:"B" AND user_id:"2") OR (model:"C" AND user_id:"3") OR (model:"D" AND user_id:"4") OR (model:"E" AND user_id:"5")`)
assert.NoError(err)
assert.True(filter.Test(map[string]interface{}{"model": "A", "user_id": "1"}))
assert.True(filter.Test(map[string]interface{}{"model": "B", "user_id": "2"}))
assert.True(filter.Test(map[string]interface{}{"model": "C", "user_id": "3"}))
assert.True(filter.Test(map[string]interface{}{"model": "D", "user_id": "4"}))
assert.True(filter.Test(map[string]interface{}{"model": "E", "user_id": "5"}))
assert.False(filter.Test(map[string]interface{}{"model": "E", "user_id": "6"}))
}

func TestMultipleAndClausesWithJoinedAnd(t *testing.T) {
assert := assert.New(t)
filter, err := Compile(`(a:"A" AND b:"B") AND (c:"C" AND d:"D")`)
assert.NoError(err)
assert.True(filter.Test(map[string]interface{}{"a": "A", "b": "B", "c": "C", "d": "D"}))
assert.False(filter.Test(map[string]interface{}{"a": "A", "b": "B", "c": "C", "d": "d"}))
}

func TestMultipleAndClausesWithJoinedMixedAndOr1(t *testing.T) {
assert := assert.New(t)
// filter, err := Compile(`(model:"activityfeed.Bookmark" AND user_id:"ecf8fbd624bb9c39") OR (model:"activityfeed.Feed" AND user_id:"ecf8fbd624bb9c39") OR model:"admin.Integration" OR model:"admin.RepoList" OR model:"admin.ProjectList" OR model:"admin.CalendarList" OR model:"admin.Agent" OR model:"admin.Customer" OR model:"admin.CustomerInformation" OR model:"admin.CustomerSubscription" OR model:"admin.User" OR model:"admin.UserMapping" OR model:"admin.Profile" OR model:"registry.Publisher" OR model:"registry.Integration" OR model:"customer.Team" OR model:"pipeline.work.Issue" OR model:"pipeline.work.Sprint" OR model:"pipeline.work.Project" OR model:"pipeline.sourcecode.PullRequest" OR model:"pipeline.sourcecode.PullRequestReview" OR model:"pipeline.sourcecode.Repo" OR model:"admin.IntegrationUser" OR model:"pipeline.work.Retro" OR model:"pipeline.work.RetroNoteGrouping" OR model:"pipeline.work.RetroUserRating" OR model:"pipeline.work.RetroNote" OR model:"pipeline.work.RetroNoteVote" OR model:"pipeline.work.RetroNoteGroupingVote" OR model:"pipeline.work.RetroAction" OR model:"pipeline.work.RetroTalkingPoint" OR model:"datascience.SprintHealth" OR model:"datascience.IssueForecast" OR model:"admin.TeamSetting" OR model:"pipeline.work.Plan" OR model:"pipeline.work.PlanUser" OR model:"pipeline.work.PlannedIssue" OR model:"agent.Enrollment" OR model:"agent.IntegrationInstance" OR model:"registry.Release"`)
filter, err := Compile(`(a:"A" AND b:"B") OR (c:"C" AND d:"D") AND (e:"e")`)
assert.NoError(err)
assert.True(filter.Test(map[string]interface{}{"c": "C", "d": "D", "e": "e"}))
assert.True(filter.Test(map[string]interface{}{"a": "A", "b": "B", "e": "e"}))
}

func TestGOLD117(t *testing.T) {
assert := assert.New(t)
filter, err := Compile(`(model:"activityfeed.Bookmark" AND user_id:"ecf8fbd624bb9c39") OR (model:"activityfeed.Feed" AND user_id:"ecf8fbd624bb9c39") OR model:"admin.Integration" OR model:"admin.RepoList" OR model:"admin.ProjectList" OR model:"admin.CalendarList" OR model:"admin.Agent" OR model:"admin.Customer" OR model:"admin.CustomerInformation" OR model:"admin.CustomerSubscription" OR model:"admin.User" OR model:"admin.UserMapping" OR model:"admin.Profile" OR model:"registry.Publisher" OR model:"registry.Integration" OR model:"customer.Team" OR model:"pipeline.work.Issue" OR model:"pipeline.work.Sprint" OR model:"pipeline.work.Project" OR model:"pipeline.sourcecode.PullRequest" OR model:"pipeline.sourcecode.PullRequestReview" OR model:"pipeline.sourcecode.Repo" OR model:"admin.IntegrationUser" OR model:"pipeline.work.Retro" OR model:"pipeline.work.RetroNoteGrouping" OR model:"pipeline.work.RetroUserRating" OR model:"pipeline.work.RetroNote" OR model:"pipeline.work.RetroNoteVote" OR model:"pipeline.work.RetroNoteGroupingVote" OR model:"pipeline.work.RetroAction" OR model:"pipeline.work.RetroTalkingPoint" OR model:"datascience.SprintHealth" OR model:"datascience.IssueForecast" OR model:"admin.TeamSetting" OR model:"pipeline.work.Plan" OR model:"pipeline.work.PlanUser" OR model:"pipeline.work.PlannedIssue" OR model:"agent.Enrollment" OR model:"agent.IntegrationInstance" OR model:"registry.Release"`)
assert.NoError(err)
assert.True(filter.Test(map[string]interface{}{"model": "activityfeed.Bookmark", "user_id": "ecf8fbd624bb9c39"}))
assert.True(filter.Test(map[string]interface{}{"model": "activityfeed.Feed", "user_id": "ecf8fbd624bb9c39"}))
assert.True(filter.Test(map[string]interface{}{"model": "admin.Integration"}))
}
Loading

0 comments on commit 5c9a509

Please sign in to comment.