mirror of
https://github.com/grafana/grafana.git
synced 2025-08-01 17:23:49 +08:00
245 lines
4.5 KiB
Go
245 lines
4.5 KiB
Go
package template
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/grafana/grafana-plugin-sdk-go/data"
|
|
apidata "github.com/grafana/grafana-plugin-sdk-go/experimental/apis/data/v0alpha1"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
var nestedFieldRender = QueryTemplate{
|
|
Title: "Test",
|
|
Variables: []TemplateVariable{
|
|
{
|
|
Key: "metricName",
|
|
DefaultValues: []string{"cow_count"},
|
|
},
|
|
},
|
|
Targets: []Target{
|
|
{
|
|
DataType: data.FrameTypeUnknown,
|
|
//DataTypeVersion: data.FrameTypeVersion{0, 0},
|
|
|
|
Variables: map[string][]VariableReplacement{
|
|
"metricName": {
|
|
{
|
|
Path: "$.nestedObject.anArray[0]",
|
|
Position: &Position{
|
|
Start: 0,
|
|
End: 3,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
Properties: apidata.NewDataQuery(map[string]any{
|
|
"nestedObject": map[string]any{
|
|
"anArray": []any{"foo", .2},
|
|
},
|
|
}),
|
|
},
|
|
},
|
|
}
|
|
|
|
var nestedFieldRenderedTargets = []Target{
|
|
{
|
|
DataType: data.FrameTypeUnknown,
|
|
Variables: map[string][]VariableReplacement{
|
|
"metricName": {
|
|
{
|
|
Path: "$.nestedObject.anArray[0]",
|
|
Position: &Position{
|
|
Start: 0,
|
|
End: 3,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
//DataTypeVersion: data.FrameTypeVersion{0, 0},
|
|
Properties: apidata.NewDataQuery(
|
|
map[string]any{
|
|
"nestedObject": map[string]any{
|
|
"anArray": []any{"up", .2},
|
|
},
|
|
}),
|
|
},
|
|
}
|
|
|
|
var nestedFieldDefaultRenderedTargets = []Target{
|
|
{
|
|
DataType: data.FrameTypeUnknown,
|
|
Variables: map[string][]VariableReplacement{
|
|
"metricName": {
|
|
{
|
|
Path: "$.nestedObject.anArray[0]",
|
|
Position: &Position{
|
|
Start: 0,
|
|
End: 3,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
//DataTypeVersion: data.FrameTypeVersion{0, 0},
|
|
Properties: apidata.NewDataQuery(
|
|
map[string]any{
|
|
"nestedObject": map[string]any{
|
|
"anArray": []any{"cow_count", .2},
|
|
},
|
|
}),
|
|
},
|
|
}
|
|
|
|
func TestNestedFieldRender(t *testing.T) {
|
|
rT, err := RenderTemplate(nestedFieldRender, map[string][]string{"metricName": {"up"}})
|
|
require.NoError(t, err)
|
|
require.Equal(t,
|
|
nestedFieldRenderedTargets,
|
|
rT,
|
|
)
|
|
}
|
|
|
|
func TestNestedFieldDefaultsRender(t *testing.T) {
|
|
rT, err := RenderTemplate(nestedFieldRender, nil)
|
|
require.NoError(t, err)
|
|
require.Equal(t,
|
|
nestedFieldDefaultRenderedTargets,
|
|
rT,
|
|
)
|
|
}
|
|
|
|
var multiVarTemplate = QueryTemplate{
|
|
Title: "Test",
|
|
Variables: []TemplateVariable{
|
|
{
|
|
Key: "metricName",
|
|
},
|
|
{
|
|
Key: "anotherMetric",
|
|
},
|
|
},
|
|
Targets: []Target{
|
|
{
|
|
DataType: data.FrameTypeUnknown,
|
|
//DataTypeVersion: data.FrameTypeVersion{0, 0},
|
|
|
|
Variables: map[string][]VariableReplacement{
|
|
"metricName": {
|
|
{
|
|
Path: "$.expr",
|
|
Position: &Position{
|
|
Start: 4,
|
|
End: 14,
|
|
},
|
|
},
|
|
{
|
|
Path: "$.expr",
|
|
Position: &Position{
|
|
Start: 37,
|
|
End: 47,
|
|
},
|
|
},
|
|
},
|
|
"anotherMetric": {
|
|
{
|
|
Path: "$.expr",
|
|
Position: &Position{
|
|
Start: 21,
|
|
End: 34,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
|
|
Properties: apidata.NewDataQuery(map[string]any{
|
|
"expr": "1 + metricName + 1 + anotherMetric + metricName",
|
|
}),
|
|
},
|
|
},
|
|
}
|
|
|
|
var multiVarRenderedTargets = []Target{
|
|
{
|
|
DataType: data.FrameTypeUnknown,
|
|
Variables: map[string][]VariableReplacement{
|
|
"metricName": {
|
|
{
|
|
Path: "$.expr",
|
|
Position: &Position{
|
|
Start: 4,
|
|
End: 14,
|
|
},
|
|
},
|
|
{
|
|
Path: "$.expr",
|
|
Position: &Position{
|
|
Start: 37,
|
|
End: 47,
|
|
},
|
|
},
|
|
},
|
|
"anotherMetric": {
|
|
{
|
|
Path: "$.expr",
|
|
Position: &Position{
|
|
Start: 21,
|
|
End: 34,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
//DataTypeVersion: data.FrameTypeVersion{0, 0},
|
|
Properties: apidata.NewDataQuery(map[string]any{
|
|
"expr": "1 + up + 1 + sloths_do_like_a_good_nap + up",
|
|
}),
|
|
},
|
|
}
|
|
|
|
func TestMultiVarTemplate(t *testing.T) {
|
|
rT, err := RenderTemplate(multiVarTemplate, map[string][]string{
|
|
"metricName": {"up"},
|
|
"anotherMetric": {"sloths_do_like_a_good_nap"},
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t,
|
|
multiVarRenderedTargets,
|
|
rT,
|
|
)
|
|
}
|
|
|
|
func TestRenderWithRune(t *testing.T) {
|
|
qt := QueryTemplate{
|
|
Variables: []TemplateVariable{
|
|
{
|
|
Key: "name",
|
|
},
|
|
},
|
|
Targets: []Target{
|
|
{
|
|
Properties: apidata.NewDataQuery(map[string]any{
|
|
"message": "🐦 name!",
|
|
}),
|
|
Variables: map[string][]VariableReplacement{
|
|
"name": {
|
|
{
|
|
Path: "$.message",
|
|
Position: &Position{
|
|
Start: 2,
|
|
End: 6,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
selectedValues := map[string][]string{
|
|
"name": {"🦥"},
|
|
}
|
|
|
|
rq, err := RenderTemplate(qt, selectedValues)
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, "🐦 🦥!", rq[0].Properties.GetString("message"))
|
|
}
|