LibraryPanels: Support CRUD via apiserver (#113035)
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
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)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user