diff --git a/cterasdk/core/cloudfs.py b/cterasdk/core/cloudfs.py index e18b7080..da9cd09f 100644 --- a/cterasdk/core/cloudfs.py +++ b/cterasdk/core/cloudfs.py @@ -295,15 +295,16 @@ def find(self, name, owner, include=None): Find a Cloud Drive Folder :param str name: Name of the Cloud Drive Folder to find - :param cterasdk.core.types.UserAccount owner: Cloud drive folder owner + :param str,cterasdk.core.types.UserAccount owner: Cloud drive folder owner's name or a UserAccount object :param list[str] include: List of metadata fields to include in the response :returns: A Cloud Drive Folder """ include = union(include or [], CloudDrives.default) + owner_name = owner.name if hasattr(owner, 'name') else owner builder = query.QueryParamBuilder().include(include) builder.addFilter(query.FilterBuilder('name').eq(name)) - builder.addFilter(query.FilterBuilder('owner', True).eq(owner.name)) + builder.addFilter(query.FilterBuilder('owner', True).eq(owner_name)) builder.put('includeDeleted', True) param = builder.build() diff --git a/tests/ut/core/admin/test_cloudfs_cloud_drives.py b/tests/ut/core/admin/test_cloudfs_cloud_drives.py index beeb58ab..5e64ad10 100644 --- a/tests/ut/core/admin/test_cloudfs_cloud_drives.py +++ b/tests/ut/core/admin/test_cloudfs_cloud_drives.py @@ -167,6 +167,26 @@ def test_add_cloud_drive_with_local_owner_raise(self): self.assertEqual(error_message, str(error.exception)) + def test_find_with_user_account_owner(self): + self._init_global_admin() + with mock.patch("cterasdk.core.cloudfs.query.iterator") as query_iterator_mock: + query_iterator_mock.return_value = iter([munch.Munch({'name': self._name, 'owner': self._owner})]) + cloudfs.CloudDrives(self._global_admin).find(self._name, self._local_user_account) + query_iterator_mock.assert_called_once_with(self._global_admin, '/cloudDrives', mock.ANY) + actual_param = query_iterator_mock.call_args[0][2] + expected_query_params = self._get_find_folder_params(self._owner) + self._assert_equal_objects(actual_param, expected_query_params) + + def test_find_with_string_owner(self): + self._init_global_admin() + with mock.patch("cterasdk.core.cloudfs.query.iterator") as query_iterator_mock: + query_iterator_mock.return_value = iter([munch.Munch({'name': self._name, 'owner': self._owner})]) + cloudfs.CloudDrives(self._global_admin).find(self._name, self._owner) + query_iterator_mock.assert_called_once_with(self._global_admin, '/cloudDrives', mock.ANY) + actual_param = query_iterator_mock.call_args[0][2] + expected_query_params = self._get_find_folder_params(self._owner) + self._assert_equal_objects(actual_param, expected_query_params) + def test_delete_with_local_owner(self): self._init_global_admin() with mock.patch("cterasdk.core.cloudfs.query.iterator") as query_iterator_mock: @@ -212,6 +232,14 @@ def _get_add_cloud_drive_object(self, winacls=True, description=None, quota=None ) return add_cloud_drive_param + def _get_find_folder_params(self, owner_name): + include = union([], cloudfs.CloudDrives.default) + builder = query.QueryParamBuilder().include(include) + builder.addFilter(query.FilterBuilder('name').eq(self._name)) + builder.addFilter(query.FilterBuilder('owner', True).eq(owner_name)) + builder.put('includeDeleted', True) + return builder.build() + def _mock_get_user_base_object_ref(self): user_object = self._get_user_object(baseObjectRef=self._owner) self._mock_get_user(user_object) diff --git a/tests/ut/core/admin/test_cloudfs_zones.py b/tests/ut/core/admin/test_cloudfs_zones.py index 8fc0f942..6adc56e0 100644 --- a/tests/ut/core/admin/test_cloudfs_zones.py +++ b/tests/ut/core/admin/test_cloudfs_zones.py @@ -222,7 +222,8 @@ def _get_device_objects(self): @staticmethod def _find_cloud_folder(folder_name, folder_owner, include): # pylint: disable=unused-argument - folder_info = TestCoreZones._cloud_folders[folder_owner.name][folder_name] + owner_name = folder_owner.name if hasattr(folder_owner, 'name') else folder_owner + folder_info = TestCoreZones._cloud_folders[owner_name][folder_name] param = Object() param.uid = folder_info['uid'] param.owner = folder_info['owner']