(cherry picked from commit 7b17801047)
Co-authored-by: Hugo Häggmark <hugo.haggmark@grafana.com>
This commit is contained in:
co-authored by
Hugo Häggmark
parent
52d6afbae7
commit
603cff9491
@@ -18,7 +18,6 @@ type Service interface {
|
||||
LoadLibraryPanelsForDashboard(c *models.ReqContext, dash *models.Dashboard) error
|
||||
CleanLibraryPanelsForDashboard(dash *models.Dashboard) error
|
||||
ConnectLibraryPanelsForDashboard(c *models.ReqContext, dash *models.Dashboard) error
|
||||
ImportDashboard(c *models.ReqContext, dashboard *simplejson.Json, importedID int64) error
|
||||
}
|
||||
|
||||
// LibraryPanelService is the service for the Panel Library feature.
|
||||
@@ -193,11 +192,3 @@ func (lps *LibraryPanelService) ConnectLibraryPanelsForDashboard(c *models.ReqCo
|
||||
|
||||
return lps.LibraryElementService.ConnectElementsToDashboard(c, elementUIDs, dash.Id)
|
||||
}
|
||||
|
||||
// ImportDashboard loops through all panels in dashboard JSON and connects any library panels to the dashboard.
|
||||
func (lps *LibraryPanelService) ImportDashboard(c *models.ReqContext, dashboard *simplejson.Json, importedID int64) error {
|
||||
dash := models.NewDashboardFromJson(dashboard)
|
||||
dash.Id = importedID
|
||||
|
||||
return lps.ConnectLibraryPanelsForDashboard(c, dash)
|
||||
}
|
||||
|
||||
@@ -572,106 +572,6 @@ func TestConnectLibraryPanelsForDashboard(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
func TestImportDashboard(t *testing.T) {
|
||||
scenarioWithLibraryPanel(t, "When an admin tries to import a dashboard with a library panel, it should connect the two",
|
||||
func(t *testing.T, sc scenarioContext) {
|
||||
importedJSON := map[string]interface{}{
|
||||
"panels": []interface{}{},
|
||||
}
|
||||
importedDashboard := models.Dashboard{
|
||||
Title: "Dummy dash that simulates an imported dash",
|
||||
Data: simplejson.NewFromAny(importedJSON),
|
||||
}
|
||||
importedDashInDB := createDashboard(t, sc.sqlStore, sc.user, &importedDashboard, sc.folder.Id)
|
||||
elements, err := sc.elementService.GetElementsForDashboard(sc.reqContext, importedDashInDB.Id)
|
||||
require.NoError(t, err)
|
||||
require.Len(t, elements, 0)
|
||||
|
||||
dashJSON := map[string]interface{}{
|
||||
"title": "Testing ImportDashboard",
|
||||
"panels": []interface{}{
|
||||
map[string]interface{}{
|
||||
"id": int64(1),
|
||||
"gridPos": map[string]interface{}{
|
||||
"h": 6,
|
||||
"w": 6,
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
},
|
||||
},
|
||||
map[string]interface{}{
|
||||
"id": int64(2),
|
||||
"gridPos": map[string]interface{}{
|
||||
"h": 6,
|
||||
"w": 6,
|
||||
"x": 6,
|
||||
"y": 0,
|
||||
},
|
||||
"datasource": "${DS_GDEV-TESTDATA}",
|
||||
"libraryPanel": map[string]interface{}{
|
||||
"uid": sc.initialResult.Result.UID,
|
||||
"name": sc.initialResult.Result.Name,
|
||||
},
|
||||
"title": "Text - Library Panel",
|
||||
"type": "text",
|
||||
},
|
||||
},
|
||||
}
|
||||
dash := simplejson.NewFromAny(dashJSON)
|
||||
err = sc.service.ImportDashboard(sc.reqContext, dash, importedDashInDB.Id)
|
||||
require.NoError(t, err)
|
||||
|
||||
elements, err = sc.elementService.GetElementsForDashboard(sc.reqContext, importedDashInDB.Id)
|
||||
require.NoError(t, err)
|
||||
require.Len(t, elements, 1)
|
||||
require.Equal(t, sc.initialResult.Result.UID, elements[sc.initialResult.Result.UID].UID)
|
||||
})
|
||||
|
||||
scenarioWithLibraryPanel(t, "When an admin tries to import a dashboard with a library panel without uid, it should fail",
|
||||
func(t *testing.T, sc scenarioContext) {
|
||||
importedJSON := map[string]interface{}{
|
||||
"panels": []interface{}{},
|
||||
}
|
||||
importedDashboard := models.Dashboard{
|
||||
Title: "Dummy dash that simulates an imported dash",
|
||||
Data: simplejson.NewFromAny(importedJSON),
|
||||
}
|
||||
importedDashInDB := createDashboard(t, sc.sqlStore, sc.user, &importedDashboard, sc.folder.Id)
|
||||
|
||||
dashJSON := map[string]interface{}{
|
||||
"panels": []interface{}{
|
||||
map[string]interface{}{
|
||||
"id": int64(1),
|
||||
"gridPos": map[string]interface{}{
|
||||
"h": 6,
|
||||
"w": 6,
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
},
|
||||
},
|
||||
map[string]interface{}{
|
||||
"id": int64(2),
|
||||
"gridPos": map[string]interface{}{
|
||||
"h": 6,
|
||||
"w": 6,
|
||||
"x": 6,
|
||||
"y": 0,
|
||||
},
|
||||
"datasource": "${DS_GDEV-TESTDATA}",
|
||||
"libraryPanel": map[string]interface{}{
|
||||
"name": sc.initialResult.Result.Name,
|
||||
},
|
||||
"title": "Text - Library Panel",
|
||||
"type": "text",
|
||||
},
|
||||
},
|
||||
}
|
||||
dash := simplejson.NewFromAny(dashJSON)
|
||||
err := sc.service.ImportDashboard(sc.reqContext, dash, importedDashInDB.Id)
|
||||
require.EqualError(t, err, errLibraryPanelHeaderUIDMissing.Error())
|
||||
})
|
||||
}
|
||||
|
||||
type libraryPanel struct {
|
||||
ID int64
|
||||
OrgID int64
|
||||
|
||||
Reference in New Issue
Block a user