def test_create_folder(self):
        folder = self.temp_folder + '/DummyFolder'

        try:
            if self.imaging_api.object_exists(
                    requests.ObjectExistsRequest(folder,
                                                 self.test_storage)).exists:
                self.imaging_api.delete_folder(
                    requests.DeleteFolderRequest(folder, self.test_storage,
                                                 True))

            self.assertFalse(
                self.imaging_api.object_exists(
                    requests.ObjectExistsRequest(folder,
                                                 self.test_storage)).exists)

            self.imaging_api.create_folder(
                requests.CreateFolderRequest(folder, self.test_storage))
            self.assertTrue(
                self.imaging_api.object_exists(
                    requests.ObjectExistsRequest(folder,
                                                 self.test_storage)).exists)

        finally:
            if self.imaging_api.object_exists(
                    requests.ObjectExistsRequest(folder,
                                                 self.test_storage)).exists:
                self.imaging_api.delete_folder(
                    requests.DeleteFolderRequest(folder, self.test_storage,
                                                 True))

            self.assertFalse(
                self.imaging_api.object_exists(
                    requests.ObjectExistsRequest(folder,
                                                 self.test_storage)).exists)
    def test_file_versions_download(self):        
        if self.imaging_api.api_client.configuration.on_premise:
            return

        folder = self.temp_folder + '/Storage'
        file1 = 'Storage.txt'
        file2 = 'Folder1/Folder1.txt'

        try:
            if self.imaging_api.object_exists(
                requests.ObjectExistsRequest(
                    folder, self.test_storage)).exists:
                self.imaging_api.delete_folder(
                    requests.DeleteFolderRequest(
                        folder, self.test_storage, True))

            self.assertFalse(
                self.imaging_api.object_exists(
                    requests.ObjectExistsRequest(
                        folder, self.test_storage)).exists)

            self.imaging_api.copy_file(
                requests.CopyFileRequest(
                    self.original_data_folder + '/' + file1,
                    folder + '/' + file1,
                    self.test_storage,
                    self.test_storage))
            self.imaging_api.copy_file(
                requests.CopyFileRequest(
                    self.original_data_folder + '/' + file2,
                    folder + '/' + file1,
                    self.test_storage,
                    self.test_storage))
            versions = self.imaging_api.get_file_versions(
                requests.GetFileVersionsRequest(
                    folder + '/' + file1, self.test_storage)).value
            recent_version = next(x for x in versions if x.is_latest is True)
            old_version = next(x for x in versions if x.is_latest is not True)

            with open(self.imaging_api.download_file(
                    requests.DownloadFileRequest(folder + '/' + file1, self.test_storage,
                                                 old_version.version_id)), 'r') as old_file:
                self.assertEqual(old_version.size, len(old_file.read()))

            with open(self.imaging_api.download_file(
                    requests.DownloadFileRequest(folder + '/' + file1, self.test_storage,
                                                 recent_version.version_id)), 'r') as old_file:
                self.assertEqual(recent_version.size, len(old_file.read()))

        finally:
            if self.imaging_api.object_exists(
                requests.ObjectExistsRequest(
                    folder, self.test_storage)).exists:
                self.imaging_api.delete_folder(
                    requests.DeleteFolderRequest(
                        folder, self.test_storage, True))
    def test_copy_folder(self):
        folder = self.temp_folder + '/Storage'

        try:
            if self.imaging_api.object_exists(
                    requests.ObjectExistsRequest(folder,
                                                 self.test_storage)).exists:
                self.imaging_api.delete_folder(
                    requests.DeleteFolderRequest(folder, self.test_storage,
                                                 True))

            self.assertFalse(
                self.imaging_api.object_exists(
                    requests.ObjectExistsRequest(folder,
                                                 self.test_storage)).exists)

            self.imaging_api.copy_folder(
                requests.CopyFolderRequest(self.original_data_folder, folder,
                                           self.test_storage,
                                           self.test_storage))
            self.assertTrue(
                self.imaging_api.object_exists(
                    requests.ObjectExistsRequest(folder,
                                                 self.test_storage)).exists)

            original_files = self.imaging_api.get_files_list(
                requests.GetFilesListRequest(self.original_data_folder,
                                             self.test_storage)).value
            copied_files = self.imaging_api.get_files_list(
                requests.GetFilesListRequest(folder, self.test_storage)).value
            self.assertGreater(len(original_files), 0)
            self.assertGreater(len(copied_files), 0)
            self.assertEqual(len(original_files), len(copied_files))
            for original_file in original_files:
                self.assertIsNotNone(
                    next(copied_file for copied_file in copied_files
                         if copied_file.is_folder == original_file.is_folder
                         and copied_file.size == original_file.size
                         and copied_file.name == original_file.name))

        finally:
            if self.imaging_api.object_exists(
                    requests.ObjectExistsRequest(folder,
                                                 self.test_storage)).exists:
                self.imaging_api.delete_folder(
                    requests.DeleteFolderRequest(folder, self.test_storage,
                                                 True))

            self.assertFalse(
                self.imaging_api.object_exists(
                    requests.ObjectExistsRequest(folder,
                                                 self.test_storage)).exists)
 def tearDown(self):
     if not self.failed_any_test and self.remove_result and self.imaging_api.object_exists(
             requests.ObjectExistsRequest(self.temp_folder,
                                          self.test_storage)).exists:
         self.imaging_api.delete_folder(
             requests.DeleteFolderRequest(self.temp_folder,
                                          self.test_storage, True))
    def setUp(self):
        self.failed_any_test = False
        self.default_storage = 'Imaging-CI'
        self.cloud_test_folder_prefix = 'ImagingCloudTestPython'
        self.original_data_folder = 'ImagingIntegrationTestData'
        self._server_access_file = 'serverAccess.json'
        self._api_version = 'v3.0'
        self._base_url = 'https://api.aspose.cloud/'
        self._local_test_folder = os.path.join(
            os.path.dirname(os.path.dirname(os.path.abspath(__file__))),
            'TestData/')
        self.remove_result = True

        self.temp_folder = '{0}_{1}'.format(
            self.cloud_test_folder_prefix,
            os.environ.get('BUILD_NUMBER') or getpass.getuser())

        self.basic_export_formats = [
            'bmp', 'gif', 'jpg', 'png', 'psd', 'tiff', 'webp'
        ]

        self.test_storage = os.environ.get('StorageName')
        if not self.test_storage:
            print(
                'Storage name is not set by environment variable. Using the default one.'
            )
            self.test_storage = self.default_storage

        self.__create_api_instance()

        if not self.failed_any_test and self.remove_result and self.imaging_api.object_exists(
                requests.ObjectExistsRequest(self.temp_folder,
                                             self.test_storage)).exists:
            self.imaging_api.delete_folder(
                requests.DeleteFolderRequest(self.temp_folder,
                                             self.test_storage, True))
            self.imaging_api.create_folder(
                requests.CreateFolderRequest(self.temp_folder,
                                             self.test_storage))
    def test_upload_file(self):
        folder = self.temp_folder + '/Storage'
        file = 'Storage.txt'

        try:
            if self.imaging_api.object_exists(
                requests.ObjectExistsRequest(
                    folder, self.test_storage)).exists:
                self.imaging_api.delete_folder(
                    requests.DeleteFolderRequest(
                        folder, self.test_storage, True))

            self.assertFalse(
                self.imaging_api.object_exists(
                    requests.ObjectExistsRequest(
                        folder, self.test_storage)).exists)

            original_file = self.imaging_api.download_file(
                requests.DownloadFileRequest(
                    self.original_data_folder + '/' + file,
                    self.test_storage))

            result = self.imaging_api.upload_file(
                requests.UploadFileRequest(
                    folder + '/' + file,
                    original_file,
                    self.test_storage))
            self.assertIsNotNone(result)
            self.assertTrue(not result.errors or len(result) == 0)
            self.assertIsNotNone(result.uploaded)
            self.assertEqual(1, len(result.uploaded))
            self.assertEqual(file, result.uploaded[0])

            exist_response = self.imaging_api.object_exists(
                requests.ObjectExistsRequest(
                    folder + '/' + file, self.test_storage))
            self.assertIsNotNone(exist_response)
            self.assertFalse(exist_response.is_folder)
            self.assertTrue(exist_response.exists)

            original_file_info = next(
                x for x in self.imaging_api.get_files_list(
                    requests.GetFilesListRequest(
                        self.original_data_folder,
                        self.test_storage)).value if x.name == file)

            uploaded_file_info = next(
                x for x in self.imaging_api.get_files_list(
                    requests.GetFilesListRequest(
                        folder, self.test_storage)).value if x.name == file)
            self.assertEqual(original_file_info.size, uploaded_file_info.size)

            original_file = self.imaging_api.download_file(
                requests.DownloadFileRequest(
                    self.original_data_folder + '/' + file,
                    self.test_storage))

            uploaded_file = self.imaging_api.download_file(
                requests.DownloadFileRequest(
                    folder + '/' + file, self.test_storage))

            with open(original_file, 'r') as original_reader, open(uploaded_file, 'r') as uploaded_reader:
                original_string = original_reader.read()
                copied_string = uploaded_reader.read()
                self.assertEqual(len(original_string), len(copied_string))
                self.assertEqual(len(original_string), original_file_info.size)
                self.assertEqual(original_string, copied_string)
                self.assertEqual(
                    original_string,
                    original_file_info.path.strip('/'))
                self.assertEqual(
                    original_string.replace(
                        self.original_data_folder,
                        folder),
                    uploaded_file_info.path.strip('/'))

        finally:
            self.imaging_api.delete_file(
                requests.DeleteFileRequest(
                    folder + '/' + file,
                    self.test_storage))
            self.assertFalse(
                self.imaging_api.object_exists(
                    requests.ObjectExistsRequest(
                        folder + '/' + file,
                        self.test_storage)).exists)

            if self.imaging_api.object_exists(
                requests.ObjectExistsRequest(
                    folder, self.test_storage)).exists:
                self.imaging_api.delete_folder(
                    requests.DeleteFolderRequest(
                        folder, self.test_storage, True))

            self.assertFalse(
                self.imaging_api.object_exists(
                    requests.ObjectExistsRequest(
                        folder, self.test_storage)).exists)
    def test_move_file(self):
        folder = self.temp_folder + '/Storage'
        file = 'Storage.txt'

        try:
            if self.imaging_api.object_exists(
                requests.ObjectExistsRequest(
                    folder, self.test_storage)).exists:
                self.imaging_api.delete_folder(
                    requests.DeleteFolderRequest(
                        folder, self.test_storage, True))

            self.assertFalse(
                self.imaging_api.object_exists(
                    requests.ObjectExistsRequest(
                        folder, self.test_storage)).exists)

            self.imaging_api.copy_file(
                requests.CopyFileRequest(
                    self.original_data_folder + '/' + file,
                    folder + '/' + file + '.copied',
                    self.test_storage,
                    self.test_storage))
            exist_response = self.imaging_api.object_exists(
                requests.ObjectExistsRequest(
                    folder + '/' + file + '.copied',
                    self.test_storage))
            self.assertIsNotNone(exist_response)
            self.assertFalse(exist_response.is_folder)
            self.assertTrue(exist_response.exists)

            self.imaging_api.move_file(
                requests.MoveFileRequest(
                    folder + '/' + file + '.copied',
                    folder + '/' + file,
                    self.test_storage,
                    self.test_storage))
            self.assertFalse(
                self.imaging_api.object_exists(
                    requests.ObjectExistsRequest(
                        folder + '/' + file + '.copied',
                        self.test_storage)).exists)
            exist_response = self.imaging_api.object_exists(
                requests.ObjectExistsRequest(
                    folder + '/' + file, self.test_storage))
            self.assertIsNotNone(exist_response)
            self.assertFalse(exist_response.is_folder)
            self.assertTrue(exist_response.exists)

            original_file_info = next(
                x for x in self.imaging_api.get_files_list(
                    requests.GetFilesListRequest(
                        self.original_data_folder,
                        self.test_storage)).value if x.name == file)
            moved_file_info = next(
                x for x in self.imaging_api.get_files_list(
                    requests.GetFilesListRequest(
                        folder, self.test_storage)).value if x.name == file)
            self.assertEqual(original_file_info.size, moved_file_info.size)

            with open(self.imaging_api.download_file(
                    requests.DownloadFileRequest(self.original_data_folder + '/' + file,
                                                 self.test_storage)), 'r') as original_file, \
                    open(self.imaging_api.download_file(requests.DownloadFileRequest(folder + '/' + file,
                                                                                     self.test_storage)),
                         'r') as moved_file:
                original_string = original_file.read()
                moved_string = moved_file.read()
                self.assertEqual(len(original_string), len(moved_string))
                self.assertEqual(len(original_string), original_file_info.size)
                self.assertEqual(original_string, moved_string)
                self.assertEqual(
                    original_string,
                    original_file_info.path.strip('/'))
                self.assertEqual(
                    original_string.replace(
                        self.original_data_folder,
                        folder),
                    moved_file_info.path.strip('/'))

        finally:
            self.imaging_api.delete_file(
                requests.DeleteFileRequest(
                    folder + '/' + file,
                    self.test_storage))
            self.assertFalse(
                self.imaging_api.object_exists(
                    requests.ObjectExistsRequest(
                        folder + '/' + file,
                        self.test_storage)).exists)

            if self.imaging_api.object_exists(
                requests.ObjectExistsRequest(
                    folder, self.test_storage)).exists:
                self.imaging_api.delete_folder(
                    requests.DeleteFolderRequest(
                        folder, self.test_storage, True))

            self.assertFalse(
                self.imaging_api.object_exists(
                    requests.ObjectExistsRequest(
                        folder, self.test_storage)).exists)
    def test_file_versions_move(self):        
        if self.imaging_api.api_client.configuration.on_premise:
            return

        folder = self.temp_folder + '/Storage'
        file1 = 'Storage.txt'
        file2 = 'Folder1/Folder1.txt'

        try:
            if self.imaging_api.object_exists(
                requests.ObjectExistsRequest(
                    folder, self.test_storage)).exists:
                self.imaging_api.delete_folder(
                    requests.DeleteFolderRequest(
                        folder, self.test_storage, True))

            self.assertFalse(
                self.imaging_api.object_exists(
                    requests.ObjectExistsRequest(
                        folder, self.test_storage)).exists)

            self.imaging_api.copy_file(
                requests.CopyFileRequest(
                    self.original_data_folder + '/' + file1,
                    folder + '/' + file1,
                    self.test_storage,
                    self.test_storage))
            self.imaging_api.copy_file(
                requests.CopyFileRequest(
                    self.original_data_folder + '/' + file2,
                    folder + '/' + file1,
                    self.test_storage,
                    self.test_storage))
            versions = self.imaging_api.get_file_versions(
                requests.GetFileVersionsRequest(
                    folder + '/' + file1, self.test_storage)).value
            recent_version = next(x for x in versions if x.is_latest is True)

            self.imaging_api.move_file(
                requests.MoveFileRequest(
                    folder + '/' + file1,
                    folder + '/' + file1 + '.recent',
                    self.test_storage,
                    self.test_storage,
                    recent_version.version_id))
            copied_versions = self.imaging_api.get_file_versions(
                requests.GetFileVersionsRequest(
                    folder + '/' + file1 + '.recent',
                    self.test_storage)).value
            self.assertEqual(1, len(copied_versions))
            self.assertTrue(copied_versions[0].is_latest)
            self.assertEqual(recent_version.size, copied_versions[0].size)

            self.imaging_api.copy_file(
                requests.CopyFileRequest(
                    self.original_data_folder + '/' + file1,
                    folder + '/' + file1,
                    self.test_storage,
                    self.test_storage))
            self.imaging_api.copy_file(
                requests.CopyFileRequest(
                    self.original_data_folder + '/' + file2,
                    folder + '/' + file1,
                    self.test_storage,
                    self.test_storage))
            versions = self.imaging_api.get_file_versions(
                requests.GetFileVersionsRequest(
                    folder + '/' + file1, self.test_storage)).value
            old_version = next(x for x in versions if x.is_latest is not True)

            self.imaging_api.move_file(
                requests.MoveFileRequest(
                    folder + '/' + file1,
                    folder + '/' + file1 + '.old',
                    self.test_storage,
                    self.test_storage,
                    old_version.version_id))
            copied_versions = self.imaging_api.get_file_versions(
                requests.GetFileVersionsRequest(folder + '/' + file1 + '.old',
                                                self.test_storage)).value
            self.assertEqual(1, len(copied_versions))
            self.assertTrue(copied_versions[0].is_latest)
            self.assertEqual(old_version.size, copied_versions[0].size)

        finally:
            if self.imaging_api.object_exists(
                requests.ObjectExistsRequest(
                    folder, self.test_storage)).exists:
                self.imaging_api.delete_folder(
                    requests.DeleteFolderRequest(
                        folder, self.test_storage, True))
    def test_file_versions_create(self):        
        if self.imaging_api.api_client.configuration.on_premise:
            return

        folder = self.temp_folder + '/Storage'
        file1 = 'Storage.txt'
        file2 = 'Folder1/Folder1.txt'

        file1_size = next(
            x for x in self.imaging_api.get_files_list(
                requests.GetFilesListRequest(
                    self.original_data_folder,
                    self.test_storage)).value if x.name == file1).size

        file2_size = next(
            x for x in self.imaging_api.get_files_list(
                requests.GetFilesListRequest(
                    self.original_data_folder + '/Folder1',
                    self.test_storage)).value if x.name == 'Folder1.txt').size

        try:
            if self.imaging_api.object_exists(
                requests.ObjectExistsRequest(
                    folder, self.test_storage)).exists:
                self.imaging_api.delete_folder(
                    requests.DeleteFolderRequest(
                        folder, self.test_storage, True))

            self.assertFalse(
                self.imaging_api.object_exists(
                    requests.ObjectExistsRequest(
                        folder, self.test_storage)).exists)

            self.imaging_api.copy_file(
                requests.CopyFileRequest(
                    self.original_data_folder + '/' + file1,
                    folder + '/' + file1,
                    self.test_storage,
                    self.test_storage))
            self.imaging_api.copy_file(
                requests.CopyFileRequest(
                    self.original_data_folder + '/' + file2,
                    folder + '/' + file1,
                    self.test_storage,
                    self.test_storage))
            versions = self.imaging_api.get_file_versions(
                requests.GetFileVersionsRequest(
                    folder + '/' + file1, self.test_storage)).value

            self.assertEqual(2, len(versions))
            recent_version_size = next(
                x for x in versions if x.is_latest is True).size
            old_version_size = next(
                x for x in versions if x.is_latest is not True).size
            self.assertNotEqual(recent_version_size, old_version_size)
            self.assertEqual(old_version_size, file1_size)
            self.assertEqual(recent_version_size, file2_size)

        finally:
            if self.imaging_api.object_exists(
                requests.ObjectExistsRequest(
                    folder, self.test_storage)).exists:
                self.imaging_api.delete_folder(
                    requests.DeleteFolderRequest(
                        folder, self.test_storage, True))