Files
grafana/pkg/components/imguploader/webdavuploader_test.go
Matheus Macabu 3539764008 Hackaton: Add more unit tests, take 3 (#101525)
* serviceaccounts/secretscan: test Service more thoroughly

* middleware/cookies: add tests for CookieOptions

* anonymous/anonimpl: cover a couple more methods

* components/imguploader: Implement WebDAV integration tests

* components/apikeygen: also check IsValid method

* bus: cover invalid callback signature cases

* cloudmigration/objectstorage: add basic unit tests

* login/social/connectors: add test case for GitHub OAuth fetch emails+orgs

* expr/classic: cover more evaluator types in tests
2025-03-05 08:00:12 +01:00

85 lines
2.6 KiB
Go

package imguploader
import (
"context"
"net/http"
"net/http/httptest"
"strings"
"testing"
"github.com/stretchr/testify/require"
"golang.org/x/net/webdav"
)
func TestUploadToWebdav(t *testing.T) {
t.Parallel()
t.Run("[Integration test] for external_image_store.webdav", func(t *testing.T) {
t.Parallel()
handler := &webdav.Handler{
FileSystem: webdav.Dir(t.TempDir()),
LockSystem: webdav.NewMemLS(),
Logger: func(r *http.Request, err error) {
require.Equal(t, http.MethodPut, r.Method)
require.NoError(t, err)
},
}
server := httptest.NewServer(handler)
t.Cleanup(server.Close)
webdavUploader, err := NewWebdavImageUploader(server.URL, "test", "test", "")
require.NoError(t, err)
require.NotNil(t, webdavUploader)
path, err := webdavUploader.Upload(context.Background(), "../../../public/img/logo_transparent_400x.png")
require.NoError(t, err)
require.True(t, strings.HasPrefix(path, server.URL))
})
t.Run("[Integration test] for external_image_store.webdav with public url", func(t *testing.T) {
t.Parallel()
handler := &webdav.Handler{
FileSystem: webdav.Dir(t.TempDir()),
LockSystem: webdav.NewMemLS(),
Logger: func(r *http.Request, err error) {
require.Equal(t, http.MethodPut, r.Method)
require.NoError(t, err)
},
}
server := httptest.NewServer(handler)
t.Cleanup(server.Close)
webdavUploader, err := NewWebdavImageUploader(server.URL, "test", "test", "http://publicurl:8888/webdav")
require.NoError(t, err)
require.NotNil(t, webdavUploader)
path, err := webdavUploader.Upload(context.Background(), "../../../public/img/logo_transparent_400x.png")
require.NoError(t, err)
require.True(t, strings.HasPrefix(path, "http://publicurl:8888/webdav/"))
})
}
func TestPublicURL(t *testing.T) {
t.Parallel()
t.Run("Given a public URL with parameters, and no template", func(t *testing.T) {
t.Parallel()
webdavUploader, err := NewWebdavImageUploader("http://localhost:8888/webdav/", "test", "test", "http://cloudycloud.me/s/DOIFDOMV/download?files=")
require.NoError(t, err)
require.Equal(t, "http://cloudycloud.me/s/DOIFDOMV/download/fileyfile.png?files=", webdavUploader.PublicURL("fileyfile.png"))
})
t.Run("Given a public URL with parameters, and a template", func(t *testing.T) {
t.Parallel()
webdavUploader, err := NewWebdavImageUploader("http://localhost:8888/webdav/", "test", "test", "http://cloudycloud.me/s/DOIFDOMV/download?files={{file}}")
require.NoError(t, err)
require.Equal(t, "http://cloudycloud.me/s/DOIFDOMV/download?files=fileyfile.png", webdavUploader.PublicURL("fileyfile.png"))
})
}