mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
				
	
	
		
			1264 lines
		
	
	
		
			43 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			1264 lines
		
	
	
		
			43 KiB
		
	
	
	
		
			Go
		
	
	
	
| package libraryelements
 | |
| 
 | |
| import (
 | |
| 	"encoding/json"
 | |
| 	"strconv"
 | |
| 	"testing"
 | |
| 
 | |
| 	"github.com/google/go-cmp/cmp"
 | |
| 	"github.com/stretchr/testify/require"
 | |
| 
 | |
| 	"github.com/grafana/grafana/pkg/models"
 | |
| 	"github.com/grafana/grafana/pkg/services/org"
 | |
| 	"github.com/grafana/grafana/pkg/services/search"
 | |
| )
 | |
| 
 | |
| func TestGetAllLibraryElements(t *testing.T) {
 | |
| 	testScenario(t, "When an admin tries to get all library panels and none exists, it should return none",
 | |
| 		func(t *testing.T, sc scenarioContext) {
 | |
| 			resp := sc.service.getAllHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			var result libraryElementsSearch
 | |
| 			err := json.Unmarshal(resp.Body(), &result)
 | |
| 			require.NoError(t, err)
 | |
| 			var expected = libraryElementsSearch{
 | |
| 				Result: libraryElementsSearchResult{
 | |
| 					TotalCount: 0,
 | |
| 					Elements:   []libraryElement{},
 | |
| 					Page:       1,
 | |
| 					PerPage:    100,
 | |
| 				},
 | |
| 			}
 | |
| 			if diff := cmp.Diff(expected, result, getCompareOptions()...); diff != "" {
 | |
| 				t.Fatalf("Result mismatch (-want +got):\n%s", diff)
 | |
| 			}
 | |
| 		})
 | |
| 
 | |
| 	scenarioWithPanel(t, "When an admin tries to get all panel elements and both panels and variables exist, it should only return panels",
 | |
| 		func(t *testing.T, sc scenarioContext) {
 | |
| 			command := getCreateVariableCommand(sc.folder.Id, "query0")
 | |
| 			sc.reqContext.Req.Body = mockRequestBody(command)
 | |
| 			resp := sc.service.createHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			err := sc.reqContext.Req.ParseForm()
 | |
| 			require.NoError(t, err)
 | |
| 			sc.reqContext.Req.Form.Add("kind", strconv.FormatInt(int64(models.PanelElement), 10))
 | |
| 
 | |
| 			resp = sc.service.getAllHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			var result libraryElementsSearch
 | |
| 			err = json.Unmarshal(resp.Body(), &result)
 | |
| 			require.NoError(t, err)
 | |
| 			var expected = libraryElementsSearch{
 | |
| 				Result: libraryElementsSearchResult{
 | |
| 					TotalCount: 1,
 | |
| 					Page:       1,
 | |
| 					PerPage:    100,
 | |
| 					Elements: []libraryElement{
 | |
| 						{
 | |
| 							ID:          1,
 | |
| 							OrgID:       1,
 | |
| 							FolderID:    1,
 | |
| 							UID:         result.Result.Elements[0].UID,
 | |
| 							Name:        "Text - Library Panel",
 | |
| 							Kind:        int64(models.PanelElement),
 | |
| 							Type:        "text",
 | |
| 							Description: "A description",
 | |
| 							Model: map[string]interface{}{
 | |
| 								"datasource":  "${DS_GDEV-TESTDATA}",
 | |
| 								"description": "A description",
 | |
| 								"id":          float64(1),
 | |
| 								"title":       "Text - Library Panel",
 | |
| 								"type":        "text",
 | |
| 							},
 | |
| 							Version: 1,
 | |
| 							Meta: LibraryElementDTOMeta{
 | |
| 								FolderName:          "ScenarioFolder",
 | |
| 								FolderUID:           sc.folder.Uid,
 | |
| 								ConnectedDashboards: 0,
 | |
| 								Created:             result.Result.Elements[0].Meta.Created,
 | |
| 								Updated:             result.Result.Elements[0].Meta.Updated,
 | |
| 								CreatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 								UpdatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 							},
 | |
| 						},
 | |
| 					},
 | |
| 				},
 | |
| 			}
 | |
| 			if diff := cmp.Diff(expected, result, getCompareOptions()...); diff != "" {
 | |
| 				t.Fatalf("Result mismatch (-want +got):\n%s", diff)
 | |
| 			}
 | |
| 		})
 | |
| 
 | |
| 	scenarioWithPanel(t, "When an admin tries to get all variable elements and both panels and variables exist, it should only return panels",
 | |
| 		func(t *testing.T, sc scenarioContext) {
 | |
| 			command := getCreateVariableCommand(sc.folder.Id, "query0")
 | |
| 			sc.reqContext.Req.Body = mockRequestBody(command)
 | |
| 			resp := sc.service.createHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			err := sc.reqContext.Req.ParseForm()
 | |
| 			require.NoError(t, err)
 | |
| 			sc.reqContext.Req.Form.Add("kind", strconv.FormatInt(int64(models.VariableElement), 10))
 | |
| 
 | |
| 			resp = sc.service.getAllHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			var result libraryElementsSearch
 | |
| 			err = json.Unmarshal(resp.Body(), &result)
 | |
| 			require.NoError(t, err)
 | |
| 			var expected = libraryElementsSearch{
 | |
| 				Result: libraryElementsSearchResult{
 | |
| 					TotalCount: 1,
 | |
| 					Page:       1,
 | |
| 					PerPage:    100,
 | |
| 					Elements: []libraryElement{
 | |
| 						{
 | |
| 							ID:          2,
 | |
| 							OrgID:       1,
 | |
| 							FolderID:    1,
 | |
| 							UID:         result.Result.Elements[0].UID,
 | |
| 							Name:        "query0",
 | |
| 							Kind:        int64(models.VariableElement),
 | |
| 							Type:        "query",
 | |
| 							Description: "A description",
 | |
| 							Model: map[string]interface{}{
 | |
| 								"datasource":  "${DS_GDEV-TESTDATA}",
 | |
| 								"name":        "query0",
 | |
| 								"type":        "query",
 | |
| 								"description": "A description",
 | |
| 							},
 | |
| 							Version: 1,
 | |
| 							Meta: LibraryElementDTOMeta{
 | |
| 								FolderName:          "ScenarioFolder",
 | |
| 								FolderUID:           sc.folder.Uid,
 | |
| 								ConnectedDashboards: 0,
 | |
| 								Created:             result.Result.Elements[0].Meta.Created,
 | |
| 								Updated:             result.Result.Elements[0].Meta.Updated,
 | |
| 								CreatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 								UpdatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 							},
 | |
| 						},
 | |
| 					},
 | |
| 				},
 | |
| 			}
 | |
| 			if diff := cmp.Diff(expected, result, getCompareOptions()...); diff != "" {
 | |
| 				t.Fatalf("Result mismatch (-want +got):\n%s", diff)
 | |
| 			}
 | |
| 		})
 | |
| 
 | |
| 	scenarioWithPanel(t, "When an admin tries to get all library panels and two exist, it should succeed",
 | |
| 		func(t *testing.T, sc scenarioContext) {
 | |
| 			command := getCreatePanelCommand(sc.folder.Id, "Text - Library Panel2")
 | |
| 			sc.reqContext.Req.Body = mockRequestBody(command)
 | |
| 			resp := sc.service.createHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			resp = sc.service.getAllHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			var result libraryElementsSearch
 | |
| 			err := json.Unmarshal(resp.Body(), &result)
 | |
| 			require.NoError(t, err)
 | |
| 			var expected = libraryElementsSearch{
 | |
| 				Result: libraryElementsSearchResult{
 | |
| 					TotalCount: 2,
 | |
| 					Page:       1,
 | |
| 					PerPage:    100,
 | |
| 					Elements: []libraryElement{
 | |
| 						{
 | |
| 							ID:          1,
 | |
| 							OrgID:       1,
 | |
| 							FolderID:    1,
 | |
| 							UID:         result.Result.Elements[0].UID,
 | |
| 							Name:        "Text - Library Panel",
 | |
| 							Kind:        int64(models.PanelElement),
 | |
| 							Type:        "text",
 | |
| 							Description: "A description",
 | |
| 							Model: map[string]interface{}{
 | |
| 								"datasource":  "${DS_GDEV-TESTDATA}",
 | |
| 								"description": "A description",
 | |
| 								"id":          float64(1),
 | |
| 								"title":       "Text - Library Panel",
 | |
| 								"type":        "text",
 | |
| 							},
 | |
| 							Version: 1,
 | |
| 							Meta: LibraryElementDTOMeta{
 | |
| 								FolderName:          "ScenarioFolder",
 | |
| 								FolderUID:           sc.folder.Uid,
 | |
| 								ConnectedDashboards: 0,
 | |
| 								Created:             result.Result.Elements[0].Meta.Created,
 | |
| 								Updated:             result.Result.Elements[0].Meta.Updated,
 | |
| 								CreatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 								UpdatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 							},
 | |
| 						},
 | |
| 						{
 | |
| 							ID:          2,
 | |
| 							OrgID:       1,
 | |
| 							FolderID:    1,
 | |
| 							UID:         result.Result.Elements[1].UID,
 | |
| 							Name:        "Text - Library Panel2",
 | |
| 							Kind:        int64(models.PanelElement),
 | |
| 							Type:        "text",
 | |
| 							Description: "A description",
 | |
| 							Model: map[string]interface{}{
 | |
| 								"datasource":  "${DS_GDEV-TESTDATA}",
 | |
| 								"description": "A description",
 | |
| 								"id":          float64(1),
 | |
| 								"title":       "Text - Library Panel",
 | |
| 								"type":        "text",
 | |
| 							},
 | |
| 							Version: 1,
 | |
| 							Meta: LibraryElementDTOMeta{
 | |
| 								FolderName:          "ScenarioFolder",
 | |
| 								FolderUID:           sc.folder.Uid,
 | |
| 								ConnectedDashboards: 0,
 | |
| 								Created:             result.Result.Elements[1].Meta.Created,
 | |
| 								Updated:             result.Result.Elements[1].Meta.Updated,
 | |
| 								CreatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 								UpdatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 							},
 | |
| 						},
 | |
| 					},
 | |
| 				},
 | |
| 			}
 | |
| 			if diff := cmp.Diff(expected, result, getCompareOptions()...); diff != "" {
 | |
| 				t.Fatalf("Result mismatch (-want +got):\n%s", diff)
 | |
| 			}
 | |
| 		})
 | |
| 
 | |
| 	scenarioWithPanel(t, "When an admin tries to get all library panels and two exist and sort desc is set, it should succeed and the result should be correct",
 | |
| 		func(t *testing.T, sc scenarioContext) {
 | |
| 			command := getCreatePanelCommand(sc.folder.Id, "Text - Library Panel2")
 | |
| 			sc.reqContext.Req.Body = mockRequestBody(command)
 | |
| 			resp := sc.service.createHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			err := sc.reqContext.Req.ParseForm()
 | |
| 			require.NoError(t, err)
 | |
| 			sc.reqContext.Req.Form.Add("sortDirection", search.SortAlphaDesc.Name)
 | |
| 			resp = sc.service.getAllHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			var result libraryElementsSearch
 | |
| 			err = json.Unmarshal(resp.Body(), &result)
 | |
| 			require.NoError(t, err)
 | |
| 			var expected = libraryElementsSearch{
 | |
| 				Result: libraryElementsSearchResult{
 | |
| 					TotalCount: 2,
 | |
| 					Page:       1,
 | |
| 					PerPage:    100,
 | |
| 					Elements: []libraryElement{
 | |
| 						{
 | |
| 							ID:          2,
 | |
| 							OrgID:       1,
 | |
| 							FolderID:    1,
 | |
| 							UID:         result.Result.Elements[0].UID,
 | |
| 							Name:        "Text - Library Panel2",
 | |
| 							Kind:        int64(models.PanelElement),
 | |
| 							Type:        "text",
 | |
| 							Description: "A description",
 | |
| 							Model: map[string]interface{}{
 | |
| 								"datasource":  "${DS_GDEV-TESTDATA}",
 | |
| 								"description": "A description",
 | |
| 								"id":          float64(1),
 | |
| 								"title":       "Text - Library Panel",
 | |
| 								"type":        "text",
 | |
| 							},
 | |
| 							Version: 1,
 | |
| 							Meta: LibraryElementDTOMeta{
 | |
| 								FolderName:          "ScenarioFolder",
 | |
| 								FolderUID:           sc.folder.Uid,
 | |
| 								ConnectedDashboards: 0,
 | |
| 								Created:             result.Result.Elements[0].Meta.Created,
 | |
| 								Updated:             result.Result.Elements[0].Meta.Updated,
 | |
| 								CreatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 								UpdatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 							},
 | |
| 						},
 | |
| 						{
 | |
| 							ID:          1,
 | |
| 							OrgID:       1,
 | |
| 							FolderID:    1,
 | |
| 							UID:         result.Result.Elements[1].UID,
 | |
| 							Name:        "Text - Library Panel",
 | |
| 							Kind:        int64(models.PanelElement),
 | |
| 							Type:        "text",
 | |
| 							Description: "A description",
 | |
| 							Model: map[string]interface{}{
 | |
| 								"datasource":  "${DS_GDEV-TESTDATA}",
 | |
| 								"description": "A description",
 | |
| 								"id":          float64(1),
 | |
| 								"title":       "Text - Library Panel",
 | |
| 								"type":        "text",
 | |
| 							},
 | |
| 							Version: 1,
 | |
| 							Meta: LibraryElementDTOMeta{
 | |
| 								FolderName:          "ScenarioFolder",
 | |
| 								FolderUID:           sc.folder.Uid,
 | |
| 								ConnectedDashboards: 0,
 | |
| 								Created:             result.Result.Elements[1].Meta.Created,
 | |
| 								Updated:             result.Result.Elements[1].Meta.Updated,
 | |
| 								CreatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 								UpdatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 							},
 | |
| 						},
 | |
| 					},
 | |
| 				},
 | |
| 			}
 | |
| 			if diff := cmp.Diff(expected, result, getCompareOptions()...); diff != "" {
 | |
| 				t.Fatalf("Result mismatch (-want +got):\n%s", diff)
 | |
| 			}
 | |
| 		})
 | |
| 
 | |
| 	scenarioWithPanel(t, "When an admin tries to get all library panels and two exist and typeFilter is set to existing types, it should succeed and the result should be correct",
 | |
| 		func(t *testing.T, sc scenarioContext) {
 | |
| 			command := getCreateCommandWithModel(sc.folder.Id, "Gauge - Library Panel", models.PanelElement, []byte(`
 | |
| 			{
 | |
| 			  "datasource": "${DS_GDEV-TESTDATA}",
 | |
| 			  "id": 1,
 | |
| 			  "title": "Gauge - Library Panel",
 | |
| 			  "type": "gauge",
 | |
| 			  "description": "Gauge description"
 | |
| 			}
 | |
| 		`))
 | |
| 			sc.reqContext.Req.Body = mockRequestBody(command)
 | |
| 			resp := sc.service.createHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			command = getCreateCommandWithModel(sc.folder.Id, "BarGauge - Library Panel", models.PanelElement, []byte(`
 | |
| 			{
 | |
| 			  "datasource": "${DS_GDEV-TESTDATA}",
 | |
| 			  "id": 1,
 | |
| 			  "title": "BarGauge - Library Panel",
 | |
| 			  "type": "bargauge",
 | |
| 			  "description": "BarGauge description"
 | |
| 			}
 | |
| 		`))
 | |
| 			sc.reqContext.Req.Body = mockRequestBody(command)
 | |
| 			resp = sc.service.createHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			err := sc.reqContext.Req.ParseForm()
 | |
| 			require.NoError(t, err)
 | |
| 			sc.reqContext.Req.Form.Add("typeFilter", "bargauge,gauge")
 | |
| 			resp = sc.service.getAllHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			var result libraryElementsSearch
 | |
| 			err = json.Unmarshal(resp.Body(), &result)
 | |
| 			require.NoError(t, err)
 | |
| 			var expected = libraryElementsSearch{
 | |
| 				Result: libraryElementsSearchResult{
 | |
| 					TotalCount: 2,
 | |
| 					Page:       1,
 | |
| 					PerPage:    100,
 | |
| 					Elements: []libraryElement{
 | |
| 						{
 | |
| 							ID:          3,
 | |
| 							OrgID:       1,
 | |
| 							FolderID:    1,
 | |
| 							UID:         result.Result.Elements[0].UID,
 | |
| 							Name:        "BarGauge - Library Panel",
 | |
| 							Kind:        int64(models.PanelElement),
 | |
| 							Type:        "bargauge",
 | |
| 							Description: "BarGauge description",
 | |
| 							Model: map[string]interface{}{
 | |
| 								"datasource":  "${DS_GDEV-TESTDATA}",
 | |
| 								"description": "BarGauge description",
 | |
| 								"id":          float64(1),
 | |
| 								"title":       "BarGauge - Library Panel",
 | |
| 								"type":        "bargauge",
 | |
| 							},
 | |
| 							Version: 1,
 | |
| 							Meta: LibraryElementDTOMeta{
 | |
| 								FolderName:          "ScenarioFolder",
 | |
| 								FolderUID:           sc.folder.Uid,
 | |
| 								ConnectedDashboards: 0,
 | |
| 								Created:             result.Result.Elements[0].Meta.Created,
 | |
| 								Updated:             result.Result.Elements[0].Meta.Updated,
 | |
| 								CreatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 								UpdatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 							},
 | |
| 						},
 | |
| 						{
 | |
| 							ID:          2,
 | |
| 							OrgID:       1,
 | |
| 							FolderID:    1,
 | |
| 							UID:         result.Result.Elements[1].UID,
 | |
| 							Name:        "Gauge - Library Panel",
 | |
| 							Kind:        int64(models.PanelElement),
 | |
| 							Type:        "gauge",
 | |
| 							Description: "Gauge description",
 | |
| 							Model: map[string]interface{}{
 | |
| 								"datasource":  "${DS_GDEV-TESTDATA}",
 | |
| 								"id":          float64(1),
 | |
| 								"title":       "Gauge - Library Panel",
 | |
| 								"type":        "gauge",
 | |
| 								"description": "Gauge description",
 | |
| 							},
 | |
| 							Version: 1,
 | |
| 							Meta: LibraryElementDTOMeta{
 | |
| 								FolderName:          "ScenarioFolder",
 | |
| 								FolderUID:           sc.folder.Uid,
 | |
| 								ConnectedDashboards: 0,
 | |
| 								Created:             result.Result.Elements[1].Meta.Created,
 | |
| 								Updated:             result.Result.Elements[1].Meta.Updated,
 | |
| 								CreatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 								UpdatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 							},
 | |
| 						},
 | |
| 					},
 | |
| 				},
 | |
| 			}
 | |
| 			if diff := cmp.Diff(expected, result, getCompareOptions()...); diff != "" {
 | |
| 				t.Fatalf("Result mismatch (-want +got):\n%s", diff)
 | |
| 			}
 | |
| 		})
 | |
| 
 | |
| 	scenarioWithPanel(t, "When an admin tries to get all library panels and two exist and typeFilter is set to a nonexistent type, it should succeed and the result should be correct",
 | |
| 		func(t *testing.T, sc scenarioContext) {
 | |
| 			command := getCreateCommandWithModel(sc.folder.Id, "Gauge - Library Panel", models.PanelElement, []byte(`
 | |
| 			{
 | |
| 			  "datasource": "${DS_GDEV-TESTDATA}",
 | |
| 			  "id": 1,
 | |
| 			  "title": "Gauge - Library Panel",
 | |
| 			  "type": "gauge",
 | |
| 			  "description": "Gauge description"
 | |
| 			}
 | |
| 		`))
 | |
| 			sc.reqContext.Req.Body = mockRequestBody(command)
 | |
| 			resp := sc.service.createHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			err := sc.reqContext.Req.ParseForm()
 | |
| 			require.NoError(t, err)
 | |
| 			sc.reqContext.Req.Form.Add("typeFilter", "unknown1,unknown2")
 | |
| 			resp = sc.service.getAllHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			var result libraryElementsSearch
 | |
| 			err = json.Unmarshal(resp.Body(), &result)
 | |
| 			require.NoError(t, err)
 | |
| 			var expected = libraryElementsSearch{
 | |
| 				Result: libraryElementsSearchResult{
 | |
| 					TotalCount: 0,
 | |
| 					Page:       1,
 | |
| 					PerPage:    100,
 | |
| 					Elements:   []libraryElement{},
 | |
| 				},
 | |
| 			}
 | |
| 			if diff := cmp.Diff(expected, result, getCompareOptions()...); diff != "" {
 | |
| 				t.Fatalf("Result mismatch (-want +got):\n%s", diff)
 | |
| 			}
 | |
| 		})
 | |
| 
 | |
| 	scenarioWithPanel(t, "When an admin tries to get all library panels and two exist and folderFilter is set to existing folders, it should succeed and the result should be correct",
 | |
| 		func(t *testing.T, sc scenarioContext) {
 | |
| 			newFolder := createFolderWithACL(t, sc.sqlStore, "NewFolder", sc.user, []folderACLItem{})
 | |
| 			command := getCreatePanelCommand(newFolder.ID, "Text - Library Panel2")
 | |
| 			sc.reqContext.Req.Body = mockRequestBody(command)
 | |
| 			resp := sc.service.createHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 			folderFilter := strconv.FormatInt(newFolder.ID, 10)
 | |
| 
 | |
| 			err := sc.reqContext.Req.ParseForm()
 | |
| 			require.NoError(t, err)
 | |
| 			sc.reqContext.Req.Form.Add("folderFilter", folderFilter)
 | |
| 			resp = sc.service.getAllHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			var result libraryElementsSearch
 | |
| 			err = json.Unmarshal(resp.Body(), &result)
 | |
| 			require.NoError(t, err)
 | |
| 			var expected = libraryElementsSearch{
 | |
| 				Result: libraryElementsSearchResult{
 | |
| 					TotalCount: 1,
 | |
| 					Page:       1,
 | |
| 					PerPage:    100,
 | |
| 					Elements: []libraryElement{
 | |
| 						{
 | |
| 							ID:          2,
 | |
| 							OrgID:       1,
 | |
| 							FolderID:    newFolder.ID,
 | |
| 							UID:         result.Result.Elements[0].UID,
 | |
| 							Name:        "Text - Library Panel2",
 | |
| 							Kind:        int64(models.PanelElement),
 | |
| 							Type:        "text",
 | |
| 							Description: "A description",
 | |
| 							Model: map[string]interface{}{
 | |
| 								"datasource":  "${DS_GDEV-TESTDATA}",
 | |
| 								"description": "A description",
 | |
| 								"id":          float64(1),
 | |
| 								"title":       "Text - Library Panel",
 | |
| 								"type":        "text",
 | |
| 							},
 | |
| 							Version: 1,
 | |
| 							Meta: LibraryElementDTOMeta{
 | |
| 								FolderName:          "NewFolder",
 | |
| 								FolderUID:           newFolder.UID,
 | |
| 								ConnectedDashboards: 0,
 | |
| 								Created:             result.Result.Elements[0].Meta.Created,
 | |
| 								Updated:             result.Result.Elements[0].Meta.Updated,
 | |
| 								CreatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 								UpdatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 							},
 | |
| 						},
 | |
| 					},
 | |
| 				},
 | |
| 			}
 | |
| 			if diff := cmp.Diff(expected, result, getCompareOptions()...); diff != "" {
 | |
| 				t.Fatalf("Result mismatch (-want +got):\n%s", diff)
 | |
| 			}
 | |
| 		})
 | |
| 
 | |
| 	scenarioWithPanel(t, "When an admin tries to get all library panels and two exist and folderFilter is set to a nonexistent folders, it should succeed and the result should be correct",
 | |
| 		func(t *testing.T, sc scenarioContext) {
 | |
| 			newFolder := createFolderWithACL(t, sc.sqlStore, "NewFolder", sc.user, []folderACLItem{})
 | |
| 			command := getCreatePanelCommand(newFolder.ID, "Text - Library Panel2")
 | |
| 			sc.reqContext.Req.Body = mockRequestBody(command)
 | |
| 			resp := sc.service.createHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 			folderFilter := "2020,2021"
 | |
| 
 | |
| 			err := sc.reqContext.Req.ParseForm()
 | |
| 			require.NoError(t, err)
 | |
| 			sc.reqContext.Req.Form.Add("folderFilter", folderFilter)
 | |
| 			resp = sc.service.getAllHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			var result libraryElementsSearch
 | |
| 			err = json.Unmarshal(resp.Body(), &result)
 | |
| 			require.NoError(t, err)
 | |
| 			var expected = libraryElementsSearch{
 | |
| 				Result: libraryElementsSearchResult{
 | |
| 					TotalCount: 0,
 | |
| 					Page:       1,
 | |
| 					PerPage:    100,
 | |
| 					Elements:   []libraryElement{},
 | |
| 				},
 | |
| 			}
 | |
| 			if diff := cmp.Diff(expected, result, getCompareOptions()...); diff != "" {
 | |
| 				t.Fatalf("Result mismatch (-want +got):\n%s", diff)
 | |
| 			}
 | |
| 		})
 | |
| 
 | |
| 	scenarioWithPanel(t, "When an admin tries to get all library panels and two exist and folderFilter is set to General folder, it should succeed and the result should be correct",
 | |
| 		func(t *testing.T, sc scenarioContext) {
 | |
| 			command := getCreatePanelCommand(sc.folder.Id, "Text - Library Panel2")
 | |
| 			sc.reqContext.Req.Body = mockRequestBody(command)
 | |
| 			resp := sc.service.createHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 			folderFilter := "0"
 | |
| 
 | |
| 			err := sc.reqContext.Req.ParseForm()
 | |
| 			require.NoError(t, err)
 | |
| 			sc.reqContext.Req.Form.Add("folderFilter", folderFilter)
 | |
| 			resp = sc.service.getAllHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			var result libraryElementsSearch
 | |
| 			err = json.Unmarshal(resp.Body(), &result)
 | |
| 			require.NoError(t, err)
 | |
| 			var expected = libraryElementsSearch{
 | |
| 				Result: libraryElementsSearchResult{
 | |
| 					TotalCount: 0,
 | |
| 					Page:       1,
 | |
| 					PerPage:    100,
 | |
| 					Elements: []libraryElement{
 | |
| 						{
 | |
| 							ID:          1,
 | |
| 							OrgID:       1,
 | |
| 							FolderID:    1,
 | |
| 							UID:         result.Result.Elements[0].UID,
 | |
| 							Name:        "Text - Library Panel",
 | |
| 							Kind:        int64(models.PanelElement),
 | |
| 							Type:        "text",
 | |
| 							Description: "A description",
 | |
| 							Model: map[string]interface{}{
 | |
| 								"datasource":  "${DS_GDEV-TESTDATA}",
 | |
| 								"description": "A description",
 | |
| 								"id":          float64(1),
 | |
| 								"title":       "Text - Library Panel",
 | |
| 								"type":        "text",
 | |
| 							},
 | |
| 							Version: 1,
 | |
| 							Meta: LibraryElementDTOMeta{
 | |
| 								FolderName:          "ScenarioFolder",
 | |
| 								FolderUID:           sc.folder.Uid,
 | |
| 								ConnectedDashboards: 0,
 | |
| 								Created:             result.Result.Elements[0].Meta.Created,
 | |
| 								Updated:             result.Result.Elements[0].Meta.Updated,
 | |
| 								CreatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 								UpdatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 							},
 | |
| 						},
 | |
| 						{
 | |
| 							ID:          2,
 | |
| 							OrgID:       1,
 | |
| 							FolderID:    1,
 | |
| 							UID:         result.Result.Elements[1].UID,
 | |
| 							Name:        "Text - Library Panel2",
 | |
| 							Kind:        int64(models.PanelElement),
 | |
| 							Type:        "text",
 | |
| 							Description: "A description",
 | |
| 							Model: map[string]interface{}{
 | |
| 								"datasource":  "${DS_GDEV-TESTDATA}",
 | |
| 								"description": "A description",
 | |
| 								"id":          float64(1),
 | |
| 								"title":       "Text - Library Panel",
 | |
| 								"type":        "text",
 | |
| 							},
 | |
| 							Version: 1,
 | |
| 							Meta: LibraryElementDTOMeta{
 | |
| 								FolderName:          "ScenarioFolder",
 | |
| 								FolderUID:           sc.folder.Uid,
 | |
| 								ConnectedDashboards: 0,
 | |
| 								Created:             result.Result.Elements[1].Meta.Created,
 | |
| 								Updated:             result.Result.Elements[1].Meta.Updated,
 | |
| 								CreatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 								UpdatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 							},
 | |
| 						},
 | |
| 					},
 | |
| 				},
 | |
| 			}
 | |
| 			if diff := cmp.Diff(expected, result, getCompareOptions()...); diff != "" {
 | |
| 				t.Fatalf("Result mismatch (-want +got):\n%s", diff)
 | |
| 			}
 | |
| 		})
 | |
| 
 | |
| 	scenarioWithPanel(t, "When an admin tries to get all library panels and two exist and excludeUID is set, it should succeed and the result should be correct",
 | |
| 		func(t *testing.T, sc scenarioContext) {
 | |
| 			command := getCreatePanelCommand(sc.folder.Id, "Text - Library Panel2")
 | |
| 			sc.reqContext.Req.Body = mockRequestBody(command)
 | |
| 			resp := sc.service.createHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			err := sc.reqContext.Req.ParseForm()
 | |
| 			require.NoError(t, err)
 | |
| 			sc.reqContext.Req.Form.Add("excludeUid", sc.initialResult.Result.UID)
 | |
| 			resp = sc.service.getAllHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			var result libraryElementsSearch
 | |
| 			err = json.Unmarshal(resp.Body(), &result)
 | |
| 			require.NoError(t, err)
 | |
| 			var expected = libraryElementsSearch{
 | |
| 				Result: libraryElementsSearchResult{
 | |
| 					TotalCount: 1,
 | |
| 					Page:       1,
 | |
| 					PerPage:    100,
 | |
| 					Elements: []libraryElement{
 | |
| 						{
 | |
| 							ID:          2,
 | |
| 							OrgID:       1,
 | |
| 							FolderID:    1,
 | |
| 							UID:         result.Result.Elements[0].UID,
 | |
| 							Name:        "Text - Library Panel2",
 | |
| 							Kind:        int64(models.PanelElement),
 | |
| 							Type:        "text",
 | |
| 							Description: "A description",
 | |
| 							Model: map[string]interface{}{
 | |
| 								"datasource":  "${DS_GDEV-TESTDATA}",
 | |
| 								"description": "A description",
 | |
| 								"id":          float64(1),
 | |
| 								"title":       "Text - Library Panel",
 | |
| 								"type":        "text",
 | |
| 							},
 | |
| 							Version: 1,
 | |
| 							Meta: LibraryElementDTOMeta{
 | |
| 								FolderName:          "ScenarioFolder",
 | |
| 								FolderUID:           sc.folder.Uid,
 | |
| 								ConnectedDashboards: 0,
 | |
| 								Created:             result.Result.Elements[0].Meta.Created,
 | |
| 								Updated:             result.Result.Elements[0].Meta.Updated,
 | |
| 								CreatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 								UpdatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 							},
 | |
| 						},
 | |
| 					},
 | |
| 				},
 | |
| 			}
 | |
| 			if diff := cmp.Diff(expected, result, getCompareOptions()...); diff != "" {
 | |
| 				t.Fatalf("Result mismatch (-want +got):\n%s", diff)
 | |
| 			}
 | |
| 		})
 | |
| 
 | |
| 	scenarioWithPanel(t, "When an admin tries to get all library panels and two exist and perPage is 1, it should succeed and the result should be correct",
 | |
| 		func(t *testing.T, sc scenarioContext) {
 | |
| 			command := getCreatePanelCommand(sc.folder.Id, "Text - Library Panel2")
 | |
| 			sc.reqContext.Req.Body = mockRequestBody(command)
 | |
| 			resp := sc.service.createHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			err := sc.reqContext.Req.ParseForm()
 | |
| 			require.NoError(t, err)
 | |
| 			sc.reqContext.Req.Form.Add("perPage", "1")
 | |
| 			resp = sc.service.getAllHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			var result libraryElementsSearch
 | |
| 			err = json.Unmarshal(resp.Body(), &result)
 | |
| 			require.NoError(t, err)
 | |
| 			var expected = libraryElementsSearch{
 | |
| 				Result: libraryElementsSearchResult{
 | |
| 					TotalCount: 2,
 | |
| 					Page:       1,
 | |
| 					PerPage:    1,
 | |
| 					Elements: []libraryElement{
 | |
| 						{
 | |
| 							ID:          1,
 | |
| 							OrgID:       1,
 | |
| 							FolderID:    1,
 | |
| 							UID:         result.Result.Elements[0].UID,
 | |
| 							Name:        "Text - Library Panel",
 | |
| 							Kind:        int64(models.PanelElement),
 | |
| 							Type:        "text",
 | |
| 							Description: "A description",
 | |
| 							Model: map[string]interface{}{
 | |
| 								"datasource":  "${DS_GDEV-TESTDATA}",
 | |
| 								"description": "A description",
 | |
| 								"id":          float64(1),
 | |
| 								"title":       "Text - Library Panel",
 | |
| 								"type":        "text",
 | |
| 							},
 | |
| 							Version: 1,
 | |
| 							Meta: LibraryElementDTOMeta{
 | |
| 								FolderName:          "ScenarioFolder",
 | |
| 								FolderUID:           sc.folder.Uid,
 | |
| 								ConnectedDashboards: 0,
 | |
| 								Created:             result.Result.Elements[0].Meta.Created,
 | |
| 								Updated:             result.Result.Elements[0].Meta.Updated,
 | |
| 								CreatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 								UpdatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 							},
 | |
| 						},
 | |
| 					},
 | |
| 				},
 | |
| 			}
 | |
| 			if diff := cmp.Diff(expected, result, getCompareOptions()...); diff != "" {
 | |
| 				t.Fatalf("Result mismatch (-want +got):\n%s", diff)
 | |
| 			}
 | |
| 		})
 | |
| 
 | |
| 	scenarioWithPanel(t, "When an admin tries to get all library panels and two exist and perPage is 1 and page is 2, it should succeed and the result should be correct",
 | |
| 		func(t *testing.T, sc scenarioContext) {
 | |
| 			command := getCreatePanelCommand(sc.folder.Id, "Text - Library Panel2")
 | |
| 			sc.reqContext.Req.Body = mockRequestBody(command)
 | |
| 			resp := sc.service.createHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			err := sc.reqContext.Req.ParseForm()
 | |
| 			require.NoError(t, err)
 | |
| 			sc.reqContext.Req.Form.Add("perPage", "1")
 | |
| 			sc.reqContext.Req.Form.Add("page", "2")
 | |
| 			resp = sc.service.getAllHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			var result libraryElementsSearch
 | |
| 			err = json.Unmarshal(resp.Body(), &result)
 | |
| 			require.NoError(t, err)
 | |
| 			var expected = libraryElementsSearch{
 | |
| 				Result: libraryElementsSearchResult{
 | |
| 					TotalCount: 2,
 | |
| 					Page:       2,
 | |
| 					PerPage:    1,
 | |
| 					Elements: []libraryElement{
 | |
| 						{
 | |
| 							ID:          2,
 | |
| 							OrgID:       1,
 | |
| 							FolderID:    1,
 | |
| 							UID:         result.Result.Elements[0].UID,
 | |
| 							Name:        "Text - Library Panel2",
 | |
| 							Kind:        int64(models.PanelElement),
 | |
| 							Type:        "text",
 | |
| 							Description: "A description",
 | |
| 							Model: map[string]interface{}{
 | |
| 								"datasource":  "${DS_GDEV-TESTDATA}",
 | |
| 								"description": "A description",
 | |
| 								"id":          float64(1),
 | |
| 								"title":       "Text - Library Panel",
 | |
| 								"type":        "text",
 | |
| 							},
 | |
| 							Version: 1,
 | |
| 							Meta: LibraryElementDTOMeta{
 | |
| 								FolderName:          "ScenarioFolder",
 | |
| 								FolderUID:           sc.folder.Uid,
 | |
| 								ConnectedDashboards: 0,
 | |
| 								Created:             result.Result.Elements[0].Meta.Created,
 | |
| 								Updated:             result.Result.Elements[0].Meta.Updated,
 | |
| 								CreatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 								UpdatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 							},
 | |
| 						},
 | |
| 					},
 | |
| 				},
 | |
| 			}
 | |
| 			if diff := cmp.Diff(expected, result, getCompareOptions()...); diff != "" {
 | |
| 				t.Fatalf("Result mismatch (-want +got):\n%s", diff)
 | |
| 			}
 | |
| 		})
 | |
| 
 | |
| 	scenarioWithPanel(t, "When an admin tries to get all library panels and two exist and searchString exists in the description, it should succeed and the result should be correct",
 | |
| 		func(t *testing.T, sc scenarioContext) {
 | |
| 			command := getCreateCommandWithModel(sc.folder.Id, "Text - Library Panel2", models.PanelElement, []byte(`
 | |
| 			{
 | |
| 			  "datasource": "${DS_GDEV-TESTDATA}",
 | |
| 			  "id": 1,
 | |
| 			  "title": "Text - Library Panel",
 | |
| 			  "type": "text",
 | |
| 			  "description": "Some other d e s c r i p t i o n"
 | |
| 			}
 | |
| 		`))
 | |
| 			sc.reqContext.Req.Body = mockRequestBody(command)
 | |
| 			resp := sc.service.createHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			err := sc.reqContext.Req.ParseForm()
 | |
| 			require.NoError(t, err)
 | |
| 			sc.reqContext.Req.Form.Add("perPage", "1")
 | |
| 			sc.reqContext.Req.Form.Add("page", "1")
 | |
| 			sc.reqContext.Req.Form.Add("searchString", "description")
 | |
| 			resp = sc.service.getAllHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			var result libraryElementsSearch
 | |
| 			err = json.Unmarshal(resp.Body(), &result)
 | |
| 			require.NoError(t, err)
 | |
| 			var expected = libraryElementsSearch{
 | |
| 				Result: libraryElementsSearchResult{
 | |
| 					TotalCount: 1,
 | |
| 					Page:       1,
 | |
| 					PerPage:    1,
 | |
| 					Elements: []libraryElement{
 | |
| 						{
 | |
| 							ID:          1,
 | |
| 							OrgID:       1,
 | |
| 							FolderID:    1,
 | |
| 							UID:         result.Result.Elements[0].UID,
 | |
| 							Name:        "Text - Library Panel",
 | |
| 							Kind:        int64(models.PanelElement),
 | |
| 							Type:        "text",
 | |
| 							Description: "A description",
 | |
| 							Model: map[string]interface{}{
 | |
| 								"datasource":  "${DS_GDEV-TESTDATA}",
 | |
| 								"description": "A description",
 | |
| 								"id":          float64(1),
 | |
| 								"title":       "Text - Library Panel",
 | |
| 								"type":        "text",
 | |
| 							},
 | |
| 							Version: 1,
 | |
| 							Meta: LibraryElementDTOMeta{
 | |
| 								FolderName:          "ScenarioFolder",
 | |
| 								FolderUID:           sc.folder.Uid,
 | |
| 								ConnectedDashboards: 0,
 | |
| 								Created:             result.Result.Elements[0].Meta.Created,
 | |
| 								Updated:             result.Result.Elements[0].Meta.Updated,
 | |
| 								CreatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 								UpdatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 							},
 | |
| 						},
 | |
| 					},
 | |
| 				},
 | |
| 			}
 | |
| 			if diff := cmp.Diff(expected, result, getCompareOptions()...); diff != "" {
 | |
| 				t.Fatalf("Result mismatch (-want +got):\n%s", diff)
 | |
| 			}
 | |
| 		})
 | |
| 
 | |
| 	scenarioWithPanel(t, "When an admin tries to get all library panels and two exist and searchString exists in both name and description, it should succeed and the result should be correct",
 | |
| 		func(t *testing.T, sc scenarioContext) {
 | |
| 			command := getCreateCommandWithModel(sc.folder.Id, "Some Other", models.PanelElement, []byte(`
 | |
| 			{
 | |
| 			  "datasource": "${DS_GDEV-TESTDATA}",
 | |
| 			  "id": 1,
 | |
| 			  "title": "Text - Library Panel",
 | |
| 			  "type": "text",
 | |
| 			  "description": "A Library Panel"
 | |
| 			}
 | |
| 		`))
 | |
| 			sc.reqContext.Req.Body = mockRequestBody(command)
 | |
| 			resp := sc.service.createHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			err := sc.reqContext.Req.ParseForm()
 | |
| 			require.NoError(t, err)
 | |
| 			sc.reqContext.Req.Form.Add("searchString", "Library Panel")
 | |
| 			resp = sc.service.getAllHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			var result libraryElementsSearch
 | |
| 			err = json.Unmarshal(resp.Body(), &result)
 | |
| 			require.NoError(t, err)
 | |
| 			var expected = libraryElementsSearch{
 | |
| 				Result: libraryElementsSearchResult{
 | |
| 					TotalCount: 2,
 | |
| 					Page:       1,
 | |
| 					PerPage:    100,
 | |
| 					Elements: []libraryElement{
 | |
| 						{
 | |
| 							ID:          2,
 | |
| 							OrgID:       1,
 | |
| 							FolderID:    1,
 | |
| 							UID:         result.Result.Elements[0].UID,
 | |
| 							Name:        "Some Other",
 | |
| 							Kind:        int64(models.PanelElement),
 | |
| 							Type:        "text",
 | |
| 							Description: "A Library Panel",
 | |
| 							Model: map[string]interface{}{
 | |
| 								"datasource":  "${DS_GDEV-TESTDATA}",
 | |
| 								"description": "A Library Panel",
 | |
| 								"id":          float64(1),
 | |
| 								"title":       "Text - Library Panel",
 | |
| 								"type":        "text",
 | |
| 							},
 | |
| 							Version: 1,
 | |
| 							Meta: LibraryElementDTOMeta{
 | |
| 								FolderName:          "ScenarioFolder",
 | |
| 								FolderUID:           sc.folder.Uid,
 | |
| 								ConnectedDashboards: 0,
 | |
| 								Created:             result.Result.Elements[0].Meta.Created,
 | |
| 								Updated:             result.Result.Elements[0].Meta.Updated,
 | |
| 								CreatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 								UpdatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 							},
 | |
| 						},
 | |
| 						{
 | |
| 							ID:          1,
 | |
| 							OrgID:       1,
 | |
| 							FolderID:    1,
 | |
| 							UID:         result.Result.Elements[1].UID,
 | |
| 							Name:        "Text - Library Panel",
 | |
| 							Kind:        int64(models.PanelElement),
 | |
| 							Type:        "text",
 | |
| 							Description: "A description",
 | |
| 							Model: map[string]interface{}{
 | |
| 								"datasource":  "${DS_GDEV-TESTDATA}",
 | |
| 								"description": "A description",
 | |
| 								"id":          float64(1),
 | |
| 								"title":       "Text - Library Panel",
 | |
| 								"type":        "text",
 | |
| 							},
 | |
| 							Version: 1,
 | |
| 							Meta: LibraryElementDTOMeta{
 | |
| 								FolderName:          "ScenarioFolder",
 | |
| 								FolderUID:           sc.folder.Uid,
 | |
| 								ConnectedDashboards: 0,
 | |
| 								Created:             result.Result.Elements[1].Meta.Created,
 | |
| 								Updated:             result.Result.Elements[1].Meta.Updated,
 | |
| 								CreatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 								UpdatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 							},
 | |
| 						},
 | |
| 					},
 | |
| 				},
 | |
| 			}
 | |
| 			if diff := cmp.Diff(expected, result, getCompareOptions()...); diff != "" {
 | |
| 				t.Fatalf("Result mismatch (-want +got):\n%s", diff)
 | |
| 			}
 | |
| 		})
 | |
| 
 | |
| 	scenarioWithPanel(t, "When an admin tries to get all library panels and two exist and perPage is 1 and page is 1 and searchString is panel2, it should succeed and the result should be correct",
 | |
| 		func(t *testing.T, sc scenarioContext) {
 | |
| 			command := getCreatePanelCommand(sc.folder.Id, "Text - Library Panel2")
 | |
| 			sc.reqContext.Req.Body = mockRequestBody(command)
 | |
| 			resp := sc.service.createHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			err := sc.reqContext.Req.ParseForm()
 | |
| 			require.NoError(t, err)
 | |
| 			sc.reqContext.Req.Form.Add("perPage", "1")
 | |
| 			sc.reqContext.Req.Form.Add("page", "1")
 | |
| 			sc.reqContext.Req.Form.Add("searchString", "panel2")
 | |
| 			resp = sc.service.getAllHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			var result libraryElementsSearch
 | |
| 			err = json.Unmarshal(resp.Body(), &result)
 | |
| 			require.NoError(t, err)
 | |
| 			var expected = libraryElementsSearch{
 | |
| 				Result: libraryElementsSearchResult{
 | |
| 					TotalCount: 1,
 | |
| 					Page:       1,
 | |
| 					PerPage:    1,
 | |
| 					Elements: []libraryElement{
 | |
| 						{
 | |
| 							ID:          2,
 | |
| 							OrgID:       1,
 | |
| 							FolderID:    1,
 | |
| 							UID:         result.Result.Elements[0].UID,
 | |
| 							Name:        "Text - Library Panel2",
 | |
| 							Kind:        int64(models.PanelElement),
 | |
| 							Type:        "text",
 | |
| 							Description: "A description",
 | |
| 							Model: map[string]interface{}{
 | |
| 								"datasource":  "${DS_GDEV-TESTDATA}",
 | |
| 								"description": "A description",
 | |
| 								"id":          float64(1),
 | |
| 								"title":       "Text - Library Panel",
 | |
| 								"type":        "text",
 | |
| 							},
 | |
| 							Version: 1,
 | |
| 							Meta: LibraryElementDTOMeta{
 | |
| 								FolderName:          "ScenarioFolder",
 | |
| 								FolderUID:           sc.folder.Uid,
 | |
| 								ConnectedDashboards: 0,
 | |
| 								Created:             result.Result.Elements[0].Meta.Created,
 | |
| 								Updated:             result.Result.Elements[0].Meta.Updated,
 | |
| 								CreatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 								UpdatedBy: LibraryElementDTOMetaUser{
 | |
| 									ID:        1,
 | |
| 									Name:      userInDbName,
 | |
| 									AvatarURL: userInDbAvatar,
 | |
| 								},
 | |
| 							},
 | |
| 						},
 | |
| 					},
 | |
| 				},
 | |
| 			}
 | |
| 			if diff := cmp.Diff(expected, result, getCompareOptions()...); diff != "" {
 | |
| 				t.Fatalf("Result mismatch (-want +got):\n%s", diff)
 | |
| 			}
 | |
| 		})
 | |
| 
 | |
| 	scenarioWithPanel(t, "When an admin tries to get all library panels and two exist and perPage is 1 and page is 3 and searchString is panel, it should succeed and the result should be correct",
 | |
| 		func(t *testing.T, sc scenarioContext) {
 | |
| 			command := getCreatePanelCommand(sc.folder.Id, "Text - Library Panel2")
 | |
| 			sc.reqContext.Req.Body = mockRequestBody(command)
 | |
| 			resp := sc.service.createHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			err := sc.reqContext.Req.ParseForm()
 | |
| 			require.NoError(t, err)
 | |
| 			sc.reqContext.Req.Form.Add("perPage", "1")
 | |
| 			sc.reqContext.Req.Form.Add("page", "3")
 | |
| 			sc.reqContext.Req.Form.Add("searchString", "panel")
 | |
| 			resp = sc.service.getAllHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			var result libraryElementsSearch
 | |
| 			err = json.Unmarshal(resp.Body(), &result)
 | |
| 			require.NoError(t, err)
 | |
| 			var expected = libraryElementsSearch{
 | |
| 				Result: libraryElementsSearchResult{
 | |
| 					TotalCount: 2,
 | |
| 					Page:       3,
 | |
| 					PerPage:    1,
 | |
| 					Elements:   []libraryElement{},
 | |
| 				},
 | |
| 			}
 | |
| 			if diff := cmp.Diff(expected, result, getCompareOptions()...); diff != "" {
 | |
| 				t.Fatalf("Result mismatch (-want +got):\n%s", diff)
 | |
| 			}
 | |
| 		})
 | |
| 
 | |
| 	scenarioWithPanel(t, "When an admin tries to get all library panels and two exist and perPage is 1 and page is 3 and searchString does not exist, it should succeed and the result should be correct",
 | |
| 		func(t *testing.T, sc scenarioContext) {
 | |
| 			command := getCreatePanelCommand(sc.folder.Id, "Text - Library Panel2")
 | |
| 			sc.reqContext.Req.Body = mockRequestBody(command)
 | |
| 			resp := sc.service.createHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			err := sc.reqContext.Req.ParseForm()
 | |
| 			require.NoError(t, err)
 | |
| 			sc.reqContext.Req.Form.Add("perPage", "1")
 | |
| 			sc.reqContext.Req.Form.Add("page", "3")
 | |
| 			sc.reqContext.Req.Form.Add("searchString", "monkey")
 | |
| 			resp = sc.service.getAllHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			var result libraryElementsSearch
 | |
| 			err = json.Unmarshal(resp.Body(), &result)
 | |
| 			require.NoError(t, err)
 | |
| 			var expected = libraryElementsSearch{
 | |
| 				Result: libraryElementsSearchResult{
 | |
| 					TotalCount: 0,
 | |
| 					Page:       3,
 | |
| 					PerPage:    1,
 | |
| 					Elements:   []libraryElement{},
 | |
| 				},
 | |
| 			}
 | |
| 			if diff := cmp.Diff(expected, result, getCompareOptions()...); diff != "" {
 | |
| 				t.Fatalf("Result mismatch (-want +got):\n%s", diff)
 | |
| 			}
 | |
| 		})
 | |
| 
 | |
| 	scenarioWithPanel(t, "When an admin tries to get all library panels in a different org, none should be returned",
 | |
| 		func(t *testing.T, sc scenarioContext) {
 | |
| 			resp := sc.service.getAllHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			var result libraryElementsSearch
 | |
| 			err := json.Unmarshal(resp.Body(), &result)
 | |
| 			require.NoError(t, err)
 | |
| 			require.Equal(t, 1, len(result.Result.Elements))
 | |
| 			require.Equal(t, int64(1), result.Result.Elements[0].FolderID)
 | |
| 			require.Equal(t, "Text - Library Panel", result.Result.Elements[0].Name)
 | |
| 
 | |
| 			sc.reqContext.SignedInUser.OrgID = 2
 | |
| 			sc.reqContext.SignedInUser.OrgRole = org.RoleAdmin
 | |
| 			resp = sc.service.getAllHandler(sc.reqContext)
 | |
| 			require.Equal(t, 200, resp.Status())
 | |
| 
 | |
| 			result = libraryElementsSearch{}
 | |
| 			err = json.Unmarshal(resp.Body(), &result)
 | |
| 			require.NoError(t, err)
 | |
| 			var expected = libraryElementsSearch{
 | |
| 				Result: libraryElementsSearchResult{
 | |
| 					TotalCount: 0,
 | |
| 					Elements:   []libraryElement{},
 | |
| 					Page:       1,
 | |
| 					PerPage:    100,
 | |
| 				},
 | |
| 			}
 | |
| 			if diff := cmp.Diff(expected, result, getCompareOptions()...); diff != "" {
 | |
| 				t.Fatalf("Result mismatch (-want +got):\n%s", diff)
 | |
| 			}
 | |
| 		})
 | |
| }
 |