diff --git a/cloudinary-core/src/main/java/com/cloudinary/Api.java b/cloudinary-core/src/main/java/com/cloudinary/Api.java index d81dcd9d..8a09ef72 100644 --- a/cloudinary-core/src/main/java/com/cloudinary/Api.java +++ b/cloudinary-core/src/main/java/com/cloudinary/Api.java @@ -519,6 +519,18 @@ public ApiResponse updateResourcesAccessModeByTag(String accessMode, String tag, return updateResourcesAccessMode(accessMode, "tag", tag, options); } + /** + * Delete a folder (must be empty). + * @param folder The full path of the folder to delete + * @param options additional options. + * @return The operation result. + * @throws Exception When the folder isn't empty or doesn't exist. + */ + public ApiResponse deleteFolder(String folder, Map options) throws Exception { + List uri = Arrays.asList("folders", folder); + return callApi(HttpMethod.DELETE, uri, Collections.emptyMap(), options); + } + /** * Update access mode of one or more resources by publicIds * diff --git a/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractApiTest.java b/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractApiTest.java index 903cd1a8..009789bf 100644 --- a/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractApiTest.java +++ b/cloudinary-test-common/src/main/java/com/cloudinary/test/AbstractApiTest.java @@ -14,6 +14,7 @@ import java.util.*; import static com.cloudinary.utils.ObjectUtils.asMap; +import static com.cloudinary.utils.ObjectUtils.emptyMap; import static org.hamcrest.Matchers.*; import static org.hamcrest.core.AllOf.allOf; import static org.hamcrest.core.IsNot.not; @@ -935,4 +936,17 @@ public void testQualityAnalysis() throws Exception { ApiResponse result = cloudinary.api().resource(API_TEST, ObjectUtils.asMap("quality_analysis", true)); assertNotNull(result.get("quality_analysis")); } + + @Test(expected = NotFound.class) + public void testDeleteFolder() throws Exception { + String toDelete = "todelete_" + SUFFIX; + Map uploadResult = cloudinary.uploader().upload(SRC_TEST_IMAGE, asMap("tags", UPLOAD_TAGS, "folder", toDelete)); + Thread.sleep(5000); + api.deleteResources(Collections.singletonList(uploadResult.get("public_id").toString()), emptyMap()); + ApiResponse result = api.deleteFolder(toDelete, emptyMap()); + assertTrue(((ArrayList)result.get("deleted")).contains(toDelete)); + + // should throw exception (folder not found): + api.deleteFolder(cloudinary.randomPublicId(), emptyMap()); + } } \ No newline at end of file