mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
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
This commit is contained in:
committed by
GitHub
parent
878474a808
commit
d953e200f0
@@ -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:""`
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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{}
|
||||
|
||||
Reference in New Issue
Block a user