diff --git a/pkg/search/handlers.go b/pkg/search/handlers.go index 874b85994ca..d0f9ae56833 100644 --- a/pkg/search/handlers.go +++ b/pkg/search/handlers.go @@ -55,12 +55,19 @@ func searchHandler(query *Query) error { hits = append(hits, jsonHits...) } - sort.Sort(hits) - + // add isStarred info if err := setIsStarredFlagOnSearchResults(query.UserId, hits); err != nil { return err } + // sort main result array + sort.Sort(hits) + + // sort tags + for _, hit := range hits { + sort.Strings(hit.Tags) + } + query.Result = hits return nil } diff --git a/pkg/search/handlers_test.go b/pkg/search/handlers_test.go new file mode 100644 index 00000000000..ebfade4dc06 --- /dev/null +++ b/pkg/search/handlers_test.go @@ -0,0 +1,49 @@ +package search + +import ( + "testing" + + "github.com/grafana/grafana/pkg/bus" + m "github.com/grafana/grafana/pkg/models" + . "github.com/smartystreets/goconvey/convey" +) + +func TestSearch(t *testing.T) { + + Convey("Given search query", t, func() { + jsonDashIndex = NewJsonDashIndex("../../public/dashboards/") + query := Query{} + + bus.AddHandler("test", func(query *FindPersistedDashboardsQuery) error { + query.Result = HitList{ + &Hit{Id: 16, Title: "CCAA", Tags: []string{"BB", "AA"}}, + &Hit{Id: 10, Title: "AABB", Tags: []string{"CC", "AA"}}, + &Hit{Id: 15, Title: "BBAA", Tags: []string{"EE", "AA", "BB"}}, + } + return nil + }) + + bus.AddHandler("test", func(query *m.GetUserStarsQuery) error { + query.Result = map[int64]bool{10: true, 12: true} + return nil + }) + + Convey("That is empty", func() { + err := searchHandler(&query) + So(err, ShouldBeNil) + + Convey("should return sorted results", func() { + So(query.Result[0].Title, ShouldEqual, "AABB") + So(query.Result[1].Title, ShouldEqual, "BBAA") + So(query.Result[2].Title, ShouldEqual, "CCAA") + }) + + Convey("should return sorted tags", func() { + So(query.Result[1].Tags[0], ShouldEqual, "AA") + So(query.Result[1].Tags[1], ShouldEqual, "BB") + So(query.Result[1].Tags[2], ShouldEqual, "EE") + }) + }) + + }) +}