Files
grafana/pkg/services/libraryelements/conversions_test.go
2025-10-31 08:14:38 +03:00

102 lines
3.3 KiB
Go

package libraryelements
import (
"encoding/json"
"testing"
"github.com/google/go-cmp/cmp"
"github.com/stretchr/testify/require"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/utils/ptr"
data "github.com/grafana/grafana-plugin-sdk-go/experimental/apis/data/v0alpha1"
"github.com/grafana/grafana/apps/dashboard/pkg/apis/dashboard/v0alpha1"
common "github.com/grafana/grafana/pkg/apimachinery/apis/common/v0alpha1"
"github.com/grafana/grafana/pkg/apimachinery/utils"
"github.com/grafana/grafana/pkg/services/libraryelements/model"
)
func TestConversionsCommands(t *testing.T) {
cases := []struct {
name string
input runtime.Object
expectedCreate *model.CreateLibraryElementCommand
expectedPatch *model.PatchLibraryElementCommand
}{
{
name: "basic conversion",
input: &v0alpha1.LibraryPanel{
ObjectMeta: metav1.ObjectMeta{
Name: "uid",
Annotations: map[string]string{
utils.AnnoKeyFolder: "aaa",
},
},
Spec: v0alpha1.LibraryPanelSpec{
Type: "timeseries",
PluginVersion: "1.2.3",
Title: "title",
Description: "descr",
Options: common.Unstructured{
Object: map[string]any{
"hello": "options",
},
},
FieldConfig: common.Unstructured{
Object: map[string]any{
"hello": "fieldConfig",
},
},
PanelTitle: "panel title",
GridPos: v0alpha1.GridPos{
W: 1, H: 2, X: 3, Y: 4,
},
Transparent: true,
Links: []common.Unstructured{{
Object: map[string]any{
"link1": "hello",
},
}},
Datasource: &data.DataSourceRef{
UID: "uid",
Type: "ttt",
APIVersion: "v0alpha1",
},
},
},
expectedCreate: &model.CreateLibraryElementCommand{
FolderUID: ptr.To("aaa"),
UID: "uid",
Name: "title",
Kind: 1,
Model: json.RawMessage(`{"type":"timeseries","pluginVersion":"1.2.3","title":"title","panelTitle":"panel title","description":"descr","options":{"hello":"options"},"fieldConfig":{"hello":"fieldConfig"},"datasource":{"type":"ttt","uid":"uid","apiVersion":"v0alpha1"},"gridPos":{"w":1,"h":2,"x":3,"y":4},"transparent":true,"links":[{"link1":"hello"}]}`),
},
expectedPatch: &model.PatchLibraryElementCommand{
FolderUID: ptr.To("aaa"),
UID: "uid",
Name: "title",
Kind: 1,
Version: 0,
Model: json.RawMessage(`{"type":"timeseries","pluginVersion":"1.2.3","title":"title","panelTitle":"panel title","description":"descr","options":{"hello":"options"},"fieldConfig":{"hello":"fieldConfig"},"datasource":{"type":"ttt","uid":"uid","apiVersion":"v0alpha1"},"gridPos":{"w":1,"h":2,"x":3,"y":4},"transparent":true,"links":[{"link1":"hello"}]}`),
},
},
}
for _, tt := range cases {
t.Run(tt.name, func(t *testing.T) {
create, err := ToCreateLibraryElementCommand(tt.input)
require.NoError(t, err)
if diff := cmp.Diff(tt.expectedCreate, create); diff != "" {
require.FailNowf(t, "Create mismatch (-want +got):%s", diff)
}
patch, err := ToPatchLibraryElementCommand(tt.input)
require.NoError(t, err)
if diff := cmp.Diff(tt.expectedPatch, patch); diff != "" {
require.FailNowf(t, "Path mismatch (-want +got):%s", diff)
}
})
}
}