diff --git a/pkg/api/http_server.go b/pkg/api/http_server.go index 1f23dfb6aa7..984eab23382 100644 --- a/pkg/api/http_server.go +++ b/pkg/api/http_server.go @@ -93,7 +93,7 @@ type HTTPServer struct { PluginRequestValidator models.PluginRequestValidator `inject:""` PluginManager plugins.Manager `inject:""` SearchService *search.SearchService `inject:""` - ShortURLService *shorturls.ShortURLService `inject:""` + ShortURLService shorturls.Service `inject:""` Live *live.GrafanaLive `inject:""` LivePushGateway *pushhttp.Gateway `inject:""` ContextHandler *contexthandler.ContextHandler `inject:""` diff --git a/pkg/api/short_url_test.go b/pkg/api/short_url_test.go index 0a96a9c9c39..c42ad60257e 100644 --- a/pkg/api/short_url_test.go +++ b/pkg/api/short_url_test.go @@ -1,6 +1,7 @@ package api import ( + "context" "encoding/json" "fmt" "testing" @@ -12,7 +13,6 @@ import ( "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/models" "github.com/grafana/grafana/pkg/services/shorturls" - "github.com/grafana/grafana/pkg/services/sqlstore" "github.com/grafana/grafana/pkg/setting" "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", } - 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) { callCreateShortURL(sc) @@ -31,7 +43,7 @@ func TestShortURLAPIEndpoint(t *testing.T) { err := json.NewDecoder(sc.resp.Body).Decode(&shortUrl) require.NoError(t, err) 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() } -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) { defer bus.ClearBusHandlers() - sqlStore := sqlstore.InitTestDB(t) hs := HTTPServer{ - Cfg: setting.NewCfg(), - ShortURLService: &shorturls.ShortURLService{ - SQLStore: sqlStore, - }, - log: log.New("test"), + Cfg: setting.NewCfg(), + ShortURLService: shortURLService, + log: log.New("test"), } sc := setupScenarioContext(t, url) @@ -66,3 +75,27 @@ func createShortURLScenario(t *testing.T, desc string, url string, routePattern 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 +} diff --git a/pkg/services/cleanup/cleanup.go b/pkg/services/cleanup/cleanup.go index 6c802d598a4..5397b86f083 100644 --- a/pkg/services/cleanup/cleanup.go +++ b/pkg/services/cleanup/cleanup.go @@ -22,7 +22,7 @@ type CleanUpService struct { log log.Logger Cfg *setting.Cfg `inject:""` ServerLockService *serverlock.ServerLockService `inject:""` - ShortURLService *shorturls.ShortURLService `inject:""` + ShortURLService shorturls.Service `inject:""` } func init() { diff --git a/pkg/services/shorturls/short_url_service.go b/pkg/services/shorturls/short_url_service.go index a42d90bd86f..bc379518598 100644 --- a/pkg/services/shorturls/short_url_service.go +++ b/pkg/services/shorturls/short_url_service.go @@ -16,6 +16,13 @@ func init() { 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 { SQLStore *sqlstore.SQLStore `inject:""` } @@ -89,3 +96,5 @@ func (s ShortURLService) DeleteStaleShortURLs(ctx context.Context, cmd *models.D return nil }) } + +var _ Service = &ShortURLService{}