github.com/esnet/gdg@v0.6.1-0.20240412190737-6b6eba9c14d8/test/libraryelements_integration_test.go (about)

     1  package test
     2  
     3  import (
     4  	"github.com/esnet/gdg/internal/service"
     5  	"github.com/gosimple/slug"
     6  	"github.com/grafana/grafana-openapi-client-go/models"
     7  	"github.com/stretchr/testify/assert"
     8  	"log/slog"
     9  	"testing"
    10  )
    11  
    12  func TestLibraryElementsCRUD(t *testing.T) {
    13  	if testing.Short() {
    14  		t.Skip("skipping integration test")
    15  	}
    16  
    17  	apiClient, _, cleanup := initTest(t, nil)
    18  	defer cleanup()
    19  	apiClient.DeleteAllDashboards(service.NewDashboardFilter("", "", ""))
    20  	filtersEntity := service.NewDashboardFilter("", "", "")
    21  	slog.Info("Exporting all Library Elements")
    22  	apiClient.UploadLibraryElements(filtersEntity)
    23  	slog.Info("Listing all library elements")
    24  	boards := apiClient.ListLibraryElements(filtersEntity)
    25  	slog.Info("Imported library elements", "count", len(boards))
    26  	var generalBoard *models.LibraryElementDTO
    27  	var otherBoard *models.LibraryElementDTO
    28  	for ndx, board := range boards {
    29  		slog.Info(board.Name)
    30  		if slug.Make(board.Name) == "dashboard-makeover-extra-cleaning-duty-assignment-today" {
    31  			generalBoard = boards[ndx]
    32  		}
    33  		if slug.Make(board.Name) == "extreme-dashboard-makeover-mac-oven" {
    34  			otherBoard = boards[ndx]
    35  		}
    36  	}
    37  	assert.NotNil(t, otherBoard)
    38  	assert.NotNil(t, generalBoard)
    39  	validateLibraryElement(t, generalBoard, map[string]interface{}{"Name": "Dashboard Makeover - Extra Cleaning Duty Assignment Today",
    40  		"Type": "table", "UID": "T47RSwQnz", "Kind": int64(1)})
    41  	validateLibraryElement(t, otherBoard, map[string]interface{}{"Name": "Extreme Dashboard Makeover - Mac Oven",
    42  		"Type": "stat", "UID": "VvzpJ5X7z", "Kind": int64(1)})
    43  
    44  	//Import Library Elements
    45  	slog.Info("Importing Library Elements")
    46  	list := apiClient.DownloadLibraryElements(filtersEntity)
    47  	assert.Equal(t, len(list), len(boards))
    48  	//Export all Dashboards
    49  	apiClient.UploadDashboards(service.NewDashboardFilter("", "", ""))
    50  	//List connection
    51  	connections := apiClient.ListLibraryElementsConnections(nil, "T47RSwQnz")
    52  	assert.Equal(t, len(connections), 1)
    53  	connection := connections[0]
    54  
    55  	assert.Equal(t, connection.Meta.FolderTitle, "Other")
    56  	assert.True(t, len(connection.Meta.FolderUID) > 0)
    57  	assert.Equal(t, connection.Meta.Slug, "dashboard-makeover-challenge")
    58  	assert.Equal(t, connection.Dashboard.(map[string]interface{})["uid"].(string), "F3eInwQ7z")
    59  	assert.Equal(t, connection.Dashboard.(map[string]interface{})["title"].(string), "Dashboard Makeover Challenge")
    60  
    61  	//Delete All Dashboards
    62  	apiClient.DeleteAllDashboards(service.NewDashboardFilter("", "", ""))
    63  	slog.Info("Deleting Library Elements")
    64  	deleteList := apiClient.DeleteAllLibraryElements(filtersEntity)
    65  	assert.Equal(t, len(deleteList), len(boards))
    66  	slog.Info("List Dashboards again")
    67  	boards = apiClient.ListLibraryElements(filtersEntity)
    68  	assert.Equal(t, len(boards), 0)
    69  
    70  }
    71  
    72  func validateLibraryElement(t *testing.T, board *models.LibraryElementDTO, data map[string]interface{}) {
    73  	assert.Equal(t, board.Name, data["Name"].(string))
    74  	assert.Equal(t, board.Type, data["Type"].(string))
    75  	assert.Equal(t, board.UID, data["UID"].(string))
    76  	assert.Equal(t, board.Kind, data["Kind"].(int64))
    77  
    78  }