Files
grafana/pkg/registry/apis/dashboard/legacy/queries_test.go
Rafael Bortolon Paulovic 5eae7d4f22 feat: legacy ListIterator with batches (#115038)
* feat: legacy ListIterator with batches

* chore: address code review

* chore: remove nil check in nextBatch

* chore: move close before count check

* chore: add err field to batchingIterator for its own errors

* chore: remove unused import
2025-12-10 16:12:08 +01:00

174 lines
3.7 KiB
Go

package legacy
import (
"testing"
"text/template"
"github.com/grafana/grafana/pkg/storage/legacysql"
"github.com/grafana/grafana/pkg/storage/unified/sql/sqltemplate"
"github.com/grafana/grafana/pkg/storage/unified/sql/sqltemplate/mocks"
)
func TestDashboardQueries(t *testing.T) {
// prefix tables with grafana
nodb := &legacysql.LegacyDatabaseHelper{
Table: func(n string) string {
return "grafana." + n
},
}
getQuery := func(q *DashboardQuery) sqltemplate.SQLTemplate {
v := newQueryReq(nodb, q)
v.SQLTemplate = mocks.NewTestingSQLTemplate()
return &v
}
getLibraryQuery := func(q *LibraryPanelQuery) sqltemplate.SQLTemplate {
v := newLibraryQueryReq(nodb, q)
v.SQLTemplate = mocks.NewTestingSQLTemplate()
return &v
}
getPlaylistQuery := func(q *PlaylistQuery) sqltemplate.SQLTemplate {
v := newPlaylistQueryReq(nodb, q)
v.SQLTemplate = mocks.NewTestingSQLTemplate()
return &v
}
mocks.CheckQuerySnapshots(t, mocks.TemplateTestSetup{
RootDir: "testdata",
SQLTemplatesFS: sqlTemplatesFS,
Templates: map[*template.Template][]mocks.TemplateTestCase{
sqlQueryDashboards: {
{
Name: "history_uid",
Data: getQuery(&DashboardQuery{
OrgID: 2,
UID: "UUU",
}),
},
{
Name: "history_uid_at_version",
Data: getQuery(&DashboardQuery{
OrgID: 2,
UID: "UUU",
Version: 3,
}),
},
{
Name: "history_uid_second_page",
Data: getQuery(&DashboardQuery{
OrgID: 2,
UID: "UUU",
LastID: 7,
}),
},
{
Name: "dashboard",
Data: getQuery(&DashboardQuery{
OrgID: 2,
}),
},
{
Name: "dashboard_next_page",
Data: getQuery(&DashboardQuery{
OrgID: 2,
LastID: 22,
}),
},
{
Name: "folders",
Data: getQuery(&DashboardQuery{
OrgID: 2,
GetFolders: true,
}),
},
{
Name: "export_with_history",
Data: getQuery(&DashboardQuery{
OrgID: 1,
GetHistory: true,
Order: "ASC",
}),
},
{
Name: "migration_with_fallback",
Data: getQuery(&DashboardQuery{
OrgID: 1,
GetHistory: true,
AllowFallback: true,
Order: "ASC",
}),
},
{
// Tests that MaxRows generates LIMIT clause for regular dashboard queries
Name: "dashboard_with_max_rows",
Data: getQuery(&DashboardQuery{
OrgID: 2,
MaxRows: 100,
}),
},
{
// Tests that MaxRows generates LIMIT clause for history queries
Name: "history_with_max_rows",
Data: getQuery(&DashboardQuery{
OrgID: 1,
GetHistory: true,
MaxRows: 50,
}),
},
{
// Tests that MaxRows + LastID generates correct pagination query
Name: "dashboard_with_max_rows_last_id",
Data: getQuery(&DashboardQuery{
OrgID: 2,
MaxRows: 100,
LastID: 500,
}),
},
{
// Tests that MaxRows + LastID generates correct pagination query
Name: "history_with_max_rows_last_id",
Data: getQuery(&DashboardQuery{
OrgID: 2,
MaxRows: 100,
GetHistory: true,
LastID: 500,
}),
},
},
sqlQueryPanels: {
{
Name: "list",
Data: getLibraryQuery(&LibraryPanelQuery{
OrgID: 1,
Limit: 5,
}),
},
{
Name: "list_page_two",
Data: getLibraryQuery(&LibraryPanelQuery{
OrgID: 1,
LastID: 4,
}),
},
{
Name: "get_uid",
Data: getLibraryQuery(&LibraryPanelQuery{
OrgID: 1,
UID: "xyz",
}),
},
},
sqlQueryPlaylists: {
{
Name: "list",
Data: getPlaylistQuery(&PlaylistQuery{
OrgID: 1,
}),
},
},
},
})
}