| 
									
										
										
										
											2019-10-11 23:08:15 +08:00
										 |  |  | package search | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2021-05-19 00:24:42 +08:00
										 |  |  | 	"context" | 
					
						
							| 
									
										
										
										
											2019-10-11 23:08:15 +08:00
										 |  |  | 	"testing" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-24 21:24:55 +08:00
										 |  |  | 	"github.com/stretchr/testify/assert" | 
					
						
							|  |  |  | 	"github.com/stretchr/testify/mock" | 
					
						
							|  |  |  | 	"github.com/stretchr/testify/require" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/infra/db/dbtest" | 
					
						
							| 
									
										
										
										
											2022-05-24 21:24:55 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/services/dashboards" | 
					
						
							| 
									
										
										
										
											2025-01-30 07:44:42 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/services/featuremgmt" | 
					
						
							| 
									
										
										
										
											2023-01-30 22:17:53 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/services/search/model" | 
					
						
							| 
									
										
										
										
											2022-05-19 20:32:10 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/services/star" | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/services/star/startest" | 
					
						
							| 
									
										
										
										
											2022-08-10 17:56:48 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/services/user" | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/services/user/usertest" | 
					
						
							| 
									
										
										
										
											2019-10-11 23:08:15 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestSearch_SortedResults(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-05-19 20:32:10 +08:00
										 |  |  | 	ss := startest.NewStarServiceFake() | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 	db := dbtest.NewFakeDB() | 
					
						
							|  |  |  | 	us := usertest.NewUserServiceFake() | 
					
						
							| 
									
										
										
										
											2022-05-24 21:24:55 +08:00
										 |  |  | 	ds := dashboards.NewFakeDashboardService(t) | 
					
						
							| 
									
										
										
										
											2023-03-30 13:29:52 +08:00
										 |  |  | 	ds.On("SearchDashboards", mock.Anything, mock.AnythingOfType("*dashboards.FindPersistedDashboardsQuery")).Return(model.HitList{ | 
					
						
							| 
									
										
										
										
											2024-11-15 23:51:31 +08:00
										 |  |  | 		&model.Hit{UID: "test", Title: "CCAA", Type: "dash-db", Tags: []string{"BB", "AA"}}, | 
					
						
							|  |  |  | 		&model.Hit{UID: "test2", Title: "AABB", Type: "dash-db", Tags: []string{"CC", "AA"}}, | 
					
						
							|  |  |  | 		&model.Hit{UID: "test3", Title: "BBAA", Type: "dash-db", Tags: []string{"EE", "AA", "BB"}}, | 
					
						
							|  |  |  | 		&model.Hit{UID: "test4", Title: "bbAAa", Type: "dash-db", Tags: []string{"EE", "AA", "BB"}}, | 
					
						
							|  |  |  | 		&model.Hit{UID: "test5", Title: "FOLDER", Type: "dash-folder"}, | 
					
						
							| 
									
										
										
										
											2023-03-30 13:29:52 +08:00
										 |  |  | 	}, nil) | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 	us.ExpectedSignedInUser = &user.SignedInUser{IsGrafanaAdmin: true} | 
					
						
							| 
									
										
										
										
											2024-11-15 23:51:31 +08:00
										 |  |  | 	ss.ExpectedUserStars = &star.GetUserStarsResult{UserStars: map[string]bool{"test2": true, "test7": true}} | 
					
						
							| 
									
										
										
										
											2022-03-21 23:54:30 +08:00
										 |  |  | 	svc := &SearchService{ | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 		sqlstore:         db, | 
					
						
							| 
									
										
										
										
											2022-05-24 21:24:55 +08:00
										 |  |  | 		starService:      ss, | 
					
						
							|  |  |  | 		dashboardService: ds, | 
					
						
							| 
									
										
										
										
											2025-01-30 07:44:42 +08:00
										 |  |  | 		features:         &featuremgmt.FeatureManager{}, | 
					
						
							| 
									
										
										
										
											2022-03-21 23:54:30 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2019-10-11 23:08:15 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	query := &Query{ | 
					
						
							|  |  |  | 		Limit: 2000, | 
					
						
							| 
									
										
										
										
											2022-08-10 17:56:48 +08:00
										 |  |  | 		SignedInUser: &user.SignedInUser{ | 
					
						
							| 
									
										
										
										
											2019-10-11 23:08:15 +08:00
										 |  |  | 			IsGrafanaAdmin: true, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-30 17:28:12 +08:00
										 |  |  | 	hits, err := svc.SearchHandler(context.Background(), query) | 
					
						
							| 
									
										
										
										
											2019-10-11 23:08:15 +08:00
										 |  |  | 	require.Nil(t, err) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Assert results are sorted.
 | 
					
						
							| 
									
										
										
										
											2023-03-30 17:28:12 +08:00
										 |  |  | 	assert.Equal(t, "FOLDER", hits[0].Title) | 
					
						
							|  |  |  | 	assert.Equal(t, "AABB", hits[1].Title) | 
					
						
							|  |  |  | 	assert.Equal(t, "BBAA", hits[2].Title) | 
					
						
							|  |  |  | 	assert.Equal(t, "bbAAa", hits[3].Title) | 
					
						
							|  |  |  | 	assert.Equal(t, "CCAA", hits[4].Title) | 
					
						
							| 
									
										
										
										
											2019-10-11 23:08:15 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// Assert tags are sorted.
 | 
					
						
							| 
									
										
										
										
											2023-03-30 17:28:12 +08:00
										 |  |  | 	assert.Equal(t, "AA", hits[3].Tags[0]) | 
					
						
							|  |  |  | 	assert.Equal(t, "BB", hits[3].Tags[1]) | 
					
						
							|  |  |  | 	assert.Equal(t, "EE", hits[3].Tags[2]) | 
					
						
							| 
									
										
										
										
											2019-10-11 23:08:15 +08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2023-03-16 17:20:07 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | func TestSearch_StarredResults(t *testing.T) { | 
					
						
							|  |  |  | 	ss := startest.NewStarServiceFake() | 
					
						
							|  |  |  | 	db := dbtest.NewFakeDB() | 
					
						
							|  |  |  | 	us := usertest.NewUserServiceFake() | 
					
						
							|  |  |  | 	ds := dashboards.NewFakeDashboardService(t) | 
					
						
							| 
									
										
										
										
											2023-03-30 13:29:52 +08:00
										 |  |  | 	ds.On("SearchDashboards", mock.Anything, mock.AnythingOfType("*dashboards.FindPersistedDashboardsQuery")).Return(model.HitList{ | 
					
						
							| 
									
										
										
										
											2024-11-15 23:51:31 +08:00
										 |  |  | 		&model.Hit{UID: "test", Title: "A", Type: "dash-db"}, | 
					
						
							|  |  |  | 		&model.Hit{UID: "test2", Title: "B", Type: "dash-db"}, | 
					
						
							|  |  |  | 		&model.Hit{UID: "test3", Title: "C", Type: "dash-db"}, | 
					
						
							| 
									
										
										
										
											2023-03-30 13:29:52 +08:00
										 |  |  | 	}, nil) | 
					
						
							| 
									
										
										
										
											2023-03-16 17:20:07 +08:00
										 |  |  | 	us.ExpectedSignedInUser = &user.SignedInUser{} | 
					
						
							| 
									
										
										
										
											2024-11-15 23:51:31 +08:00
										 |  |  | 	ss.ExpectedUserStars = &star.GetUserStarsResult{UserStars: map[string]bool{"test": true, "test3": true, "test4": true}} | 
					
						
							| 
									
										
										
										
											2023-03-16 17:20:07 +08:00
										 |  |  | 	svc := &SearchService{ | 
					
						
							|  |  |  | 		sqlstore:         db, | 
					
						
							|  |  |  | 		starService:      ss, | 
					
						
							|  |  |  | 		dashboardService: ds, | 
					
						
							| 
									
										
										
										
											2025-01-30 07:44:42 +08:00
										 |  |  | 		features:         &featuremgmt.FeatureManager{}, | 
					
						
							| 
									
										
										
										
											2023-03-16 17:20:07 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	query := &Query{ | 
					
						
							|  |  |  | 		Limit:        2000, | 
					
						
							|  |  |  | 		IsStarred:    true, | 
					
						
							|  |  |  | 		SignedInUser: &user.SignedInUser{}, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-30 17:28:12 +08:00
										 |  |  | 	hits, err := svc.SearchHandler(context.Background(), query) | 
					
						
							| 
									
										
										
										
											2023-03-16 17:20:07 +08:00
										 |  |  | 	require.Nil(t, err) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Assert only starred dashboards are returned
 | 
					
						
							| 
									
										
										
										
											2023-03-30 17:28:12 +08:00
										 |  |  | 	assert.Equal(t, 2, hits.Len()) | 
					
						
							|  |  |  | 	assert.Equal(t, "A", hits[0].Title) | 
					
						
							|  |  |  | 	assert.Equal(t, "C", hits[1].Title) | 
					
						
							| 
									
										
										
										
											2023-03-16 17:20:07 +08:00
										 |  |  | } |