author_contact, __ = Contact.objects.get_or_create(user=user, defaults={"name": user.username }) logger.debug('Creating poc and author records for %s', poc_contact) saved_layer.poc = poc_contact saved_layer.metadata_author = author_contact saved_layer.save_to_geonetwork() # Step 11. Set default permissions on the newly created layer # FIXME: Do this as part of the post_save hook logger.info('>>> Step 11. Setting default permissions for [%s]', name) if permissions is not None: from geonode.maps.views import set_layer_permissions set_layer_permissions(saved_layer, permissions) # Step 12. Insert the payment options logger.info('>>> Step 12. Setting payment options [%s]', name) if permissions is not None: payment_options = [n for (n, p) in permissions['payment_options']] if payment_options is not None: from anzsm.payment.utils import setPaymentOptions setPaymentOptions(saved_layer, permissions) # Step 13. Verify the layer was saved correctly and clean up if needed logger.info('>>> Step 13. Verifying the layer [%s] was created correctly' % name) # Verify the object was saved to the Django database try:
author_contact, __ = Contact.objects.get_or_create(user=user, defaults={"name": user.username }) logger.debug('Creating poc and author records for %s', poc_contact) saved_layer.poc = poc_contact saved_layer.metadata_author = author_contact saved_layer.save_to_geonetwork() # Step 11. Set default permissions on the newly created layer # FIXME: Do this as part of the post_save hook logger.info('>>> Step 11. Setting default permissions for [%s]', name) if permissions is not None: from geonode.maps.views import set_layer_permissions set_layer_permissions(saved_layer, permissions, True) # Step 12. Verify the layer was saved correctly and clean up if needed logger.info('>>> Step 12. Verifying the layer [%s] was created ' 'correctly' % name) # Verify the object was saved to the Django database try: Layer.objects.get(name=name) except Layer.DoesNotExist, e: msg = ((_('There was a problem saving the layer ') + '%s ' + _('Error is: ') + '%s') % (name, str(e))) logger.exception(msg) logger.debug('Attempting to clean up after failed save for layer ' '[%s]', name) # Since the layer creation was not successful, we need to clean up
author_contact, __ = Contact.objects.get_or_create(user=user, defaults={"name": user.username }) logger.debug('Creating poc and author records for %s', poc_contact) saved_layer.poc = poc_contact saved_layer.metadata_author = author_contact saved_layer.save_to_geonetwork() # Step 11. Set default permissions on the newly created layer # FIXME: Do this as part of the post_save hook logger.info('>>> Step 11. Setting default permissions for [%s]', name) if permissions is not None: from geonode.maps.views import set_layer_permissions set_layer_permissions(saved_layer, permissions) # Step 12. Verify the layer was saved correctly and clean up if needed logger.info('>>> Step 12. Verifying the layer [%s] was created ' 'correctly' % name) # Verify the object was saved to the Django database try: Layer.objects.get(name=name) except Layer.DoesNotExist, e: msg = ('There was a problem saving the layer %s to GeoNetwork/Django. ' 'Error is: %s' % (layer, str(e))) logger.exception(msg) logger.debug('Attempting to clean up after failed save for layer ' '[%s]', name) # Since the layer creation was not successful, we need to clean up
def test_metadata_search(self): # Test Empty Search [returns all results, should match len(Layer.objects.all())+5] # +5 is for the 5 'default' records in GeoNetwork test_url = "%sdata/search/api/?q=%s&start=%d&limit=%d" % (settings.SITEURL, "", 0, 10) results = json.loads(get_web_page(test_url)) self.assertEquals(int(results["total"]), Layer.objects.count()) # Test n0ch@nc3 Search (returns no results) test_url = "%sdata/search/api/?q=%s&start=%d&limit=%d" % (settings.SITEURL, "n0ch@nc3", 0, 10) results = json.loads(get_web_page(test_url)) self.assertEquals(int(results["total"]), 0) # Test Keyword Search (various search terms) test_url = "%sdata/search/api/?q=%s&start=%d&limit=%d" % (settings.SITEURL, "NIC", 0, 10) results = json.loads(get_web_page(test_url)) # self.assertEquals(int(results["total"]), 3) # This Section should be greatly expanded upon after uploading several # Test layers. Issues found with GeoNetwork search should be 'documented' # here with a Test Case # Test BBOX Search (various bbox) # - Test with an empty query string and Global BBOX and validate that total is correct test_url = "%sdata/search/api/?q=%s&start=%d&limit=%d&bbox=%s" % ( settings.SITEURL, "", 0, 10, "-180,-90,180,90", ) results = json.loads(get_web_page(test_url)) self.assertEquals(int(results["total"]), Layer.objects.count()) # - Test with a specific query string and a bbox that is disjoint from its results # test_url = "%sdata/search/api/?q=%s&start=%d&limit=%d&bbox=%s" % (settings.SITEURL, "NIC", 0, 10, "0,-90,180,90") # results = json.loads(get_web_page(test_url)) # self.assertEquals(int(results["total"]), 0) # - Many more Tests required # Test start/limit params (do in unit test?) # Test complex/compound Search # Test Permissions applied to search from ACLs # TODO Write a method to accept a perm_spec and query params and test that query results are returned respecting the perm_spec # - Test with Anonymous User perm_spec = {"anonymous": "_none", "authenticated": "_none", "users": [["admin", "layer_readwrite"]]} for layer in Layer.objects.all(): set_layer_permissions(layer, perm_spec) test_url = "%sdata/search/api/?q=%s&start=%d&limit=%d" % (settings.SITEURL, "", 0, 10) results = json.loads(get_web_page(test_url)) for layer in results["rows"]: if layer["_local"] == False: # Ignore non-local layers pass else: self.assertEquals(layer["_permissions"]["view"], False) self.assertEquals(layer["_permissions"]["change"], False) self.assertEquals(layer["_permissions"]["delete"], False) self.assertEquals(layer["_permissions"]["change_permissions"], False) # - Test with Authenticated User results = json.loads(get_web_page(test_url, username="******", password="******", login_url=LOGIN_URL)) for layer in results["rows"]: if layer["_local"] == False: # Ignore non-local layers pass else: self.assertEquals(layer["_permissions"]["view"], True) self.assertEquals(layer["_permissions"]["change"], True) self.assertEquals(layer["_permissions"]["delete"], True) self.assertEquals(layer["_permissions"]["change_permissions"], True)