def test_create_resource_over_quota(self): uquota = self.user.quotas.first() # make user's quota over hard limit 125% uquota.used_value = uquota.allocated_value * 1.3 uquota.save() # create_resource should raise quota exception now that the creator user is over hard limit with self.assertRaises(QuotaException): resource_pre_create_actions( resource_type='GenericResource', resource_title='My Test Resource', page_redirect_url_key=None, files=(self.file_one, ), metadata=None, requesting_user=self.user, )
def test_create_resource_over_quota(self): if not QuotaMessage.objects.exists(): QuotaMessage.objects.create() qmsg = QuotaMessage.objects.first() qmsg.enforce_quota = True qmsg.save() uquota = self.user.quotas.first() # make user's quota over hard limit 125% uquota.used_value = uquota.allocated_value * 1.3 uquota.save() # create_resource should raise quota exception now that the creator user is over hard # limit and enforce quota flag is set to True with self.assertRaises(QuotaException): resource_pre_create_actions( resource_type='GenericResource', resource_title='My Test Resource', page_redirect_url_key=None, files=(self.file_one, ), metadata=None, requesting_user=self.user, ) qmsg.enforce_quota = False qmsg.save() # create resource should not raise quota exception now that enforce_quota flag # is set to False try: resource_pre_create_actions( resource_type='GenericResource', resource_title='My Test Resource', page_redirect_url_key=None, files=(self.file_one, ), metadata=None, requesting_user=self.user, ) except QuotaException as ex: self.fail( "create resource should not raise QuotaException for over quota cases " " if quota is not enforced - Quota Exception: " + ex.message)
def test_create_resource_over_quota(self): if not QuotaMessage.objects.exists(): QuotaMessage.objects.create() qmsg = QuotaMessage.objects.first() qmsg.enforce_quota = True qmsg.save() uquota = self.user.quotas.first() # make user's quota over hard limit 125% uquota.used_value = uquota.allocated_value * 1.3 uquota.save() # create_resource should raise quota exception now that the creator user is over hard # limit and enforce quota flag is set to True with self.assertRaises(QuotaException): resource_pre_create_actions(resource_type='GenericResource', resource_title='My Test Resource', page_redirect_url_key=None, files=(self.file_one,), metadata=None, requesting_user=self.user,) qmsg.enforce_quota = False qmsg.save() # create resource should not raise quota exception now that enforce_quota flag # is set to False try: resource_pre_create_actions(resource_type='GenericResource', resource_title='My Test Resource', page_redirect_url_key=None, files=(self.file_one,), metadata=None, requesting_user=self.user, ) except QuotaException as ex: self.fail( "create resource should not raise QuotaException for over quota cases " " if quota is not enforced - Quota Exception: " + ex.message)
def _create_netcdf_resource(self): files = [UploadedFile(file=self.netcdf_file_obj, name=self.netcdf_file_name)] _, _, metadata, _ = utils.resource_pre_create_actions( resource_type='NetcdfResource', resource_title='Snow water equivalent estimation at TWDEF site ' 'from Oct 2009 to June 2010', page_redirect_url_key=None, files=files, metadata=None) self.resNetcdf = hydroshare.create_resource( 'NetcdfResource', self.user, 'Snow water equivalent estimation at TWDEF site from Oct 2009 to June 2010', files=files, metadata=metadata ) utils.resource_post_create_actions(self.resNetcdf, self.user, metadata)
def _create_netcdf_resource(self): files = [ UploadedFile(file=self.netcdf_file_obj, name=self.netcdf_file_name) ] _, _, metadata = utils.resource_pre_create_actions( resource_type='NetcdfResource', resource_title='Snow water equivalent estimation at TWDEF site ' 'from Oct 2009 to June 2010', page_redirect_url_key=None, files=files, metadata=None) self.resNetcdf = hydroshare.create_resource( 'NetcdfResource', self.user, 'Snow water equivalent estimation at TWDEF site from Oct 2009 to June 2010', files=files, metadata=metadata) utils.resource_post_create_actions(self.resNetcdf, self.user, metadata)
def test_metadata_extraction_of_wkt_crs_on_resource_creation(self): files = [ UploadedFile(file=self.netcdf_file_obj_crs, name=self.netcdf_file_name_crs) ] _, _, metadata, _ = utils.resource_pre_create_actions( resource_type='NetcdfResource', resource_title='Snow water equivalent estimation at TWDEF site ' 'from Oct 2009 to June 2010', page_redirect_url_key=None, files=files, metadata=None, ) self.resNetcdf = hydroshare.create_resource( 'NetcdfResource', self.user, 'Snow water equivalent estimation at TWDEF site from Oct 2009 to June 2010', files=files, metadata=metadata) self._test_metadata_extraction_wkt_crs()
def test_metadata_extraction_on_resource_creation(self): # passing the file object that points to the temp dir doesn't work - create_resource # throws error open the file from the fixed file location files = [ UploadedFile(file=self.netcdf_file_obj, name=self.netcdf_file_name) ] _, _, metadata, _ = utils.resource_pre_create_actions( resource_type='NetcdfResource', resource_title='Snow water equivalent estimation at TWDEF site ' 'from Oct 2009 to June 2010', page_redirect_url_key=None, files=files, metadata=None, ) self.resNetcdf = hydroshare.create_resource( 'NetcdfResource', self.user, 'Snow water equivalent estimation at TWDEF site from Oct 2009 to June 2010', files=files, metadata=metadata) super(TestNetcdfMetaData, self).netcdf_metadata_extraction()
def test_metadata_in_user_zone(self): # only do federation testing when REMOTE_USE_IRODS is True and irods docker containers # are set up properly if not super(TestNetcdfMetaData, self).is_federated_irods_available(): return # test metadata extraction with resource creation with nc file coming from user zone space fed_test_file_full_path = '/{zone}/home/{username}/{fname}'.format( zone=settings.HS_USER_IRODS_ZONE, username=self.user.username, fname=self.netcdf_file_name) res_upload_files = [] _, _, metadata, fed_res_path = utils.resource_pre_create_actions( resource_type='NetcdfResource', resource_title= 'Snow water equivalent estimation at TWDEF site from Oct 2009 to June ' '2010', page_redirect_url_key=None, files=res_upload_files, source_names=[fed_test_file_full_path]) self.resNetcdf = hydroshare.create_resource( 'NetcdfResource', self.user, 'Snow water equivalent estimation at TWDEF site from Oct 2009 to June 2010', files=res_upload_files, source_names=[fed_test_file_full_path], fed_res_path=fed_res_path[0] if len(fed_res_path) == 1 else '', move=False, metadata=metadata) utils.resource_post_create_actions(self.resNetcdf, self.user, metadata) super(TestNetcdfMetaData, self).netcdf_metadata_extraction() # test metadata is deleted after content file is deleted in user zone space # there should be 2 content files at this point self.assertEqual(self.resNetcdf.files.all().count(), 2) # there should be 2 format elements self.assertEqual(self.resNetcdf.metadata.formats.all().count(), 2) # delete content file now hydroshare.delete_resource_file(self.resNetcdf.short_id, self.netcdf_file_name, self.user) # there should no content file self.assertEqual(self.resNetcdf.files.all().count(), 0) # there should be a title element self.assertNotEqual(self.resNetcdf.metadata.title, None) # there should be abstract element self.assertNotEqual(self.resNetcdf.metadata.description, None) # there should be 1 creator element (based on the extracted metadata) self.assertEqual(self.resNetcdf.metadata.creators.all().count(), 1) # there should be 1 contributor element self.assertEqual(self.resNetcdf.metadata.contributors.all().count(), 1) # there should be no coverage element self.assertEqual(self.resNetcdf.metadata.coverages.all().count(), 0) # there should be no format element self.assertEqual(self.resNetcdf.metadata.formats.all().count(), 0) # there should be subject element self.assertNotEqual(self.resNetcdf.metadata.subjects.all().count(), 0) # testing extended metadata elements self.assertEqual(self.resNetcdf.metadata.ori_coverage.all().count(), 0) self.assertEqual(self.resNetcdf.metadata.variables.all().count(), 0) # test metadata extraction with a valid nc file being added coming from user zone space res_add_files = [] utils.resource_file_add_pre_process( resource=self.resNetcdf, files=res_add_files, user=self.user, source_names=[fed_test_file_full_path]) utils.resource_file_add_process(resource=self.resNetcdf, files=res_add_files, user=self.user, source_names=[fed_test_file_full_path]) super(TestNetcdfMetaData, self).netcdf_metadata_extraction() self.assertEqual(CoreMetaData.objects.all().count(), 1) # delete resource hydroshare.delete_resource(self.resNetcdf.short_id) self.assertEqual(CoreMetaData.objects.all().count(), 0)
def test_metadata_in_user_zone(self): super(TestRasterMetaData, self).assert_federated_irods_available() # test metadata extraction with resource creation with tif file coming from user zone space fed_test_file_full_path = '/{zone}/home/{username}/{fname}'.format( zone=settings.HS_USER_IRODS_ZONE, username=self.user.username, fname=self.raster_tif_file_name) res_upload_files = [] _, _, metadata, fed_res_path = utils.resource_pre_create_actions( resource_type='RasterResource', resource_title='My Test Raster Resource', page_redirect_url_key=None, files=res_upload_files, source_names=[fed_test_file_full_path]) self.resRaster = hydroshare.create_resource( 'RasterResource', self.user, 'My Test Raster Resource', files=res_upload_files, source_names=[fed_test_file_full_path], fed_res_path=fed_res_path[0] if len(fed_res_path) == 1 else '', move=False, metadata=metadata) # raster file validation and metadata extraction in post resource creation signal handler utils.resource_post_create_actions(resource=self.resRaster, user=self.user, metadata=[]) super(TestRasterMetaData, self).raster_metadata_extraction() # test metadata is deleted after content file is deleted in user zone space # there should be 2 content file: tif file and vrt file at this point self.assertEqual(self.resRaster.files.all().count(), 2) # there should be 2 format elements self.assertEqual(self.resRaster.metadata.formats.all().count(), 2) self.assertEqual(self.resRaster.metadata.formats.all().filter( value='application/vrt').count(), 1) self.assertEqual(self.resRaster.metadata.formats.all().filter( value='image/tiff').count(), 1) # delete content file now hydroshare.delete_resource_file(self.resRaster.short_id, self.raster_tif_file_name, self.user) # there should be no content file self.assertEqual(self.resRaster.files.all().count(), 0) # there should be a title element self.assertNotEqual(self.resRaster.metadata.title, None) # there should be no abstract element self.assertEqual(self.resRaster.metadata.description, None) # there should be 1 creator element self.assertEqual(self.resRaster.metadata.creators.all().count(), 1) # there should be no contributor element self.assertEqual(self.resRaster.metadata.contributors.all().count(), 0) # there should be no coverage element self.assertEqual(self.resRaster.metadata.coverages.all().count(), 0) # there should be no format element self.assertEqual(self.resRaster.metadata.formats.all().count(), 0) # there should be no subject element self.assertEqual(self.resRaster.metadata.subjects.all().count(), 0) # testing extended metadata elements - there should be no extended metadata elements # at this point self.assertEqual(self.resRaster.metadata.originalCoverage, None) self.assertEqual(self.resRaster.metadata.cellInformation, None) self.assertEqual(self.resRaster.metadata.bandInformations.count(), 0) # test metadata extraction with a valid tif file being added coming from user zone space res_add_files = [] # now necessary in order to test add_process utils.resource_file_add_pre_process(resource=self.resRaster, files=res_add_files, user=self.user, source_names=[fed_test_file_full_path]) # file validation and metadata extraction happen during post file add signal handler utils.resource_file_add_process(resource=self.resRaster, files=res_add_files, user=self.user, source_names=[fed_test_file_full_path]) super(TestRasterMetaData, self).raster_metadata_extraction() # test metadata deletion when deleting a resource in user zone space self.assertEqual(CoreMetaData.objects.all().count(), 1) # delete resource hydroshare.delete_resource(self.resRaster.short_id) # resource core metadata is deleted after resource deletion self.assertEqual(CoreMetaData.objects.all().count(), 0) # test adding file from user zone to existing empty resource in hydroshare zone # even there is no file uploaded to resource initially, there are default extended # automatically metadata created self.resRaster = hydroshare.create_resource( resource_type='RasterResource', owner=self.user, title='My Test Raster Resource' ) # test metadata extraction with a valid tif file being added coming from user zone space # file validation and metadata extraction happen during post file add signal handler utils.resource_file_add_process(resource=self.resRaster, files=[], user=self.user, source_names=[fed_test_file_full_path]) super(TestRasterMetaData, self).raster_metadata_extraction() # there should be 2 content file: tif file and vrt file at this point self.assertEqual(self.resRaster.files.all().count(), 2) # delete resource hydroshare.delete_resource(self.resRaster.short_id) # resource core metadata is deleted after resource deletion self.assertEqual(CoreMetaData.objects.all().count(), 0)
def test_update_netcdf_file(self): # create a netcdf resource files = [ UploadedFile(file=self.netcdf_file_obj, name=self.netcdf_file_name) ] _, _, metadata, _ = utils.resource_pre_create_actions( resource_type='NetcdfResource', resource_title='Untitled resource', page_redirect_url_key=None, files=files, metadata=None, ) self.resNetcdf = hydroshare.create_resource('NetcdfResource', self.john, 'Untitled resource', files=files, metadata=metadata) utils.resource_post_create_actions(self.resNetcdf, self.john, metadata) res_metadata = self.resNetcdf.metadata # update title for setting flag self.assertFalse(res_metadata.is_dirty) element = res_metadata.title res_metadata.update_element('title', element.id, value='new title') res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) # create/update temporal coverage for setting flag res_metadata.is_dirty = False res_metadata.save() element = res_metadata.create_element('coverage', type='period', value={ 'start': '01/01/2000', 'end': '12/12/2010' }) res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) res_metadata.is_dirty = False res_metadata.save() res_metadata.update_element('coverage', element.id, type='period', value={ 'start': '01/02/2000', 'end': '01/03/2000' }) res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) # create/update spatial coverage for setting flag res_metadata.is_dirty = False res_metadata.save() element = res_metadata.create_element('coverage', type='box', value={ 'northlimit': 12, 'eastlimit': 12, 'southlimit': 1, 'westlimit': 1, 'units': 'Decimal degree', 'projection': 'WGS84' }) res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) res_metadata.is_dirty = False res_metadata.save() res_metadata.update_element('coverage', element.id, type='box', value={ 'northlimit': '13', 'eastlimit': '13', 'southlimit': '2', 'westlimit': '2', 'units': 'Decimal degree', 'projection': 'WGS84' }) res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) # create/update description for setting flag res_metadata.is_dirty = False res_metadata.save() element = res_metadata.create_element('description', abstract='new abstract') res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) res_metadata.is_dirty = False res_metadata.save() res_metadata.update_element('description', element.id, abstract='update abstract') res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) # create subject for setting flag res_metadata.is_dirty = False res_metadata.save() res_metadata.create_element('subject', value='new keyword2') res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) # create/update/delete source for setting flag res_metadata.is_dirty = False res_metadata.save() element = res_metadata.create_element('source', derived_from='new source') res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) res_metadata.is_dirty = False res_metadata.save() res_metadata.update_element('source', element.id, abstract='update source') res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) res_metadata.is_dirty = False res_metadata.save() res_metadata.delete_element('source', element.id) res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) # create/update/delete relation for setting flag res_metadata.is_dirty = False res_metadata.save() element_1 = res_metadata.create_element('relation', type='isHostedBy', value='new host') res_metadata.refresh_from_db() self.assertFalse(res_metadata.is_dirty) element_2 = res_metadata.create_element('relation', type='cites', value='new reference') res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) res_metadata.is_dirty = False res_metadata.save() res_metadata.update_element('relation', element_1.id, type='isHostedBy', value='update host') res_metadata.refresh_from_db() self.assertFalse(res_metadata.is_dirty) res_metadata.update_element('relation', element_2.id, type='cites', value='update reference') res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) res_metadata.is_dirty = False res_metadata.save() res_metadata.delete_element('relation', element_2.id) res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) # update creator res_metadata.is_dirty = False res_metadata.save() element = res_metadata.creators.all().first() res_metadata.update_element('creator', element.id, name='update name') res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) # create/update/delete contributor res_metadata.is_dirty = False res_metadata.save() element = res_metadata.create_element('contributor', name='new name') res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) res_metadata.is_dirty = False res_metadata.save() res_metadata.update_element('contributor', element.id, name='update name') res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) res_metadata.is_dirty = False res_metadata.save() res_metadata.delete_element('contributor', element.id) res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) # update variable res_metadata.is_dirty = False res_metadata.save() element = res_metadata.variables.all().first() res_metadata.update_element('variable', element.id, name=element.name, unit='update unit', type=element.type, shape=element.shape, missing_value='1', descriptive_name='update long name', method='update method') res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) # check file content update request url = reverse("update_netcdf_resfile", kwargs={'resource_id': self.resNetcdf.short_id}) request = self.factory.post(url) request.user = self.john self._set_request_message_attributes(request) request.META['HTTP_REFERER'] = "/some_url/" response = update_netcdf_file(request, resource_id=self.resNetcdf.short_id) self.assertEqual(response.status_code, status.HTTP_302_FOUND) # check file update content nc_dump_res_file = None for f in self.resNetcdf.files.all(): if f.extension == ".txt": nc_dump_res_file = f break self.assertNotEqual(nc_dump_res_file, None) self.assertIn('title = "new title"', nc_dump_res_file.resource_file.read()) res_metadata.refresh_from_db() self.assertFalse(res_metadata.is_dirty) # test extra metadata update for setting flag self.assertEqual(self.resNetcdf.extra_metadata, {}) url_params = {'shortkey': self.resNetcdf.short_id} post_data = {'key1': 'key-1', 'value1': 'value-1'} url = reverse('update_key_value_metadata', kwargs=url_params) request = self.factory.post(url, data=post_data) request.user = self.john # make it a ajax request request.META['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest' self._set_request_message_attributes(request) response = update_key_value_metadata(request, shortkey=self.resNetcdf.short_id) self.assertEqual(response.status_code, status.HTTP_200_OK) res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty)
def test_update_netcdf_file(self): # create a netcdf resource files = [UploadedFile(file=self.netcdf_file_obj, name=self.netcdf_file_name)] _, _, metadata, _ = utils.resource_pre_create_actions( resource_type='NetcdfResource', resource_title='Untitled resource', page_redirect_url_key=None, files=files, metadata=None,) self.resNetcdf = hydroshare.create_resource( 'NetcdfResource', self.john, 'Untitled resource', files=files, metadata=metadata ) utils.resource_post_create_actions(self.resNetcdf, self.john, metadata) res_metadata = self.resNetcdf.metadata # update title for setting flag self.assertFalse(res_metadata.is_dirty) element = res_metadata.title res_metadata.update_element('title', element.id, value='new title') res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) # create/update temporal coverage for setting flag res_metadata.is_dirty = False res_metadata.save() element = res_metadata.create_element('coverage', type='period', value={'start': '01/01/2000', 'end': '12/12/2010'}) res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) res_metadata.is_dirty = False res_metadata.save() res_metadata.update_element('coverage', element.id, type='period', value={'start': '01/02/2000', 'end': '01/03/2000'}) res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) # create/update spatial coverage for setting flag res_metadata.is_dirty = False res_metadata.save() element = res_metadata.create_element('coverage', type='box', value={'northlimit': 12, 'eastlimit': 12, 'southlimit': 1, 'westlimit': 1, 'units': 'Decimal degree', 'projection': 'WGS84'} ) res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) res_metadata.is_dirty = False res_metadata.save() res_metadata.update_element('coverage', element.id, type='box', value={'northlimit': '13', 'eastlimit': '13', 'southlimit': '2', 'westlimit': '2', 'units': 'Decimal degree', 'projection': 'WGS84'} ) res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) # create/update description for setting flag res_metadata.is_dirty = False res_metadata.save() element = res_metadata.create_element('description', abstract='new abstract') res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) res_metadata.is_dirty = False res_metadata.save() res_metadata.update_element('description', element.id, abstract='update abstract') res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) # create subject for setting flag res_metadata.is_dirty = False res_metadata.save() res_metadata.create_element('subject', value='new keyword2') res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) # create/update/delete source for setting flag res_metadata.is_dirty = False res_metadata.save() element = res_metadata.create_element('source', derived_from='new source') res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) res_metadata.is_dirty = False res_metadata.save() res_metadata.update_element('source', element.id, abstract='update source') res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) res_metadata.is_dirty = False res_metadata.save() res_metadata.delete_element('source', element.id) res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) # create/update/delete relation for setting flag res_metadata.is_dirty = False res_metadata.save() element_1 = res_metadata.create_element('relation', type='isHostedBy', value='new host') res_metadata.refresh_from_db() self.assertFalse(res_metadata.is_dirty) element_2 = res_metadata.create_element('relation', type='cites', value='new reference') res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) res_metadata.is_dirty = False res_metadata.save() res_metadata.update_element('relation', element_1.id, type='isHostedBy', value='update host') res_metadata.refresh_from_db() self.assertFalse(res_metadata.is_dirty) res_metadata.update_element('relation', element_2.id, type='cites', value='update reference') res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) res_metadata.is_dirty = False res_metadata.save() res_metadata.delete_element('relation', element_2.id) res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) # update creator res_metadata.is_dirty = False res_metadata.save() element = res_metadata.creators.all().first() res_metadata.update_element('creator', element.id, name='update name') res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) # create/update/delete contributor res_metadata.is_dirty = False res_metadata.save() element = res_metadata.create_element('contributor', name='new name') res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) res_metadata.is_dirty = False res_metadata.save() res_metadata.update_element('contributor', element.id, name='update name') res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) res_metadata.is_dirty = False res_metadata.save() res_metadata.delete_element('contributor', element.id) res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) # update variable res_metadata.is_dirty = False res_metadata.save() element = res_metadata.variables.all().first() res_metadata.update_element('variable', element.id, name=element.name, unit='update unit', type=element.type, shape=element.shape, missing_value='1', descriptive_name='update long name', method='update method') res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty) # check file content update request url = reverse("update_netcdf_resfile", kwargs={'resource_id': self.resNetcdf.short_id}) request = self.factory.post(url) request.user = self.john self._set_request_message_attributes(request) request.META['HTTP_REFERER'] = "/some_url/" response = update_netcdf_file(request, resource_id=self.resNetcdf.short_id) self.assertEqual(response.status_code, status.HTTP_302_FOUND) # check file update content nc_dump_res_file = None for f in self.resNetcdf.files.all(): if f.extension == ".txt": nc_dump_res_file = f break self.assertNotEqual(nc_dump_res_file, None) self.assertIn('title = "new title"', nc_dump_res_file.resource_file.read()) res_metadata.refresh_from_db() self.assertFalse(res_metadata.is_dirty) # test extra metadata update for setting flag self.assertEqual(self.resNetcdf.extra_metadata, {}) url_params = {'shortkey': self.resNetcdf.short_id} post_data = {'key1': 'key-1', 'value1': 'value-1'} url = reverse('update_key_value_metadata', kwargs=url_params) request = self.factory.post(url, data=post_data) request.user = self.john # make it a ajax request request.META['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest' self._set_request_message_attributes(request) response = update_key_value_metadata(request, shortkey=self.resNetcdf.short_id) self.assertEqual(response.status_code, status.HTTP_200_OK) res_metadata.refresh_from_db() self.assertTrue(res_metadata.is_dirty)
def test_metadata_in_user_zone(self): # only do federation testing when REMOTE_USE_IRODS is True and irods docker containers # are set up properly super(TestNetcdfMetaData, self).assert_federated_irods_available() # test metadata extraction with resource creation with nc file coming from user zone space fed_test_file_full_path = '/{zone}/home/{username}/{fname}'.format( zone=settings.HS_USER_IRODS_ZONE, username=self.user.username, fname=self.netcdf_file_name) res_upload_files = [] _, _, metadata, fed_res_path = utils.resource_pre_create_actions( resource_type='NetcdfResource', resource_title='Snow water equivalent estimation at TWDEF site from Oct 2009 to June ' '2010', page_redirect_url_key=None, files=res_upload_files, source_names=[fed_test_file_full_path]) self.resNetcdf = hydroshare.create_resource( 'NetcdfResource', self.user, 'Snow water equivalent estimation at TWDEF site from Oct 2009 to June 2010', files=res_upload_files, source_names=[fed_test_file_full_path], fed_res_path=fed_res_path[0] if len(fed_res_path) == 1 else '', move=False, metadata=metadata) utils.resource_post_create_actions(self.resNetcdf, self.user, metadata) super(TestNetcdfMetaData, self).netcdf_metadata_extraction() # test metadata is deleted after content file is deleted in user zone space # there should be 2 content files at this point self.assertEqual(self.resNetcdf.files.all().count(), 2) # there should be 2 format elements self.assertEqual(self.resNetcdf.metadata.formats.all().count(), 2) # delete content file now hydroshare.delete_resource_file(self.resNetcdf.short_id, self.netcdf_file_name, self.user) # there should no content file self.assertEqual(self.resNetcdf.files.all().count(), 0) # there should be a title element self.assertNotEqual(self.resNetcdf.metadata.title, None) # there should be abstract element self.assertNotEqual(self.resNetcdf.metadata.description, None) # there should be 1 creator element (based on the extracted metadata) self.assertEqual(self.resNetcdf.metadata.creators.all().count(), 1) # there should be 1 contributor element self.assertEqual(self.resNetcdf.metadata.contributors.all().count(), 1) # there should be no coverage element self.assertEqual(self.resNetcdf.metadata.coverages.all().count(), 0) # there should be no format element self.assertEqual(self.resNetcdf.metadata.formats.all().count(), 0) # there should be subject element self.assertNotEqual(self.resNetcdf.metadata.subjects.all().count(), 0) # testing extended metadata elements self.assertEqual(self.resNetcdf.metadata.ori_coverage.all().count(), 0) self.assertEqual(self.resNetcdf.metadata.variables.all().count(), 0) # test metadata extraction with a valid nc file being added coming from user zone space res_add_files = [] utils.resource_file_add_pre_process(resource=self.resNetcdf, files=res_add_files, user=self.user, source_names=[fed_test_file_full_path]) utils.resource_file_add_process(resource=self.resNetcdf, files=res_add_files, user=self.user, source_names=[fed_test_file_full_path]) super(TestNetcdfMetaData, self).netcdf_metadata_extraction() self.assertEqual(CoreMetaData.objects.all().count(), 1) # delete resource hydroshare.delete_resource(self.resNetcdf.short_id) self.assertEqual(CoreMetaData.objects.all().count(), 0)