mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
				
	
	
		
			103 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
package api
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"encoding/json"
 | 
						|
	"fmt"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/grafana/grafana/pkg/api/dtos"
 | 
						|
	"github.com/grafana/grafana/pkg/api/response"
 | 
						|
	"github.com/grafana/grafana/pkg/api/routing"
 | 
						|
	"github.com/grafana/grafana/pkg/bus"
 | 
						|
	"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/setting"
 | 
						|
	"github.com/stretchr/testify/require"
 | 
						|
)
 | 
						|
 | 
						|
func TestShortURLAPIEndpoint(t *testing.T) {
 | 
						|
	t.Run("Given a correct request for creating a shortUrl", func(t *testing.T) {
 | 
						|
		cmd := dtos.CreateShortURLCmd{
 | 
						|
			Path: "d/TxKARsmGz/new-dashboard?orgId=1&from=1599389322894&to=1599410922894",
 | 
						|
		}
 | 
						|
 | 
						|
		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)
 | 
						|
 | 
						|
				shortUrl := dtos.ShortURL{}
 | 
						|
				err := json.NewDecoder(sc.resp.Body).Decode(&shortUrl)
 | 
						|
				require.NoError(t, err)
 | 
						|
				require.Equal(t, 200, sc.resp.Code)
 | 
						|
				require.Equal(t, fmt.Sprintf("/goto/%s?orgId=%d", createResp.Uid, createResp.OrgId), shortUrl.URL)
 | 
						|
			})
 | 
						|
	})
 | 
						|
}
 | 
						|
 | 
						|
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, shortURLService shorturls.Service, fn scenarioFunc) {
 | 
						|
	t.Run(fmt.Sprintf("%s %s", desc, url), func(t *testing.T) {
 | 
						|
		defer bus.ClearBusHandlers()
 | 
						|
 | 
						|
		hs := HTTPServer{
 | 
						|
			Cfg:             setting.NewCfg(),
 | 
						|
			ShortURLService: shortURLService,
 | 
						|
			log:             log.New("test"),
 | 
						|
		}
 | 
						|
 | 
						|
		sc := setupScenarioContext(t, url)
 | 
						|
		sc.defaultHandler = routing.Wrap(func(c *models.ReqContext) response.Response {
 | 
						|
			c.Req.Body = mockRequestBody(cmd)
 | 
						|
			sc.context = c
 | 
						|
			sc.context.SignedInUser = &models.SignedInUser{OrgId: testOrgID, UserId: testUserID}
 | 
						|
 | 
						|
			return hs.createShortURL(c)
 | 
						|
		})
 | 
						|
 | 
						|
		sc.m.Post(routePattern, sc.defaultHandler)
 | 
						|
 | 
						|
		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
 | 
						|
}
 |