mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
				
	
	
		
			85 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
| package libraryelements
 | |
| 
 | |
| import (
 | |
| 	"encoding/json"
 | |
| 	"testing"
 | |
| 
 | |
| 	"github.com/grafana/grafana/pkg/components/simplejson"
 | |
| 	"github.com/grafana/grafana/pkg/services/org"
 | |
| 	"github.com/grafana/grafana/pkg/web"
 | |
| 	"github.com/stretchr/testify/require"
 | |
| 
 | |
| 	"github.com/grafana/grafana/pkg/models"
 | |
| )
 | |
| 
 | |
| func TestDeleteLibraryElement(t *testing.T) {
 | |
| 	scenarioWithPanel(t, "When an admin tries to delete a library panel that does not exist, it should fail",
 | |
| 		func(t *testing.T, sc scenarioContext) {
 | |
| 			resp := sc.service.deleteHandler(sc.reqContext)
 | |
| 			require.Equal(t, 404, resp.Status())
 | |
| 		})
 | |
| 
 | |
| 	scenarioWithPanel(t, "When an admin tries to delete a library panel that exists, it should succeed and return correct ID",
 | |
| 		func(t *testing.T, sc scenarioContext) {
 | |
| 			sc.ctx.Req = web.SetURLParams(sc.ctx.Req, map[string]string{":uid": sc.initialResult.Result.UID})
 | |
| 			resp := sc.service.deleteHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			var result DeleteLibraryElementResponse
 | |
| 			err := json.Unmarshal(resp.Body(), &result)
 | |
| 
 | |
| 			require.NoError(t, err)
 | |
| 			require.Equal(t, sc.initialResult.Result.ID, result.ID)
 | |
| 		})
 | |
| 
 | |
| 	scenarioWithPanel(t, "When an admin tries to delete a library panel in another org, it should fail",
 | |
| 		func(t *testing.T, sc scenarioContext) {
 | |
| 			sc.ctx.Req = web.SetURLParams(sc.ctx.Req, map[string]string{":uid": sc.initialResult.Result.UID})
 | |
| 			sc.reqContext.SignedInUser.OrgID = 2
 | |
| 			sc.reqContext.SignedInUser.OrgRole = org.RoleAdmin
 | |
| 			resp := sc.service.deleteHandler(sc.reqContext)
 | |
| 			require.Equal(t, 404, resp.Status())
 | |
| 		})
 | |
| 
 | |
| 	scenarioWithPanel(t, "When an admin tries to delete a library panel that is connected, it should fail",
 | |
| 		func(t *testing.T, sc scenarioContext) {
 | |
| 			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,
 | |
| 						},
 | |
| 						"libraryPanel": map[string]interface{}{
 | |
| 							"uid":  sc.initialResult.Result.UID,
 | |
| 							"name": sc.initialResult.Result.Name,
 | |
| 						},
 | |
| 					},
 | |
| 				},
 | |
| 			}
 | |
| 			dash := models.Dashboard{
 | |
| 				Title: "Testing deleteHandler ",
 | |
| 				Data:  simplejson.NewFromAny(dashJSON),
 | |
| 			}
 | |
| 			dashInDB := createDashboard(t, sc.sqlStore, sc.user, &dash, sc.folder.Id)
 | |
| 			err := sc.service.ConnectElementsToDashboard(sc.reqContext.Req.Context(), sc.reqContext.SignedInUser, []string{sc.initialResult.Result.UID}, dashInDB.Id)
 | |
| 			require.NoError(t, err)
 | |
| 
 | |
| 			sc.ctx.Req = web.SetURLParams(sc.ctx.Req, map[string]string{":uid": sc.initialResult.Result.UID})
 | |
| 			resp := sc.service.deleteHandler(sc.reqContext)
 | |
| 			require.Equal(t, 403, resp.Status())
 | |
| 		})
 | |
| }
 |