diff --git a/gracedb/test/test_perms.py b/gracedb/test/test_perms.py index 71fc35e4ec7987044eb0d6dcb2142be0f2842641..136e77437e496bf89fc8955072ec7e72ad766224 100644 --- a/gracedb/test/test_perms.py +++ b/gracedb/test/test_perms.py @@ -70,11 +70,19 @@ def get_internal_coinc_event(): break return e +def get_isMemberOf(user): + return ';'.join([g.name for g in user.groups.all()]) + +def extra_args(user): + if not user: + return {} + return {'REMOTE_USER': user.username, 'isMemberOf': get_isMemberOf(user) } + # Given a Django test client, attempt to create a CBC, gstlal, # LowMass event. EVENT_FILE = os.path.join(settings.ROOT_PATH,'gracedb/fixtures/test_perms/cbc-lm.xml') -def request_event_creation(client, username, test=False): +def request_event_creation(client, user, test=False): event_file = open(EVENT_FILE,'r') url = '/events/create/' group = 'Test' if test else 'CBC' @@ -84,7 +92,7 @@ def request_event_creation(client, username, test=False): 'search' : 'LowMass', 'eventFile' : event_file, } - return client.post(url, input_dict, REMOTE_USER=username) + return client.post(url, input_dict, **extra_args(user)) # A map between test users and pipelines. PIPELINE_USER_MAP = { @@ -264,7 +272,7 @@ class TestPerms(TestCase): pub_coinc_event = get_public_coinc_event() for e in CoincInspiralEvent.objects.all(): url = '/events/view/%s' % e.graceid() - response = self.client.get(url,REMOTE_USER=get_user('public').username) + response = self.client.get(url,**extra_args(get_user('public'))) if e.graceid()==pub_coinc_event.graceid(): self.assertEqual(response.status_code, 200) else: @@ -276,7 +284,7 @@ class TestPerms(TestCase): internal_coinc_event = get_internal_coinc_event() for e in CoincInspiralEvent.objects.all(): url = '/events/view/%s' % e.graceid() - response = self.client.get(url,REMOTE_USER=get_user('lvem').username) + response = self.client.get(url,**extra_args(get_user('lvem'))) if e.graceid()==internal_coinc_event.graceid(): self.assertEqual(response.status_code, 403) else: @@ -286,7 +294,7 @@ class TestPerms(TestCase): def test_internal_event_access(self): for e in CoincInspiralEvent.objects.all(): url = '/events/view/%s' % e.graceid() - response = self.client.get(url,REMOTE_USER=get_user('internal').username) + response = self.client.get(url,**extra_args(get_user('internal'))) self.assertEqual(response.status_code, 200) # Test search by public users @@ -294,7 +302,7 @@ class TestPerms(TestCase): pub_coinc_event = get_public_coinc_event() query = 'Test LowMass' url = '/events/search/flex?%s' % urlencode({'query': query}) - response = self.client.get(url, REMOTE_USER=get_user('public').username) + response = self.client.get(url,**extra_args(get_user('public'))) res = json.loads(response.content) # You should only get one event ... self.assertEqual(res['records'],1) @@ -306,7 +314,7 @@ class TestPerms(TestCase): internal_coinc_event = get_internal_coinc_event() query = 'Test LowMass' url = '/events/search/flex?%s' % urlencode({'query': query}) - response = self.client.get(url, REMOTE_USER=get_user('lvem').username) + response = self.client.get(url,**extra_args(get_user('lvem'))) res = json.loads(response.content) # You should get two events ... self.assertEqual(res['records'],2) @@ -318,7 +326,7 @@ class TestPerms(TestCase): def test_internal_search(self): query = 'Test LowMass' url = '/events/search/flex?%s' % urlencode({'query': query}) - response = self.client.get(url, REMOTE_USER=get_user('internal').username) + response = self.client.get(url,**extra_args(get_user('internal'))) res = json.loads(response.content) # You should get all three events. self.assertEqual(res['records'],3) @@ -350,8 +358,7 @@ class TestPerms(TestCase): 'comment' : 'This is a test.', 'tagname' : 'test_tag', } - response = self.client.post(url,input_dict, - REMOTE_USER=get_user('public').username) + response = self.client.post(url,input_dict,**extra_args(get_user('public'))) self.assertEqual(response.status_code, 403) def test_public_log_tagging(self): @@ -360,8 +367,7 @@ class TestPerms(TestCase): # Try to add 'test_tag' to the first log entry. url = '/events/%s/log/1/tag/test_tag' % event.graceid() input_dict = {'displayName' : None,} - response = self.client.post(url, input_dict, - REMOTE_USER=get_user('public').username) + response = self.client.post(url, input_dict,**extra_args(get_user('public'))) self.assertEqual(response.status_code, 403) def test_public_eel_creation(self): @@ -377,8 +383,7 @@ class TestPerms(TestCase): 'comment' : 'Test', 'instrument' : 'Test', } - response = self.client.post(url,input_dict, - REMOTE_USER=get_user('public').username) + response = self.client.post(url,input_dict,**extra_args(get_user('pubic'))) self.assertEqual(response.status_code, 403) # Test annotation of events by LV-EM users @@ -391,8 +396,7 @@ class TestPerms(TestCase): 'comment' : 'This is a test.', 'tagname' : 'test_tag', } - response = self.client.post(url,input_dict, - REMOTE_USER=get_user('lvem').username) + response = self.client.post(url,input_dict,**extra_args(get_user('lvem'))) if e.id==public_coinc_event.id: # Not an AJAX call, so redirects to event page if successful. self.assertEqual(response.status_code, 302) @@ -405,8 +409,7 @@ class TestPerms(TestCase): # Try to add 'test_tag' to the first log entry. url = '/events/%s/log/1/tag/test_tag' % e.graceid() input_dict = {'displayName' : None,} - response = self.client.post(url, input_dict, - REMOTE_USER=get_user('lvem').username) + response = self.client.post(url, input_dict,**extra_args(get_user('lvem'))) if e.id==public_coinc_event.id: self.assertEqual(response.status_code, 302) else: @@ -424,8 +427,7 @@ class TestPerms(TestCase): 'comment' : 'Test', 'instrument' : 'Test', } - response = self.client.post(url,input_dict, - REMOTE_USER=get_user('lvem').username) + response = self.client.post(url,input_dict,**extra_args(get_user('lvem'))) if e.id==public_coinc_event.id: self.assertEqual(response.status_code, 302) else: @@ -439,8 +441,7 @@ class TestPerms(TestCase): 'comment' : 'This is a test.', 'tagname' : 'test_tag', } - response = self.client.post(url,input_dict, - REMOTE_USER=get_user('internal').username) + response = self.client.post(url,input_dict,**extra_args(get_user('internal'))) self.assertEqual(response.status_code, 302) def test_internal_log_tagging(self): @@ -448,8 +449,7 @@ class TestPerms(TestCase): # Try to add 'test_tag' to the first log entry. url = '/events/%s/log/1/tag/test_tag' % e.graceid() input_dict = {'displayName' : None,} - response = self.client.post(url, input_dict, - REMOTE_USER=get_user('internal').username) + response = self.client.post(url, input_dict,**extra_args(get_user('internal'))) self.assertEqual(response.status_code, 302) def test_internal_eel_creation(self): @@ -463,8 +463,7 @@ class TestPerms(TestCase): 'comment' : 'Test', 'instrument' : 'Test', } - response = self.client.post(url,input_dict, - REMOTE_USER=get_user('internal').username) + response = self.client.post(url,input_dict,**extra_args(get_user('internal'))) self.assertEqual(response.status_code, 302) #------------------------------------------------------------------------------- @@ -477,7 +476,7 @@ class TestPerms(TestCase): def test_cbc_event_creation(self): gstlal_submitter = get_user('gstlal_submitter') for user in User.objects.all(): - response = request_event_creation(self.client, user.username) + response = request_event_creation(self.client, user) if user.id==gstlal_submitter.id or user.is_superuser: self.assertEqual(response.status_code, 302) else: @@ -487,18 +486,18 @@ class TestPerms(TestCase): # Anybody should be able to create a test event. def test_test_event_creation(self): for user in User.objects.all(): - response = request_event_creation(self.client, user.username, test=True) + response = request_event_creation(self.client, user, test=True) self.assertEqual(response.status_code, 302) # We want a test of the availability of a newly created event via search. @override_settings(GRACEDB_DATA_DIR=TMP_DATA_DIR) def test_search_on_new_event(self): gstlal_submitter = get_user('gstlal_submitter') - response = request_event_creation(self.client, gstlal_submitter.username) + response = request_event_creation(self.client, gstlal_submitter) redirect_url = response['Location'] graceid = redirect_url.split('/')[-1] url = '/events/search/flex?%s' % urlencode({'query': graceid}) - response = self.client.get(url, REMOTE_USER=get_user('internal').username) + response = self.client.get(url,**extra_args(get_user('internal'))) res = json.loads(response.content) # You should get exactly one record. self.assertEqual(res['records'],1) @@ -521,7 +520,7 @@ class TestPerms(TestCase): # try POST to permission creation URL url = '/events/%s/perms/' % event.graceid() input_dict = {'action': 'expose', 'group_name': 'gw-astronomy:LV-EM'} - response = self.client.post(url, input_dict, REMOTE_USER=user.username) + response = self.client.post(url, input_dict,**extra_args(user)) groups = [g.name for g in user.groups.all()] if not 'executives' in groups and not user.is_superuser: self.assertEqual(response.status_code, 403)