diff --git a/lib/galaxy/managers/library_datasets.py b/lib/galaxy/managers/library_datasets.py index 504648e0511..a0a9e8a9a21 100644 --- a/lib/galaxy/managers/library_datasets.py +++ b/lib/galaxy/managers/library_datasets.py @@ -135,7 +135,7 @@ class LibraryDatasetsManager(object): # all operations are available to an admin return ld if check_accessible: - ld = self._check_accessible(trans, ld) + ld = self.check_accessible(trans, ld) return ld def check_accessible(self, trans, ld): @@ -150,7 +150,7 @@ class LibraryDatasetsManager(object): :raises: ObjectNotFound """ - if not trans.app.security_agent.can_access_library_item(trans.get_current_user_roles(), ld): + if not trans.app.security_agent.can_access_library_item(trans.get_current_user_roles(), ld, trans.user): raise ObjectNotFound('Library dataset with the id provided was not found.') elif ld.deleted: raise ObjectNotFound('Library dataset with the id provided is deleted.') diff --git a/test/api/test_libraries.py b/test/api/test_libraries.py index d82ce93a007..b89019d106b 100644 --- a/test/api/test_libraries.py +++ b/test/api/test_libraries.py @@ -113,6 +113,34 @@ class LibrariesApiTestCase(api.ApiTestCase, TestsDatasets): self._assert_status_code_is(create_response, 200) self._assert_has_keys(create_response.json(), "name", "id") + def test_update_dataset_in_folder(self): + library = self.library_populator.new_private_library("ForUpdateDataset") + folder_response = self._create_folder(library) + self._assert_status_code_is(folder_response, 200) + folder_id = folder_response.json()[0]['id'] + history_id = self.dataset_populator.new_history() + hda_id = self.dataset_populator.new_dataset(history_id, content="1 2 3")['id'] + payload = {'from_hda_id': hda_id, 'create_type': 'file', 'folder_id': folder_id} + ld = self._post("libraries/%s/contents" % folder_id, payload) + data = {'name': 'updated_name', 'file_ext': 'fastq', 'misc_info': 'updated_info', 'genome_build': 'updated_genome_build'} + create_response = self._patch("libraries/datasets/%s" % ld.json()["id"], data=data) + self._assert_status_code_is(create_response, 200) + self._assert_has_keys(create_response.json(), "name", "file_ext", "misc_info", "genome_build") + + def test_invalid_update_dataset_in_folder(self): + library = self.library_populator.new_private_library("ForInvalidUpdateDataset") + folder_response = self._create_folder(library) + self._assert_status_code_is(folder_response, 200) + folder_id = folder_response.json()[0]['id'] + history_id = self.dataset_populator.new_history() + hda_id = self.dataset_populator.new_dataset(history_id, content="1 2 3")['id'] + payload = {'from_hda_id': hda_id, 'create_type': 'file', 'folder_id': folder_id} + ld = self._post("libraries/%s/contents" % folder_id, payload) + data = {'file_ext': 'nonexisting_type'} + create_response = self._patch("libraries/datasets/%s" % ld.json()["id"], data=data) + self._assert_status_code_is(create_response, 400) + assert 'This Galaxy does not recognize the datatype of:' in create_response.json()['err_msg'] + def test_create_datasets_in_library_from_collection(self): library = self.library_populator.new_private_library("ForCreateDatasetsFromCollection") folder_response = self._create_folder(library)