From d0842c515fc5edf1ec1ea3d7573302f44163958b Mon Sep 17 00:00:00 2001 From: LordMathis Date: Wed, 22 Oct 2025 21:50:37 +0200 Subject: [PATCH] Change move file endpoint from PUT to POST and add integration tests for file moving and renaming --- server/internal/app/routes.go | 2 +- .../file_handlers_integration_test.go | 48 +++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/server/internal/app/routes.go b/server/internal/app/routes.go index ce94587..4b1d38e 100644 --- a/server/internal/app/routes.go +++ b/server/internal/app/routes.go @@ -134,7 +134,7 @@ func setupRouter(o Options) *chi.Mux { r.Get("/lookup", handler.LookupFileByName()) r.Post("/upload", handler.UploadFile()) - r.Put("/move", handler.MoveFile()) + r.Post("/move", handler.MoveFile()) r.Post("/", handler.SaveFile()) r.Get("/content", handler.GetFileContent()) diff --git a/server/internal/handlers/file_handlers_integration_test.go b/server/internal/handlers/file_handlers_integration_test.go index 116e612..610ebbb 100644 --- a/server/internal/handlers/file_handlers_integration_test.go +++ b/server/internal/handlers/file_handlers_integration_test.go @@ -156,6 +156,54 @@ func testFileHandlers(t *testing.T, dbConfig DatabaseConfig) { assert.Equal(t, http.StatusNotFound, rr.Code) }) + t.Run("move file", func(t *testing.T) { + srcPath := "original.md" + destPath := "moved.md" + content := "This file will be moved" + + // Create file + rr := h.makeRequestRaw(t, http.MethodPost, baseURL+"?file_path="+url.QueryEscape(srcPath), strings.NewReader(content), h.RegularTestUser) + require.Equal(t, http.StatusOK, rr.Code) + + // Move file + moveURL := baseURL + "/move?src_path=" + url.QueryEscape(srcPath) + "&dest_path=" + url.QueryEscape(destPath) + rr = h.makeRequest(t, http.MethodPost, moveURL, nil, h.RegularTestUser) + require.Equal(t, http.StatusOK, rr.Code) + + // Verify source is gone + rr = h.makeRequest(t, http.MethodGet, baseURL+"/content?file_path="+url.QueryEscape(srcPath), nil, h.RegularTestUser) + assert.Equal(t, http.StatusNotFound, rr.Code) + + // Verify destination exists with correct content + rr = h.makeRequest(t, http.MethodGet, baseURL+"/content?file_path="+url.QueryEscape(destPath), nil, h.RegularTestUser) + require.Equal(t, http.StatusOK, rr.Code) + assert.Equal(t, content, rr.Body.String()) + }) + + t.Run("rename file in directory", func(t *testing.T) { + srcPath := "folder/old-name.md" + destPath := "folder/new-name.md" + content := "This file will be renamed" + + // Create file + rr := h.makeRequestRaw(t, http.MethodPost, baseURL+"?file_path="+url.QueryEscape(srcPath), strings.NewReader(content), h.RegularTestUser) + require.Equal(t, http.StatusOK, rr.Code) + + // Rename file (move within same directory) + moveURL := baseURL + "/move?src_path=" + url.QueryEscape(srcPath) + "&dest_path=" + url.QueryEscape(destPath) + rr = h.makeRequest(t, http.MethodPost, moveURL, nil, h.RegularTestUser) + require.Equal(t, http.StatusOK, rr.Code) + + // Verify source is gone + rr = h.makeRequest(t, http.MethodGet, baseURL+"/content?file_path="+url.QueryEscape(srcPath), nil, h.RegularTestUser) + assert.Equal(t, http.StatusNotFound, rr.Code) + + // Verify destination exists with correct content + rr = h.makeRequest(t, http.MethodGet, baseURL+"/content?file_path="+url.QueryEscape(destPath), nil, h.RegularTestUser) + require.Equal(t, http.StatusOK, rr.Code) + assert.Equal(t, content, rr.Body.String()) + }) + t.Run("last opened file", func(t *testing.T) { // Initially should be empty rr := h.makeRequest(t, http.MethodGet, baseURL+"/last", nil, h.RegularTestUser)