photoprism/internal/remote/webdav/webdav_test.go
Michael Mayer 9826e57149 Docker: Refactor images to be more compatible with prod environments #411 #468
You should now be able to provide UMASK, UID and GID as environment variables
when using our production images. Work in progress.
2020-10-04 11:23:01 +02:00

152 lines
2.8 KiB
Go

package webdav
import (
"os"
"path/filepath"
"testing"
"github.com/photoprism/photoprism/pkg/fs"
"github.com/photoprism/photoprism/pkg/rnd"
"github.com/stretchr/testify/assert"
)
const (
testUrl = "http://webdav-dummy/"
testUser = "admin"
testPass = "photoprism"
)
func TestConnect(t *testing.T) {
c := New(testUrl, testUser, testPass)
assert.IsType(t, Client{}, c)
}
func TestClient_Files(t *testing.T) {
c := New(testUrl, testUser, testPass)
assert.IsType(t, Client{}, c)
files, err := c.Files("Photos")
if err != nil {
t.Fatal(err)
}
if len(files) == 0 {
t.Fatal("no files found")
}
}
func TestClient_Directories(t *testing.T) {
c := New(testUrl, testUser, testPass)
assert.IsType(t, Client{}, c)
t.Run("non-recursive", func(t *testing.T) {
dirs, err := c.Directories("", false)
if err != nil {
t.Fatal(err)
}
if len(dirs) == 0 {
t.Fatal("no directories found")
}
assert.IsType(t, fs.FileInfo{}, dirs[0])
assert.Equal(t, "Photos", dirs[0].Name)
assert.Equal(t, "/Photos", dirs[0].Abs)
assert.Equal(t, true, dirs[0].Dir)
assert.Equal(t, int64(0), dirs[0].Size)
})
t.Run("recursive", func(t *testing.T) {
dirs, err := c.Directories("", true)
if err != nil {
t.Fatal(err)
}
if len(dirs) < 2 {
t.Fatal("at least 2 directories expected")
}
})
}
func TestClient_Download(t *testing.T) {
c := New(testUrl, testUser, testPass)
assert.IsType(t, Client{}, c)
files, err := c.Files("Photos")
if err != nil {
t.Fatal(err)
}
tempDir := filepath.Join(os.TempDir(), rnd.UUID())
tempFile := tempDir + "/foo.jpg"
if len(files) == 0 {
t.Fatal("no files to download")
}
if err := c.Download(files[0].Abs, tempFile, false); err != nil {
t.Fatal(err)
}
if !fs.FileExists(tempFile) {
t.Fatalf("%s does not exist", tempFile)
}
if err := os.RemoveAll(tempDir); err != nil {
t.Fatal(err)
}
}
func TestClient_DownloadDir(t *testing.T) {
c := New(testUrl, testUser, testPass)
assert.IsType(t, Client{}, c)
t.Run("non-recursive", func(t *testing.T) {
tempDir := filepath.Join(os.TempDir(), rnd.UUID())
if errs := c.DownloadDir("Photos", tempDir, false, false); len(errs) > 0 {
t.Fatal(errs)
}
if err := os.RemoveAll(tempDir); err != nil {
t.Fatal(err)
}
})
t.Run("recursive", func(t *testing.T) {
tempDir := filepath.Join(os.TempDir(), rnd.UUID())
if errs := c.DownloadDir("Photos", tempDir, true, false); len(errs) > 0 {
t.Fatal(errs)
}
if err := os.RemoveAll(tempDir); err != nil {
t.Fatal(err)
}
})
}
func TestClient_UploadAndDelete(t *testing.T) {
c := New(testUrl, testUser, testPass)
assert.IsType(t, Client{}, c)
tempName := rnd.UUID() + fs.JpegExt
if err := c.Upload("testdata/example.jpg", tempName); err != nil {
t.Fatal(err)
}
if err := c.Delete(tempName); err != nil {
t.Fatal(err)
}
}