Chore: Refactor short url api test (#35051)

Use a mock of the short URL service rather than real one which requires database access.

Ref #34696
pull/35069/head
Marcus Efraimsson 5 years ago committed by GitHub
parent 878474a808
commit d953e200f0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      pkg/api/http_server.go
  2. 53
      pkg/api/short_url_test.go
  3. 2
      pkg/services/cleanup/cleanup.go
  4. 9
      pkg/services/shorturls/short_url_service.go

@ -93,7 +93,7 @@ type HTTPServer struct {
PluginRequestValidator models.PluginRequestValidator `inject:""` PluginRequestValidator models.PluginRequestValidator `inject:""`
PluginManager plugins.Manager `inject:""` PluginManager plugins.Manager `inject:""`
SearchService *search.SearchService `inject:""` SearchService *search.SearchService `inject:""`
ShortURLService *shorturls.ShortURLService `inject:""` ShortURLService shorturls.Service `inject:""`
Live *live.GrafanaLive `inject:""` Live *live.GrafanaLive `inject:""`
LivePushGateway *pushhttp.Gateway `inject:""` LivePushGateway *pushhttp.Gateway `inject:""`
ContextHandler *contexthandler.ContextHandler `inject:""` ContextHandler *contexthandler.ContextHandler `inject:""`

@ -1,6 +1,7 @@
package api package api
import ( import (
"context"
"encoding/json" "encoding/json"
"fmt" "fmt"
"testing" "testing"
@ -12,7 +13,6 @@ import (
"github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/infra/log"
"github.com/grafana/grafana/pkg/models" "github.com/grafana/grafana/pkg/models"
"github.com/grafana/grafana/pkg/services/shorturls" "github.com/grafana/grafana/pkg/services/shorturls"
"github.com/grafana/grafana/pkg/services/sqlstore"
"github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/setting"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
@ -23,7 +23,19 @@ func TestShortURLAPIEndpoint(t *testing.T) {
Path: "d/TxKARsmGz/new-dashboard?orgId=1&from=1599389322894&to=1599410922894", Path: "d/TxKARsmGz/new-dashboard?orgId=1&from=1599389322894&to=1599410922894",
} }
createShortURLScenario(t, "When calling POST on", "/api/short-urls", "/api/short-urls", cmd, createResp := &models.ShortUrl{
Id: 1,
OrgId: testOrgID,
Uid: "N1u6L4eGz",
Path: cmd.Path,
}
service := &fakeShortURLService{
createShortURLFunc: func(ctx context.Context, user *models.SignedInUser, path string) (*models.ShortUrl, error) {
return createResp, nil
},
}
createShortURLScenario(t, "When calling POST on", "/api/short-urls", "/api/short-urls", cmd, service,
func(sc *scenarioContext) { func(sc *scenarioContext) {
callCreateShortURL(sc) callCreateShortURL(sc)
@ -31,7 +43,7 @@ func TestShortURLAPIEndpoint(t *testing.T) {
err := json.NewDecoder(sc.resp.Body).Decode(&shortUrl) err := json.NewDecoder(sc.resp.Body).Decode(&shortUrl)
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, 200, sc.resp.Code) require.Equal(t, 200, sc.resp.Code)
require.Regexp(t, "/goto/(.+)\\?orgId=(.+)", shortUrl.URL) require.Equal(t, fmt.Sprintf("/goto/%s?orgId=%d", createResp.Uid, createResp.OrgId), shortUrl.URL)
}) })
}) })
} }
@ -40,17 +52,14 @@ func callCreateShortURL(sc *scenarioContext) {
sc.fakeReqWithParams("POST", sc.url, map[string]string{}).exec() sc.fakeReqWithParams("POST", sc.url, map[string]string{}).exec()
} }
func createShortURLScenario(t *testing.T, desc string, url string, routePattern string, cmd dtos.CreateShortURLCmd, fn scenarioFunc) { func createShortURLScenario(t *testing.T, desc string, url string, routePattern string, cmd dtos.CreateShortURLCmd, shortURLService shorturls.Service, fn scenarioFunc) {
t.Run(fmt.Sprintf("%s %s", desc, url), func(t *testing.T) { t.Run(fmt.Sprintf("%s %s", desc, url), func(t *testing.T) {
defer bus.ClearBusHandlers() defer bus.ClearBusHandlers()
sqlStore := sqlstore.InitTestDB(t)
hs := HTTPServer{ hs := HTTPServer{
Cfg: setting.NewCfg(), Cfg: setting.NewCfg(),
ShortURLService: &shorturls.ShortURLService{ ShortURLService: shortURLService,
SQLStore: sqlStore, log: log.New("test"),
},
log: log.New("test"),
} }
sc := setupScenarioContext(t, url) sc := setupScenarioContext(t, url)
@ -66,3 +75,27 @@ func createShortURLScenario(t *testing.T, desc string, url string, routePattern
fn(sc) fn(sc)
}) })
} }
type fakeShortURLService struct {
createShortURLFunc func(ctx context.Context, user *models.SignedInUser, path string) (*models.ShortUrl, error)
}
func (s *fakeShortURLService) GetShortURLByUID(ctx context.Context, user *models.SignedInUser, uid string) (*models.ShortUrl, error) {
return nil, nil
}
func (s *fakeShortURLService) CreateShortURL(ctx context.Context, user *models.SignedInUser, path string) (*models.ShortUrl, error) {
if s.createShortURLFunc != nil {
return s.createShortURLFunc(ctx, user, path)
}
return nil, nil
}
func (s *fakeShortURLService) UpdateLastSeenAt(ctx context.Context, shortURL *models.ShortUrl) error {
return nil
}
func (s *fakeShortURLService) DeleteStaleShortURLs(ctx context.Context, cmd *models.DeleteShortUrlCommand) error {
return nil
}

@ -22,7 +22,7 @@ type CleanUpService struct {
log log.Logger log log.Logger
Cfg *setting.Cfg `inject:""` Cfg *setting.Cfg `inject:""`
ServerLockService *serverlock.ServerLockService `inject:""` ServerLockService *serverlock.ServerLockService `inject:""`
ShortURLService *shorturls.ShortURLService `inject:""` ShortURLService shorturls.Service `inject:""`
} }
func init() { func init() {

@ -16,6 +16,13 @@ func init() {
registry.RegisterService(&ShortURLService{}) registry.RegisterService(&ShortURLService{})
} }
type Service interface {
GetShortURLByUID(ctx context.Context, user *models.SignedInUser, uid string) (*models.ShortUrl, error)
CreateShortURL(ctx context.Context, user *models.SignedInUser, path string) (*models.ShortUrl, error)
UpdateLastSeenAt(ctx context.Context, shortURL *models.ShortUrl) error
DeleteStaleShortURLs(ctx context.Context, cmd *models.DeleteShortUrlCommand) error
}
type ShortURLService struct { type ShortURLService struct {
SQLStore *sqlstore.SQLStore `inject:""` SQLStore *sqlstore.SQLStore `inject:""`
} }
@ -89,3 +96,5 @@ func (s ShortURLService) DeleteStaleShortURLs(ctx context.Context, cmd *models.D
return nil return nil
}) })
} }
var _ Service = &ShortURLService{}

Loading…
Cancel
Save