github.com/newrelic/newrelic-client-go@v1.1.0/pkg/dashboards/dashboards_widgets_integration_test.go (about)

     1  //go:build integration
     2  // +build integration
     3  
     4  package dashboards
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/assert"
    10  	"github.com/stretchr/testify/require"
    11  
    12  	"github.com/newrelic/newrelic-client-go/pkg/entities"
    13  	mock "github.com/newrelic/newrelic-client-go/pkg/testhelpers"
    14  )
    15  
    16  func TestIntegrationDashboard_Billboard(t *testing.T) {
    17  	t.Parallel()
    18  
    19  	testAccountID, err := mock.GetTestAccountID()
    20  	if err != nil {
    21  		t.Skipf("%s", err)
    22  	}
    23  
    24  	client := newIntegrationTestClient(t)
    25  
    26  	// Test vars
    27  	dashboardName := "newrelic-client-go test-dashboard-" + mock.RandSeq(5)
    28  	dashboardInput := DashboardInput{
    29  		Description: "Test description",
    30  		Name:        dashboardName,
    31  		Permissions: entities.DashboardPermissionsTypes.PRIVATE,
    32  		Pages: []DashboardPageInput{
    33  			{
    34  				Description: "Test page description",
    35  				Name:        "Test Page",
    36  				Widgets: []DashboardWidgetInput{
    37  					{
    38  						Title: "Test Text Widget",
    39  						Configuration: DashboardWidgetConfigurationInput{
    40  							Billboard: &DashboardBillboardWidgetConfigurationInput{
    41  								NRQLQueries: []DashboardWidgetNRQLQueryInput{
    42  									{
    43  										AccountID: testAccountID,
    44  										Query:     "FROM Metric SELECT 1",
    45  									},
    46  								},
    47  								// Thresholds: []DashboardBillboardWidgetThresholdInput
    48  							},
    49  						},
    50  					},
    51  				},
    52  			},
    53  		},
    54  	}
    55  
    56  	// Test: DashboardCreate
    57  	result, err := client.DashboardCreate(testAccountID, dashboardInput)
    58  
    59  	require.NoError(t, err)
    60  	require.NotNil(t, result)
    61  	assert.Equal(t, 0, len(result.Errors))
    62  	require.NotNil(t, result.EntityResult.GUID)
    63  
    64  	dashGUID := result.EntityResult.GUID
    65  
    66  	// Test: GetDashboardEntity
    67  	dash, err := client.GetDashboardEntity(dashGUID)
    68  	require.NoError(t, err)
    69  	require.NotNil(t, dash)
    70  
    71  	assert.Equal(t, dashGUID, dash.GUID)
    72  	assert.Equal(t, dashboardInput.Description, dash.Description)
    73  	assert.Equal(t, dashboardInput.Name, dash.Name)
    74  	assert.Equal(t, dashboardInput.Permissions, dash.Permissions)
    75  
    76  	// Input and Pages are different types so we can not easily compare them...
    77  	assert.Equal(t, len(dashboardInput.Pages), len(dash.Pages))
    78  	require.Equal(t, 1, len(dash.Pages))
    79  	require.Equal(t, 1, len(dash.Pages[0].Widgets))
    80  
    81  	assert.Equal(t, dashboardInput.Pages[0].Widgets[0].Title, dash.Pages[0].Widgets[0].Title)
    82  	assert.Equal(t, dashboardInput.Pages[0].Widgets[0].Configuration.Billboard.NRQLQueries[0].Query, dash.Pages[0].Widgets[0].Configuration.Billboard.NRQLQueries[0].Query)
    83  	assert.Nil(t, dash.Pages[0].Widgets[0].Configuration.Billboard.Thresholds)
    84  	assert.Greater(t, len(dash.Pages[0].Widgets[0].RawConfiguration), 1)
    85  
    86  	testWarningThreshold := 10.0
    87  
    88  	// Test: DashboardUpdate
    89  	updatedDashboard := DashboardInput{
    90  		Name:        dash.Name,
    91  		Permissions: dash.Permissions,
    92  		Pages: []DashboardPageInput{
    93  			{
    94  				Name: dash.Pages[0].Name,
    95  				Widgets: []DashboardWidgetInput{
    96  					{
    97  						Title: "Test BillboardText Widget",
    98  						Configuration: DashboardWidgetConfigurationInput{
    99  							Billboard: &DashboardBillboardWidgetConfigurationInput{
   100  								NRQLQueries: []DashboardWidgetNRQLQueryInput{
   101  									{
   102  										AccountID: testAccountID,
   103  										Query:     "FROM Metric SELECT 1",
   104  									},
   105  								},
   106  								Thresholds: []DashboardBillboardWidgetThresholdInput{
   107  									{
   108  										AlertSeverity: entities.DashboardAlertSeverityTypes.WARNING,
   109  										Value:         &testWarningThreshold,
   110  									},
   111  								},
   112  							},
   113  						},
   114  					},
   115  				},
   116  			},
   117  		},
   118  	}
   119  
   120  	upDash, err := client.DashboardUpdate(updatedDashboard, dashGUID)
   121  	require.NoError(t, err)
   122  	require.NotNil(t, upDash)
   123  
   124  	require.Equal(t, 1, len(upDash.EntityResult.Pages))
   125  	require.Equal(t, 1, len(upDash.EntityResult.Pages[0].Widgets))
   126  	assert.Equal(t, updatedDashboard.Pages[0].Widgets[0].Title, upDash.EntityResult.Pages[0].Widgets[0].Title)
   127  	require.Equal(t, 1, len(upDash.EntityResult.Pages[0].Widgets[0].Configuration.Billboard.NRQLQueries))
   128  	assert.Equal(t, updatedDashboard.Pages[0].Widgets[0].Configuration.Billboard.NRQLQueries[0].Query, upDash.EntityResult.Pages[0].Widgets[0].Configuration.Billboard.NRQLQueries[0].Query)
   129  	require.Equal(t, 1, len(upDash.EntityResult.Pages[0].Widgets[0].Configuration.Billboard.Thresholds))
   130  	assert.Equal(t, updatedDashboard.Pages[0].Widgets[0].Configuration.Billboard.Thresholds[0].AlertSeverity, upDash.EntityResult.Pages[0].Widgets[0].Configuration.Billboard.Thresholds[0].AlertSeverity)
   131  	assert.Equal(t, *updatedDashboard.Pages[0].Widgets[0].Configuration.Billboard.Thresholds[0].Value, upDash.EntityResult.Pages[0].Widgets[0].Configuration.Billboard.Thresholds[0].Value)
   132  
   133  	// Test removal of threshold (set back to initial input)
   134  	removeThresholdDash, err := client.DashboardUpdate(dashboardInput, dashGUID)
   135  	require.NoError(t, err)
   136  	require.NotNil(t, upDash)
   137  
   138  	require.Equal(t, 1, len(removeThresholdDash.EntityResult.Pages))
   139  	require.Equal(t, 1, len(removeThresholdDash.EntityResult.Pages[0].Widgets))
   140  	assert.Equal(t, dashboardInput.Pages[0].Widgets[0].Title, removeThresholdDash.EntityResult.Pages[0].Widgets[0].Title)
   141  	require.Equal(t, 1, len(removeThresholdDash.EntityResult.Pages[0].Widgets[0].Configuration.Billboard.NRQLQueries))
   142  	assert.Equal(t, dashboardInput.Pages[0].Widgets[0].Configuration.Billboard.NRQLQueries[0].Query, removeThresholdDash.EntityResult.Pages[0].Widgets[0].Configuration.Billboard.NRQLQueries[0].Query)
   143  	assert.Nil(t, removeThresholdDash.EntityResult.Pages[0].Widgets[0].Configuration.Billboard.Thresholds)
   144  
   145  	// Test: DashboardDelete
   146  	delRes, err := client.DashboardDelete(dashGUID)
   147  	require.NoError(t, err)
   148  	require.NotNil(t, delRes)
   149  	assert.Equal(t, 0, len(delRes.Errors))
   150  	assert.Equal(t, DashboardDeleteResultStatusTypes.SUCCESS, delRes.Status)
   151  }