mirror of https://github.com/grafana/grafana
Public Dashboards: Usage Insights (#52768)
parent
5e4d5eb14b
commit
dc23643bee
@ -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 |
||||
} |
||||
Loading…
Reference in new issue