Skip to content

Commit

Permalink
fixed searchOptions structure
Browse files Browse the repository at this point in the history
  • Loading branch information
almostinf committed Sep 18, 2023
1 parent 327a57f commit 4e22241
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 42 deletions.
20 changes: 10 additions & 10 deletions api/controller/triggers.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,17 +66,17 @@ func GetAllTriggers(database moira.Database) (*dto.TriggersList, *api.ErrorRespo
}

// SearchTriggers gets trigger page and filter trigger by tags and search request terms
func SearchTriggers(database moira.Database, searcher moira.Searcher, options moira.SearchOptions, createPager bool, pagerID string) (*dto.TriggersList, *api.ErrorResponse) { //nolint
func SearchTriggers(database moira.Database, searcher moira.Searcher, options moira.SearchOptions) (*dto.TriggersList, *api.ErrorResponse) { //nolint
var searchResults []*moira.SearchResult
var total int64
pagerShouldExist := pagerID != ""
pagerShouldExist := options.PagerID != ""

if pagerShouldExist && (options.SearchString != "" || len(options.Tags) > 0) {
return nil, api.ErrorInvalidRequest(fmt.Errorf("cannot handle request with search string or tags and pager ID set"))
}
if pagerShouldExist {
var err error
searchResults, total, err = database.GetTriggersSearchResults(pagerID, options.Page, options.Size)
searchResults, total, err = database.GetTriggersSearchResults(options.PagerID, options.Page, options.Size)
if err != nil {
return nil, api.ErrorInternalServer(err)
}
Expand All @@ -85,7 +85,7 @@ func SearchTriggers(database moira.Database, searcher moira.Searcher, options mo
}
} else {
var err error
if createPager {
if options.CreatePager {
options.Size = pageSizeUnlimited
}
searchResults, total, err = searcher.SearchTriggers(options)
Expand All @@ -94,16 +94,16 @@ func SearchTriggers(database moira.Database, searcher moira.Searcher, options mo
}
}

if createPager && !pagerShouldExist {
if options.CreatePager && !pagerShouldExist {
uuid4, err := uuid.NewV4()
if err != nil {
return nil, api.ErrorInternalServer(err)
}
pagerID = uuid4.String()
database.SaveTriggersSearchResults(pagerID, searchResults) //nolint
options.PagerID = uuid4.String()
database.SaveTriggersSearchResults(options.PagerID, searchResults) //nolint
}

if createPager {
if options.CreatePager {
var from, to int64 = 0, int64(len(searchResults))
if options.Size >= 0 {
from = int64(math.Min(float64(options.Page*options.Size), float64(len(searchResults))))
Expand All @@ -123,8 +123,8 @@ func SearchTriggers(database moira.Database, searcher moira.Searcher, options mo
}

var pagerIDPtr *string
if pagerID != "" {
pagerIDPtr = &pagerID
if options.PagerID != "" {
pagerIDPtr = &options.PagerID
}

triggersList := dto.TriggersList{
Expand Down
62 changes: 34 additions & 28 deletions api/controller/triggers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -185,13 +185,15 @@ func TestSearchTriggers(t *testing.T) {
SearchString: "",
CreatedBy: "",
NeedSearchByCreatedBy: false,
CreatePager: false,
PagerID: "",
}

Convey("No tags, no text, onlyErrors = false, ", t, func() {
Convey("Page is bigger than triggers number", func() {
mockIndex.EXPECT().SearchTriggers(searchOptions).Return(triggerSearchResults, exp, nil)
mockDatabase.EXPECT().GetTriggerChecks(triggerIDs).Return(triggersPointers, nil)
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions, false, "")
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions)
So(err, ShouldBeNil)
So(list, ShouldResemble, &dto.TriggersList{
List: triggerChecks,
Expand All @@ -205,7 +207,7 @@ func TestSearchTriggers(t *testing.T) {
searchOptions.Size = -1
mockIndex.EXPECT().SearchTriggers(searchOptions).Return(triggerSearchResults, exp, nil)
mockDatabase.EXPECT().GetTriggerChecks(triggerIDs).Return(triggersPointers, nil)
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions, false, "")
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions)
So(err, ShouldBeNil)
So(list, ShouldResemble, &dto.TriggersList{
List: triggerChecks,
Expand All @@ -219,7 +221,7 @@ func TestSearchTriggers(t *testing.T) {
searchOptions.Size = 10
mockIndex.EXPECT().SearchTriggers(searchOptions).Return(triggerSearchResults[:10], exp, nil)
mockDatabase.EXPECT().GetTriggerChecks(triggerIDs[:10]).Return(triggersPointers[:10], nil)
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions, false, "")
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions)
So(err, ShouldBeNil)
So(list, ShouldResemble, &dto.TriggersList{
List: triggerChecks[:10],
Expand All @@ -232,7 +234,7 @@ func TestSearchTriggers(t *testing.T) {
searchOptions.Page = 1
mockIndex.EXPECT().SearchTriggers(searchOptions).Return(triggerSearchResults[10:20], exp, nil)
mockDatabase.EXPECT().GetTriggerChecks(triggerIDs[10:20]).Return(triggersPointers[10:20], nil)
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions, false, "")
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions)
So(err, ShouldBeNil)
So(list, ShouldResemble, &dto.TriggersList{
List: triggerChecks[10:20],
Expand All @@ -252,7 +254,7 @@ func TestSearchTriggers(t *testing.T) {
// superTrigger31 is the only trigger without errors
mockIndex.EXPECT().SearchTriggers(searchOptions).Return(triggerSearchResults[:10], exp, nil)
mockDatabase.EXPECT().GetTriggerChecks(triggerIDs[:10]).Return(triggersPointers[:10], nil)
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions, false, "")
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions)
So(err, ShouldBeNil)
So(list, ShouldResemble, &dto.TriggersList{
List: triggerChecks[0:10],
Expand All @@ -266,7 +268,7 @@ func TestSearchTriggers(t *testing.T) {
exp = 2
mockIndex.EXPECT().SearchTriggers(searchOptions).Return(triggerSearchResults[1:3], exp, nil)
mockDatabase.EXPECT().GetTriggerChecks(triggerIDs[1:3]).Return(triggersPointers[1:3], nil)
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions, false, "")
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions)
So(err, ShouldBeNil)
So(list, ShouldResemble, &dto.TriggersList{
List: triggerChecks[1:3],
Expand All @@ -281,7 +283,7 @@ func TestSearchTriggers(t *testing.T) {
exp = 1
mockIndex.EXPECT().SearchTriggers(searchOptions).Return(triggerSearchResults[2:3], exp, nil)
mockDatabase.EXPECT().GetTriggerChecks(triggerIDs[2:3]).Return(triggersPointers[2:3], nil)
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions, false, "")
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions)
So(err, ShouldBeNil)
So(list, ShouldResemble, &dto.TriggersList{
List: triggerChecks[2:3],
Expand Down Expand Up @@ -322,7 +324,7 @@ func TestSearchTriggers(t *testing.T) {

mockIndex.EXPECT().SearchTriggers(searchOptions).Return(deadlyTrapsSearchResults, exp, nil)
mockDatabase.EXPECT().GetTriggerChecks(deadlyTrapsTriggerIDs).Return(deadlyTrapsPointers, nil)
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions, false, "")
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions)
So(err, ShouldBeNil)
So(list, ShouldResemble, &dto.TriggersList{
List: deadlyTraps,
Expand All @@ -338,7 +340,7 @@ func TestSearchTriggers(t *testing.T) {
exp = 7
mockIndex.EXPECT().SearchTriggers(searchOptions).Return(triggerSearchResults[9:16], exp, nil)
mockDatabase.EXPECT().GetTriggerChecks(triggerIDs[9:16]).Return(triggersPointers[9:16], nil)
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions, false, "")
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions)
So(err, ShouldBeNil)
So(list, ShouldResemble, &dto.TriggersList{
List: triggerChecks[9:16],
Expand All @@ -355,7 +357,7 @@ func TestSearchTriggers(t *testing.T) {
exp = 2
mockIndex.EXPECT().SearchTriggers(searchOptions).Return(triggerSearchResults[22:24], exp, nil)
mockDatabase.EXPECT().GetTriggerChecks(triggerIDs[22:24]).Return(triggersPointers[22:24], nil)
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions, false, "")
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions)
So(err, ShouldBeNil)
So(list, ShouldResemble, &dto.TriggersList{
List: triggerChecks[22:24],
Expand All @@ -373,7 +375,7 @@ func TestSearchTriggers(t *testing.T) {
exp = 2
mockIndex.EXPECT().SearchTriggers(searchOptions).Return(triggerSearchResults[27:29], exp, nil)
mockDatabase.EXPECT().GetTriggerChecks(triggerIDs[27:29]).Return(triggersPointers[27:29], nil)
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions, false, "")
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions)
So(err, ShouldBeNil)
So(list, ShouldResemble, &dto.TriggersList{
List: triggerChecks[27:29],
Expand All @@ -391,7 +393,7 @@ func TestSearchTriggers(t *testing.T) {
exp = 3
mockIndex.EXPECT().SearchTriggers(searchOptions).Return(triggerSearchResults[6:9], exp, nil)
mockDatabase.EXPECT().GetTriggerChecks(triggerIDs[6:9]).Return(triggersPointers[6:9], nil)
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions, false, "")
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions)
So(err, ShouldBeNil)
So(list, ShouldResemble, &dto.TriggersList{
List: triggerChecks[6:9],
Expand All @@ -417,7 +419,7 @@ func TestSearchTriggers(t *testing.T) {
Convey("Error from searcher", func() {
searcherError := fmt.Errorf("very bad request")
mockIndex.EXPECT().SearchTriggers(searchOptions).Return(make([]*moira.SearchResult, 0), int64(0), searcherError)
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions, false, "")
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions)
So(err, ShouldNotBeNil)
So(list, ShouldBeNil)
})
Expand All @@ -427,81 +429,85 @@ func TestSearchTriggers(t *testing.T) {
searcherError := fmt.Errorf("very bad request")
mockIndex.EXPECT().SearchTriggers(searchOptions).Return(triggerSearchResults, exp, nil)
mockDatabase.EXPECT().GetTriggerChecks(triggerIDs).Return(nil, searcherError)
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions, false, "")
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions)
So(err, ShouldNotBeNil)
So(list, ShouldBeNil)
})

Convey("Error on passed search elements and pagerID", func() {
searchOptions.Tags = []string{"test"}
searchOptions.SearchString = "test"
pagerID := "test"
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions, false, pagerID)
searchOptions.PagerID = "test"
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions)
So(err, ShouldNotBeNil)
So(list, ShouldBeNil)
})
})

searchOptions.PagerID = ""

Convey("Search with pager", t, func() {
searchOptions.SearchString = ""
searchOptions.Tags = []string{}
Convey("Create pager", func() {
pagerID := ""
searchOptions.Page = 0
searchOptions.Size = -1
searchOptions.CreatePager = true
exp = 31
gomock.InOrder(
mockIndex.EXPECT().SearchTriggers(searchOptions).Return(triggerSearchResults, exp, nil),
mockDatabase.EXPECT().SaveTriggersSearchResults(gomock.Any(), triggerSearchResults).Return(nil).Do(func(pID string, _ interface{}) {
pagerID = pID
searchOptions.PagerID = pID
}),
mockDatabase.EXPECT().GetTriggerChecks(triggerIDs).Return(triggersPointers, nil),
)
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions, true, "")
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions)
So(err, ShouldBeNil)
So(list, ShouldResemble, &dto.TriggersList{
List: triggerChecks,
Total: &exp,
Page: &searchOptions.Page,
Size: &searchOptions.Size,
Pager: &pagerID,
Pager: &searchOptions.PagerID,
})
})
Convey("Use pager", func() {
pagerID := "TestPagerID"
searchOptions.PagerID = "TestPagerID"
searchOptions.Page = 0
searchOptions.Size = -1
searchOptions.CreatePager = false
var exp int64 = 31
gomock.InOrder(
mockDatabase.EXPECT().GetTriggersSearchResults(pagerID, searchOptions.Page, searchOptions.Size).Return(triggerSearchResults, exp, nil),
mockDatabase.EXPECT().GetTriggersSearchResults(searchOptions.PagerID, searchOptions.Page, searchOptions.Size).Return(triggerSearchResults, exp, nil),
mockDatabase.EXPECT().GetTriggerChecks(triggerIDs).Return(triggersPointers, nil),
)
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions, false, pagerID)
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions)
So(err, ShouldBeNil)
So(list, ShouldResemble, &dto.TriggersList{
List: triggerChecks,
Total: &exp,
Page: &searchOptions.Page,
Size: &searchOptions.Size,
Pager: &pagerID,
Pager: &searchOptions.PagerID,
})
})
Convey("Use pager and page size higher than amount of search results", func() {
pagerID := "TestPagerID"
searchOptions.PagerID = "TestPagerID"
var exp int64 = 2
searchOptions.Size = 10
searchOptions.CreatePager = false
gomock.InOrder(
mockDatabase.EXPECT().GetTriggersSearchResults(pagerID, searchOptions.Page, searchOptions.Size).Return(triggerSearchResults[:2], exp, nil),
mockDatabase.EXPECT().GetTriggersSearchResults(searchOptions.PagerID, searchOptions.Page, searchOptions.Size).Return(triggerSearchResults[:2], exp, nil),
mockDatabase.EXPECT().GetTriggerChecks(triggerIDs[:2]).Return(triggersPointers[:2], nil),
)
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions, false, pagerID)
list, err := SearchTriggers(mockDatabase, mockIndex, searchOptions)
So(err, ShouldBeNil)
So(list, ShouldResemble, &dto.TriggersList{
List: triggerChecks[:2],
Total: &exp,
Page: &searchOptions.Page,
Size: &searchOptions.Size,
Pager: &pagerID,
Pager: &searchOptions.PagerID,
})
})
})
Expand Down
7 changes: 3 additions & 4 deletions api/handler/triggers.go
Original file line number Diff line number Diff line change
Expand Up @@ -245,12 +245,11 @@ func searchTriggers(writer http.ResponseWriter, request *http.Request) {
SearchString: getSearchRequestString(request),
CreatedBy: createdBy,
NeedSearchByCreatedBy: ok,
CreatePager: middleware.GetCreatePager(request),
PagerID: middleware.GetPagerID(request),
}

createPager := middleware.GetCreatePager(request)
pagerID := middleware.GetPagerID(request)

triggersList, errorResponse := controller.SearchTriggers(database, searchIndex, searchOptions, createPager, pagerID)
triggersList, errorResponse := controller.SearchTriggers(database, searchIndex, searchOptions)
if errorResponse != nil {
render.Render(writer, request, errorResponse) //nolint
return
Expand Down
2 changes: 2 additions & 0 deletions datatypes.go
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,8 @@ type SearchOptions struct {
Tags []string
CreatedBy string
NeedSearchByCreatedBy bool
CreatePager bool
PagerID string
}

// MaintenanceCheck set maintenance user, time
Expand Down

0 comments on commit 4e22241

Please sign in to comment.