@@ -829,6 +829,92 @@ public void testRestore() throws Exception {
829829 assertEquals (resource .get ("bytes" ), 3381 );
830830 }
831831
832+ @ Test
833+ public void testRestoreDifferentVersionsOfDeletedAsset () throws Exception {
834+ final String TEST_RESOURCE_PUBLIC_ID = "api_test_restore_different_versions_single_asset" + SUFFIX ;
835+ final Uploader uploader = cloudinary .uploader ();
836+
837+ Map firstUpload = uploader .upload (SRC_TEST_IMAGE ,
838+ ObjectUtils .asMap (
839+ "public_id" , TEST_RESOURCE_PUBLIC_ID ,
840+ "backup" , true ,
841+ "tags" , UPLOAD_TAGS
842+ ));
843+ assertEquals (firstUpload .get ("public_id" ), TEST_RESOURCE_PUBLIC_ID );
844+ ApiResponse firstDelete = api .deleteResources (Collections .singletonList (TEST_RESOURCE_PUBLIC_ID ), ObjectUtils .emptyMap ());
845+ assertTrue (firstDelete .containsKey ("deleted" ));
846+
847+ Map secondUpload = uploader .upload (SRC_TEST_IMAGE ,
848+ ObjectUtils .asMap (
849+ "public_id" , TEST_RESOURCE_PUBLIC_ID ,
850+ "backup" , true ,
851+ "transformation" , new Transformation ().angle ("0" ),
852+ "tags" , UPLOAD_TAGS
853+ ));
854+ assertEquals (secondUpload .get ("public_id" ), TEST_RESOURCE_PUBLIC_ID );
855+ ApiResponse secondDelete = api .deleteResources (Collections .singletonList (TEST_RESOURCE_PUBLIC_ID ), ObjectUtils .emptyMap ());
856+ assertTrue (secondDelete .containsKey ("deleted" ));
857+
858+ assertNotEquals (firstUpload .get ("bytes" ), secondUpload .get ("bytes" ));
859+
860+ ApiResponse getVersionsResp = api .resource (TEST_RESOURCE_PUBLIC_ID , ObjectUtils .asMap ("versions" , true ));
861+ List <Map > versions = (List <Map >) getVersionsResp .get ("versions" );
862+ Object firstAssetVersion = versions .get (0 ).get ("version_id" );
863+ Object secondAssetVersion = versions .get (1 ).get ("version_id" );
864+
865+ ApiResponse firstVerRestore = api .restore (Collections .singletonList (TEST_RESOURCE_PUBLIC_ID ),
866+ ObjectUtils .asMap ("versions" , Collections .singletonList (firstAssetVersion )));
867+ assertEquals (((Map ) firstVerRestore .get (TEST_RESOURCE_PUBLIC_ID )).get ("bytes" ), firstUpload .get ("bytes" ));
868+
869+ ApiResponse secondVerRestore = api .restore (Collections .singletonList (TEST_RESOURCE_PUBLIC_ID ),
870+ ObjectUtils .asMap ("versions" , Collections .singletonList (secondAssetVersion )));
871+ assertEquals (((Map ) secondVerRestore .get (TEST_RESOURCE_PUBLIC_ID )).get ("bytes" ), secondUpload .get ("bytes" ));
872+
873+ ApiResponse finalDeleteResp = api .deleteResources (Collections .singletonList (TEST_RESOURCE_PUBLIC_ID ), ObjectUtils .emptyMap ());
874+ assertTrue (finalDeleteResp .containsKey ("deleted" ));
875+ }
876+
877+ @ Test
878+ public void testShouldRestoreTwoDifferentDeletedAssets () throws Exception {
879+ final String PUBLIC_ID_BACKUP_1 = "api_test_restore_versions_different_assets_1_" + SUFFIX ;
880+ final String PUBLIC_ID_BACKUP_2 = "api_test_restore_versions_different_assets_2_" + SUFFIX ;
881+
882+ final Uploader uploader = cloudinary .uploader ();
883+
884+ Map firstUpload = uploader .upload (SRC_TEST_IMAGE ,
885+ ObjectUtils .asMap (
886+ "public_id" , PUBLIC_ID_BACKUP_1 ,
887+ "backup" , true ,
888+ "tags" , UPLOAD_TAGS
889+ ));
890+ Map secondUpload = uploader .upload (SRC_TEST_IMAGE ,
891+ ObjectUtils .asMap (
892+ "public_id" , PUBLIC_ID_BACKUP_2 ,
893+ "backup" , true ,
894+ "transformation" , new Transformation ().angle ("0" ),
895+ "tags" , UPLOAD_TAGS
896+ ));
897+
898+ ApiResponse deleteAll = api .deleteResources (Arrays .asList (PUBLIC_ID_BACKUP_1 , PUBLIC_ID_BACKUP_2 ), ObjectUtils .emptyMap ());
899+ assertEquals ("deleted" , ((Map ) deleteAll .get ("deleted" )).get (PUBLIC_ID_BACKUP_1 ));
900+ assertEquals ("deleted" , ((Map ) deleteAll .get ("deleted" )).get (PUBLIC_ID_BACKUP_2 ));
901+
902+ ApiResponse getFirstAssetVersion = api .resource (PUBLIC_ID_BACKUP_1 , ObjectUtils .asMap ("versions" , true ));
903+ ApiResponse getSecondAssetVersion = api .resource (PUBLIC_ID_BACKUP_2 , ObjectUtils .asMap ("versions" , true ));
904+
905+ Object firstAssetVersion = ((List <Map >) getFirstAssetVersion .get ("versions" )).get (0 ).get ("version_id" );
906+ Object secondAssetVersion = ((List <Map >) getSecondAssetVersion .get ("versions" )).get (0 ).get ("version_id" );
907+
908+ ApiResponse restore = api .restore (Arrays .asList (PUBLIC_ID_BACKUP_1 , PUBLIC_ID_BACKUP_2 ),
909+ ObjectUtils .asMap ("versions" , Arrays .asList (firstAssetVersion , secondAssetVersion )));
910+ assertEquals (((Map ) restore .get (PUBLIC_ID_BACKUP_1 )).get ("bytes" ), firstUpload .get ("bytes" ));
911+ assertEquals (((Map ) restore .get (PUBLIC_ID_BACKUP_2 )).get ("bytes" ), secondUpload .get ("bytes" ));
912+
913+ ApiResponse finalDelete = api .deleteResources (Arrays .asList (PUBLIC_ID_BACKUP_1 , PUBLIC_ID_BACKUP_2 ), ObjectUtils .emptyMap ());
914+ assertEquals ("deleted" , ((Map ) finalDelete .get ("deleted" )).get (PUBLIC_ID_BACKUP_1 ));
915+ assertEquals ("deleted" , ((Map ) finalDelete .get ("deleted" )).get (PUBLIC_ID_BACKUP_2 ));
916+ }
917+
832918 @ Test
833919 public void testEncodeUrlInApiCall () throws Exception {
834920 String apiTestEncodeUrlInApiCall = "sub^folder test" ;
0 commit comments