package webdav import ( "fmt" "net/http" "net/http/httptest" "testing" "github.com/stretchr/testify/assert" ) // mockWebDAVServer creates a test HTTP server that mimics a WebDAV server. func mockWebDAVServer() *httptest.Server { handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.Method { case "PROPFIND": if r.URL.Path == "/" { w.WriteHeader(http.StatusMultiStatus) return } // For IsFile test if r.URL.Path == "/test.txt" { w.WriteHeader(http.StatusMultiStatus) fmt.Fprint(w, ` /test.txt HTTP/1.1 200 OK `) return } if r.URL.Path == "/testdir/" { w.WriteHeader(http.StatusMultiStatus) fmt.Fprint(w, ` /testdir/ HTTP/1.1 200 OK `) return } http.NotFound(w, r) case "GET": if r.URL.Path == "/test.txt" { w.WriteHeader(http.StatusOK) fmt.Fprint(w, "Hello, WebDAV!") return } http.NotFound(w, r) case "PUT": if r.URL.Path == "/test.txt" { w.WriteHeader(http.StatusCreated) return } http.Error(w, "Method Not Allowed", http.StatusMethodNotAllowed) case "MKCOL": if r.URL.Path == "/testdir/" { w.WriteHeader(http.StatusCreated) return } http.Error(w, "Method Not Allowed", http.StatusMethodNotAllowed) default: http.Error(w, "Method Not Allowed", http.StatusMethodNotAllowed) } }) return httptest.NewServer(handler) } func TestNew_Success(t *testing.T) { server := mockWebDAVServer() defer server.Close() cfg := ConnectionConfig{ URL: server.URL, User: "user", Password: "password", } medium, err := New(cfg) assert.NoError(t, err) assert.NotNil(t, medium) } func TestRead(t *testing.T) { server := mockWebDAVServer() defer server.Close() cfg := ConnectionConfig{ URL: server.URL, User: "user", Password: "password", } medium, err := New(cfg) assert.NoError(t, err) content, err := medium.Read("test.txt") assert.NoError(t, err) assert.Equal(t, "Hello, WebDAV!", content) } func TestWrite(t *testing.T) { server := mockWebDAVServer() defer server.Close() cfg := ConnectionConfig{ URL: server.URL, User: "user", Password: "password", } medium, err := New(cfg) assert.NoError(t, err) err = medium.Write("test.txt", "Hello, WebDAV!") assert.NoError(t, err) } func TestEnsureDir(t *testing.T) { server := mockWebDAVServer() defer server.Close() cfg := ConnectionConfig{ URL: server.URL, User: "user", Password: "password", } medium, err := New(cfg) assert.NoError(t, err) err = medium.EnsureDir("testdir") assert.NoError(t, err) } func TestIsFile(t *testing.T) { server := mockWebDAVServer() defer server.Close() cfg := ConnectionConfig{ URL: server.URL, User: "user", Password: "password", } medium, err := New(cfg) assert.NoError(t, err) assert.True(t, medium.IsFile("test.txt")) assert.False(t, medium.IsFile("testdir")) }