Public Dashboards: Usage Insights (#52768)
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
|
||||
"github.com/grafana/grafana/pkg/models"
|
||||
"github.com/grafana/grafana/pkg/services/contexthandler/ctxkey"
|
||||
"github.com/grafana/grafana/pkg/services/publicdashboards"
|
||||
publicdashboardsService "github.com/grafana/grafana/pkg/services/publicdashboards/service"
|
||||
"github.com/grafana/grafana/pkg/setting"
|
||||
"github.com/grafana/grafana/pkg/web"
|
||||
"github.com/stretchr/testify/mock"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestRequiresValidAccessToken(t *testing.T) {
|
||||
t.Run("Returns 404 when access token is empty", func(t *testing.T) {
|
||||
request, err := http.NewRequest("GET", "/api/public/ma/events/", nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
resp := runMiddleware(request, mockAccessTokenExistsResponse(false, nil))
|
||||
|
||||
require.Equal(t, http.StatusNotFound, resp.Code)
|
||||
})
|
||||
|
||||
t.Run("Returns 200 when public dashboard with access token exists", func(t *testing.T) {
|
||||
request, err := http.NewRequest("GET", "/api/public/ma/events/myAccessToken", nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
resp := runMiddleware(request, mockAccessTokenExistsResponse(true, nil))
|
||||
|
||||
require.Equal(t, http.StatusOK, resp.Code)
|
||||
})
|
||||
|
||||
t.Run("Returns 400 when public dashboard with access token does not exist", func(t *testing.T) {
|
||||
request, err := http.NewRequest("GET", "/api/public/ma/events/myAccessToken", nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
resp := runMiddleware(request, mockAccessTokenExistsResponse(false, nil))
|
||||
|
||||
require.Equal(t, http.StatusBadRequest, resp.Code)
|
||||
})
|
||||
|
||||
t.Run("Returns 500 when public dashboard service gives an error", func(t *testing.T) {
|
||||
request, err := http.NewRequest("GET", "/api/public/ma/events/myAccessToken", nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
resp := runMiddleware(request, mockAccessTokenExistsResponse(false, fmt.Errorf("error not found")))
|
||||
|
||||
require.Equal(t, http.StatusInternalServerError, resp.Code)
|
||||
})
|
||||
}
|
||||
|
||||
func mockAccessTokenExistsResponse(returnArguments ...interface{}) *publicdashboardsService.PublicDashboardServiceImpl {
|
||||
fakeStore := &publicdashboards.FakePublicDashboardStore{}
|
||||
fakeStore.On("AccessTokenExists", mock.Anything, mock.Anything).Return(returnArguments[0], returnArguments[1])
|
||||
return publicdashboardsService.ProvideService(setting.NewCfg(), fakeStore)
|
||||
}
|
||||
|
||||
func runMiddleware(request *http.Request, pubdashService *publicdashboardsService.PublicDashboardServiceImpl) *httptest.ResponseRecorder {
|
||||
recorder := httptest.NewRecorder()
|
||||
m := web.New()
|
||||
initCtx := &models.ReqContext{}
|
||||
m.Use(func(c *web.Context) {
|
||||
initCtx.Context = c
|
||||
c.Req = c.Req.WithContext(ctxkey.Set(c.Req.Context(), initCtx))
|
||||
})
|
||||
m.Get("/api/public/ma/events/:accessToken", RequiresValidAccessToken(pubdashService))
|
||||
m.ServeHTTP(recorder, request)
|
||||
|
||||
return recorder
|
||||
}
|
||||
Reference in New Issue
Block a user