mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
@@ -6,6 +6,7 @@ import (
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
||||
"github.com/grafana/grafana-plugin-sdk-go/data"
|
||||
|
||||
"github.com/grafana/grafana/pkg/infra/log"
|
||||
@@ -82,6 +83,33 @@ func checkSearchResponseExtended(t *testing.T, fileName string, index *orgIndex,
|
||||
experimental.CheckGoldenJSONResponse(t, "testdata", fileName, resp, true)
|
||||
}
|
||||
|
||||
func getFrameWithNames(resp *backend.DataResponse) *data.Frame {
|
||||
if resp == nil || len(resp.Frames) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
frame := resp.Frames[0]
|
||||
nameField, idx := frame.FieldByName(documentFieldName)
|
||||
if nameField.Len() == 0 || idx == -1 {
|
||||
return nil
|
||||
}
|
||||
|
||||
scoreField, _ := frame.FieldByName("score")
|
||||
return data.NewFrame("ordering frame", nameField, scoreField)
|
||||
}
|
||||
|
||||
func checkSearchResponseOrdering(t *testing.T, fileName string, index *orgIndex, filter ResourceFilter, query DashboardQuery) {
|
||||
t.Helper()
|
||||
checkSearchResponseOrderingExtended(t, fileName, index, filter, query, &NoopQueryExtender{})
|
||||
}
|
||||
|
||||
func checkSearchResponseOrderingExtended(t *testing.T, fileName string, index *orgIndex, filter ResourceFilter, query DashboardQuery, extender QueryExtender) {
|
||||
t.Helper()
|
||||
query.Explain = true
|
||||
resp := doSearchQuery(context.Background(), testLogger, index, filter, query, extender, "/pfix")
|
||||
experimental.CheckGoldenJSONFrame(t, "testdata", fileName, getFrameWithNames(resp), true)
|
||||
}
|
||||
|
||||
var testDashboards = []dashboard{
|
||||
{
|
||||
id: 1,
|
||||
@@ -582,3 +610,87 @@ func TestDashboardIndex_CamelCaseNgram(t *testing.T) {
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
func dashboardsWithTitles(names ...string) []dashboard {
|
||||
out := make([]dashboard, 0)
|
||||
for i, name := range names {
|
||||
no := int64(i + 1)
|
||||
out = append(out, dashboard{
|
||||
id: no,
|
||||
uid: fmt.Sprintf("%d", no),
|
||||
info: &extract.DashboardInfo{
|
||||
Title: name,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
return out
|
||||
}
|
||||
|
||||
func TestDashboardIndex_MultiTermPrefixMatch(t *testing.T) {
|
||||
var tests = []struct {
|
||||
dashboards []dashboard
|
||||
query string
|
||||
}{
|
||||
{
|
||||
dashboards: dashboardsWithTitles(
|
||||
"Panel Tests - Bar Gauge 2",
|
||||
"Prometheus 2.0",
|
||||
"Prometheus 2.0 Stats",
|
||||
"Prometheus 20.0",
|
||||
"Prometheus Second Word",
|
||||
"Prometheus Stats",
|
||||
"dynamic (2)",
|
||||
"prometheus histogram",
|
||||
"prometheus histogram2",
|
||||
"roci-simple-2",
|
||||
"x not y",
|
||||
),
|
||||
query: "Prometheus 2.",
|
||||
},
|
||||
{
|
||||
dashboards: dashboardsWithTitles(
|
||||
"From AAA",
|
||||
"Grafana Dev Overview & Home",
|
||||
"Home automation",
|
||||
"Prometheus 2.0",
|
||||
"Prometheus 2.0 Stats",
|
||||
"Prometheus 20.0",
|
||||
"Prometheus Stats",
|
||||
"Transforms - config from query",
|
||||
"iot-testing",
|
||||
"prom style with exemplars",
|
||||
"prop history",
|
||||
"simple frame",
|
||||
"with-hide-from",
|
||||
"xy broke",
|
||||
),
|
||||
query: "Prome",
|
||||
},
|
||||
{
|
||||
dashboards: dashboardsWithTitles(
|
||||
"Panel Tests - Bar Gauge 2",
|
||||
"Prometheus 2.0",
|
||||
"Prometheus 2.0 Stats",
|
||||
"Prometheus 20.0",
|
||||
"Prometheus Second Word",
|
||||
"Prometheus Stats",
|
||||
"dynamic (2)",
|
||||
"prometheus histogram",
|
||||
"prometheus histogram2",
|
||||
"roci-simple-2",
|
||||
"x not y",
|
||||
),
|
||||
query: "Prometheus stat",
|
||||
},
|
||||
}
|
||||
|
||||
for i, tt := range tests {
|
||||
t.Run(fmt.Sprintf("ordering-tests-%d-[%s]", i+1, tt.query), func(t *testing.T) {
|
||||
index := initTestOrgIndexFromDashes(t, tt.dashboards)
|
||||
checkSearchResponseOrdering(t, filepath.Base(t.Name()), index, testAllowAllFilter,
|
||||
DashboardQuery{Query: tt.query},
|
||||
)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user