Skip to content

Commit

Permalink
Add support for RenameFolder Admin API
Browse files Browse the repository at this point in the history
  • Loading branch information
const-cloudinary committed Aug 18, 2024
1 parent 586a79b commit d04bde4
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 0 deletions.
22 changes: 22 additions & 0 deletions api/admin/folders.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,28 @@ type CreateFolderResult struct {
Error api.ErrorResp `json:"error,omitempty"`
}

// RenameFolderParams are the parameters for RenameFolder.
type RenameFolderParams struct {
FromPath string `json:"-"` // The full path of the existing folder.
ToPath string `json:"to_folder"` // The full path of the new folder.
}

// RenameFolder renames an existing asset folder.
//
// https://cloudinary.com/documentation/admin_api#update_folder
func (a *API) RenameFolder(ctx context.Context, params RenameFolderParams) (*RenameFolderResult, error) {
res := &RenameFolderResult{}
_, err := a.put(ctx, api.BuildPath(folders, params.FromPath), params, res)

return res, err
}

type RenameFolderResult struct {
From FolderResult `json:"from"`
To FolderResult `json:"to"`
Error api.ErrorResp `json:"error,omitempty"`
}

// DeleteFolderParams are the parameters for DeleteFolder.
type DeleteFolderParams struct {
Folder string `json:"-"` // The full path of the empty folder to delete.
Expand Down
30 changes: 30 additions & 0 deletions api/admin/folders_test.go
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
package admin_test

import (
"github.com/cloudinary/cloudinary-go/v2/internal/cldtest"
"github.com/stretchr/testify/assert"
"testing"
"time"

"github.com/cloudinary/cloudinary-go/v2/api/admin"
)

const testFolder = "000-go-folder"
const testFolderRenamed = testFolder + "-renamed"

func TestFolders_CreateFolder(t *testing.T) {
resp, err := adminAPI.CreateFolder(ctx, admin.CreateFolderParams{Folder: testFolder})
Expand All @@ -33,6 +36,33 @@ func TestFolders_DeleteFolder(t *testing.T) {
}
}

func TestFolders_RenameFolder(t *testing.T) {
cldtest.SkipFixedFolderMode(t)

resp, err := adminAPI.CreateFolder(ctx, admin.CreateFolderParams{Folder: testFolder})

if err != nil || resp.Success != true {
t.Error(resp, err)
}

renameResp, err := adminAPI.RenameFolder(ctx, admin.RenameFolderParams{FromPath: testFolder, ToPath: testFolderRenamed})

if err != nil || renameResp.Error.Message != "" {
t.Error(renameResp, err)
}

assert.Equal(t, testFolder, renameResp.From.Path)
assert.Equal(t, testFolder, renameResp.From.Name)
assert.Equal(t, testFolderRenamed, renameResp.To.Path)
assert.Equal(t, testFolderRenamed, renameResp.To.Name)

delResp, err := adminAPI.DeleteFolder(ctx, admin.DeleteFolderParams{Folder: testFolderRenamed})

if err != nil || len(delResp.Deleted) < 1 {
t.Error(delResp, err)
}
}

func TestFolders_SubFolders(t *testing.T) {
cfResp, err := adminAPI.CreateFolder(ctx, admin.CreateFolderParams{Folder: testFolder})
if err != nil || cfResp.Success != true {
Expand Down
10 changes: 10 additions & 0 deletions internal/cldtest/cldtest.go
Original file line number Diff line number Diff line change
Expand Up @@ -335,3 +335,13 @@ func SkipFeature(t *testing.T, feature string) {
t.Skipf("Please enable %s feature in your account and set CLD_TEST_FEATURES environment variable", feature)
}
}

func SkipFixedFolderMode(t *testing.T) {
res, err := adminAPI.GetConfig(ctx, admin.GetConfigParams{Settings: api.Bool(true)})
if err != nil {
t.Error(err)
}
if res.Settings.FolderMode == "fixed" {
t.Skip("Please enable dynamic folders in your account to run this test.")
}
}

0 comments on commit d04bde4

Please sign in to comment.