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 }