2021-03-01 08:33:17 -06:00
package librarypanels
import (
"testing"
"github.com/google/go-cmp/cmp"
"github.com/stretchr/testify/require"
"github.com/grafana/grafana/pkg/models"
)
func TestGetLibraryPanel ( t * testing . T ) {
scenarioWithLibraryPanel ( t , "When an admin tries to get a library panel that does not exist, it should fail" ,
func ( t * testing . T , sc scenarioContext ) {
sc . reqContext . ReplaceAllParams ( map [ string ] string { ":uid" : "unknown" } )
resp := sc . service . getHandler ( sc . reqContext )
require . Equal ( t , 404 , resp . Status ( ) )
} )
scenarioWithLibraryPanel ( t , "When an admin tries to get a library panel that exists, it should succeed and return correct result" ,
func ( t * testing . T , sc scenarioContext ) {
sc . reqContext . ReplaceAllParams ( map [ string ] string { ":uid" : sc . initialResult . Result . UID } )
resp := sc . service . getHandler ( sc . reqContext )
var result = validateAndUnMarshalResponse ( t , resp )
var expected = libraryPanelResult {
Result : libraryPanel {
ID : 1 ,
OrgID : 1 ,
FolderID : 1 ,
UID : result . Result . UID ,
Name : "Text - Library Panel" ,
Model : map [ string ] interface { } {
"datasource" : "${DS_GDEV-TESTDATA}" ,
"id" : float64 ( 1 ) ,
"title" : "Text - Library Panel" ,
"type" : "text" ,
} ,
2021-03-02 06:33:26 -06:00
Version : 1 ,
2021-03-01 08:33:17 -06:00
Meta : LibraryPanelDTOMeta {
CanEdit : true ,
ConnectedDashboards : 0 ,
Created : result . Result . Meta . Created ,
Updated : result . Result . Meta . Updated ,
CreatedBy : LibraryPanelDTOMetaUser {
ID : 1 ,
Name : UserInDbName ,
AvatarUrl : UserInDbAvatar ,
} ,
UpdatedBy : LibraryPanelDTOMetaUser {
ID : 1 ,
Name : UserInDbName ,
AvatarUrl : UserInDbAvatar ,
} ,
} ,
} ,
}
if diff := cmp . Diff ( expected , result , getCompareOptions ( ) ... ) ; diff != "" {
t . Fatalf ( "Result mismatch (-want +got):\n%s" , diff )
}
} )
scenarioWithLibraryPanel ( t , "When an admin tries to get a library panel that exists in an other org, it should fail" ,
func ( t * testing . T , sc scenarioContext ) {
sc . reqContext . ReplaceAllParams ( map [ string ] string { ":uid" : sc . initialResult . Result . UID } )
sc . reqContext . SignedInUser . OrgId = 2
sc . reqContext . SignedInUser . OrgRole = models . ROLE_ADMIN
resp := sc . service . getHandler ( sc . reqContext )
require . Equal ( t , 404 , resp . Status ( ) )
} )
scenarioWithLibraryPanel ( t , "When an admin tries to get a library panel with 2 connected dashboards, it should succeed and return correct connected dashboards" ,
func ( t * testing . T , sc scenarioContext ) {
sc . reqContext . ReplaceAllParams ( map [ string ] string { ":uid" : sc . initialResult . Result . UID , ":dashboardId" : "1" } )
resp := sc . service . connectHandler ( sc . reqContext )
require . Equal ( t , 200 , resp . Status ( ) )
sc . reqContext . ReplaceAllParams ( map [ string ] string { ":uid" : sc . initialResult . Result . UID , ":dashboardId" : "2" } )
resp = sc . service . connectHandler ( sc . reqContext )
require . Equal ( t , 200 , resp . Status ( ) )
sc . reqContext . ReplaceAllParams ( map [ string ] string { ":uid" : sc . initialResult . Result . UID } )
resp = sc . service . getHandler ( sc . reqContext )
require . Equal ( t , 200 , resp . Status ( ) )
var result = validateAndUnMarshalResponse ( t , resp )
require . Equal ( t , int64 ( 2 ) , result . Result . Meta . ConnectedDashboards )
} )
}