From a6e6586f48dec6570bb1165f3ac9c6fdad341a29 Mon Sep 17 00:00:00 2001
From: Branson Stephens <branson.stephens@ligo.org>
Date: Thu, 9 Oct 2014 14:48:36 -0500
Subject: [PATCH] Changes to test fixtures/cases for the new event creation
 perms.

---
 gracedb/fixtures/test_perms/auth_user.json    | 20 ++---
 .../fixtures/test_perms/gracedb_event.json    | 36 ++++----
 .../fixtures/test_perms/gracedb_pipeline.json | 86 +++++++++++++++++++
 .../fixtures/test_perms/gracedb_search.json   | 34 ++++++++
 .../commands/create_test_perms_fixtures.py    |  7 +-
 gracedb/test/test_perms.py                    | 32 ++++++-
 6 files changed, 181 insertions(+), 34 deletions(-)
 create mode 100644 gracedb/fixtures/test_perms/gracedb_pipeline.json
 create mode 100644 gracedb/fixtures/test_perms/gracedb_search.json

diff --git a/gracedb/fixtures/test_perms/auth_user.json b/gracedb/fixtures/test_perms/auth_user.json
index ae865bd9b..f722b3ce9 100644
--- a/gracedb/fixtures/test_perms/auth_user.json
+++ b/gracedb/fixtures/test_perms/auth_user.json
@@ -62,7 +62,7 @@
     },
     {
         "fields": {
-            "date_joined": "2014-09-19T15:41:22",
+            "date_joined": "2014-10-09T14:19:39",
             "email": "john.q.public@example.com",
             "first_name": "John",
             "groups": [
@@ -71,7 +71,7 @@
             "is_active": true,
             "is_staff": false,
             "is_superuser": false,
-            "last_login": "2014-09-19T15:41:22",
+            "last_login": "2014-10-09T14:19:39",
             "last_name": "Public",
             "password": "X",
             "user_permissions": [],
@@ -82,7 +82,7 @@
     },
     {
         "fields": {
-            "date_joined": "2014-09-19T15:41:22",
+            "date_joined": "2014-10-09T14:19:39",
             "email": "claudius.ptolemy@alexu.edu.eg",
             "first_name": "Claudius",
             "groups": [
@@ -91,7 +91,7 @@
             "is_active": true,
             "is_staff": false,
             "is_superuser": false,
-            "last_login": "2014-09-19T15:41:22",
+            "last_login": "2014-10-09T14:19:39",
             "last_name": "Ptolemy",
             "password": "X",
             "user_permissions": [],
@@ -102,7 +102,7 @@
     },
     {
         "fields": {
-            "date_joined": "2014-09-19T15:41:22",
+            "date_joined": "2014-10-09T14:19:39",
             "email": "albert.einstein@ligo.org",
             "first_name": "Albert",
             "groups": [
@@ -112,7 +112,7 @@
             "is_active": true,
             "is_staff": false,
             "is_superuser": false,
-            "last_login": "2014-09-19T15:41:22",
+            "last_login": "2014-10-09T14:19:39",
             "last_name": "Einstein",
             "password": "X",
             "user_permissions": [],
@@ -123,7 +123,7 @@
     },
     {
         "fields": {
-            "date_joined": "2014-09-19T15:41:22",
+            "date_joined": "2014-10-09T14:19:39",
             "email": "spokesy.mcspokesperson@ligo.org",
             "first_name": "Spokesy",
             "groups": [
@@ -133,7 +133,7 @@
             "is_active": true,
             "is_staff": false,
             "is_superuser": false,
-            "last_login": "2014-09-19T15:41:22",
+            "last_login": "2014-10-09T14:19:39",
             "last_name": "McSpokesperson",
             "password": "X",
             "user_permissions": [],
@@ -144,7 +144,7 @@
     },
     {
         "fields": {
-            "date_joined": "2014-09-19T15:41:22",
+            "date_joined": "2014-10-09T14:19:39",
             "email": "gracedb.maintainer@ligo.org",
             "first_name": "Gracedb",
             "groups": [
@@ -154,7 +154,7 @@
             "is_active": true,
             "is_staff": true,
             "is_superuser": true,
-            "last_login": "2014-09-19T15:41:22",
+            "last_login": "2014-10-09T14:19:39",
             "last_name": "Maintainer",
             "password": "X",
             "user_permissions": [],
diff --git a/gracedb/fixtures/test_perms/gracedb_event.json b/gracedb/fixtures/test_perms/gracedb_event.json
index 4b0f25cf7..122995f4f 100644
--- a/gracedb/fixtures/test_perms/gracedb_event.json
+++ b/gracedb/fixtures/test_perms/gracedb_event.json
@@ -4,15 +4,15 @@
     "model": "gracedb.event", 
     "fields": {
         "gpstime": 1078505718, 
+        "pipeline": 3, 
         "group": 5, 
-        "uid": "", 
         "created": "2014-03-10T11:55:49", 
         "far": 9.99754187903519e-06, 
         "instruments": "H1,L1", 
+        "search": 2, 
         "perms": "[\"executives_can_change\", \"executives_can_view\", \"Communities:LSCVirgoLIGOGroupMembers_can_change\", \"Communities:LSCVirgoLIGOGroupMembers_can_view\"]", 
         "nevents": 2, 
         "submitter": 465, 
-        "analysisType": "LM", 
         "likelihood": 34871.9041575029
     }
 },
@@ -21,15 +21,15 @@
     "model": "gracedb.event", 
     "fields": {
         "gpstime": 1078673637, 
+        "pipeline": 3, 
         "group": 5, 
-        "uid": "", 
         "created": "2014-03-12T10:34:21", 
         "far": 2.7348245243325e-12, 
         "instruments": "H1,V1", 
+        "search": 2, 
         "perms": "[\"executives_can_change\", \"executives_can_view\", \"Communities:LSCVirgoLIGOGroupMembers_can_change\", \"Communities:LSCVirgoLIGOGroupMembers_can_view\"]", 
         "nevents": 2, 
         "submitter": 465, 
-        "analysisType": "LM", 
         "likelihood": 6.09169459963097e+26
     }
 },
@@ -38,15 +38,15 @@
     "model": "gracedb.event", 
     "fields": {
         "gpstime": 1078873849, 
+        "pipeline": 3, 
         "group": 5, 
-        "uid": "", 
         "created": "2014-03-14T18:11:13", 
         "far": 4.06806937667425e-05, 
         "instruments": "H1,V1", 
+        "search": 2, 
         "perms": "[\"executives_can_change\", \"executives_can_view\", \"Communities:LSCVirgoLIGOGroupMembers_can_change\", \"Communities:LSCVirgoLIGOGroupMembers_can_view\"]", 
         "nevents": 2, 
         "submitter": 465, 
-        "analysisType": "LM", 
         "likelihood": 2395.53466670113
     }
 },
@@ -55,15 +55,15 @@
     "model": "gracedb.event", 
     "fields": {
         "gpstime": 1087536143, 
+        "pipeline": 10, 
         "group": 6, 
-        "uid": "", 
         "created": "2014-06-23T00:22:05", 
         "far": null, 
         "instruments": "", 
+        "search": 4, 
         "perms": "[\"executives_can_change\", \"executives_can_view\", \"Communities:LSCVirgoLIGOGroupMembers_can_change\", \"Communities:LSCVirgoLIGOGroupMembers_can_view\"]", 
         "nevents": null, 
         "submitter": 460, 
-        "analysisType": "GRB", 
         "likelihood": null
     }
 },
@@ -72,15 +72,15 @@
     "model": "gracedb.event", 
     "fields": {
         "gpstime": 1087593277, 
+        "pipeline": 10, 
         "group": 6, 
-        "uid": "", 
         "created": "2014-06-23T16:15:17", 
         "far": null, 
         "instruments": "", 
+        "search": 4, 
         "perms": "[]", 
         "nevents": null, 
         "submitter": 460, 
-        "analysisType": "GRB", 
         "likelihood": null
     }
 },
@@ -89,15 +89,15 @@
     "model": "gracedb.event", 
     "fields": {
         "gpstime": 1087628477, 
+        "pipeline": 10, 
         "group": 6, 
-        "uid": "", 
         "created": "2014-06-24T02:00:58", 
         "far": null, 
         "instruments": "", 
+        "search": 4, 
         "perms": "[\"executives_can_change\", \"executives_can_view\", \"Communities:LSCVirgoLIGOGroupMembers_can_change\", \"Communities:LSCVirgoLIGOGroupMembers_can_view\"]", 
         "nevents": null, 
         "submitter": 460, 
-        "analysisType": "GRB", 
         "likelihood": null
     }
 },
@@ -106,15 +106,15 @@
     "model": "gracedb.event", 
     "fields": {
         "gpstime": 1042312876, 
+        "pipeline": 12, 
         "group": 5, 
-        "uid": "", 
         "created": "2014-08-07T17:02:44", 
         "far": 0.0, 
         "instruments": "H1,L1,V1", 
+        "search": 1, 
         "perms": "[\"executives_can_change\", \"executives_can_view\", \"Communities:LSCVirgoLIGOGroupMembers_can_change\", \"Communities:LSCVirgoLIGOGroupMembers_can_view\"]", 
         "nevents": null, 
         "submitter": 2404, 
-        "analysisType": "CWB", 
         "likelihood": 7934.0
     }
 },
@@ -123,15 +123,15 @@
     "model": "gracedb.event", 
     "fields": {
         "gpstime": 1042312876, 
+        "pipeline": 12, 
         "group": 5, 
-        "uid": "", 
         "created": "2014-08-07T17:04:32", 
         "far": 0.0, 
         "instruments": "H1,L1,V1", 
+        "search": 1, 
         "perms": "[\"executives_can_change\", \"executives_can_view\", \"Communities:LSCVirgoLIGOGroupMembers_can_change\", \"Communities:LSCVirgoLIGOGroupMembers_can_view\"]", 
         "nevents": null, 
         "submitter": 2404, 
-        "analysisType": "CWB", 
         "likelihood": 7934.0
     }
 },
@@ -140,15 +140,15 @@
     "model": "gracedb.event", 
     "fields": {
         "gpstime": 1042312876, 
+        "pipeline": 12, 
         "group": 5, 
-        "uid": "", 
         "created": "2014-08-07T17:13:29", 
         "far": 0.0, 
         "instruments": "H1,L1,V1", 
+        "search": 1, 
         "perms": "[\"executives_can_change\", \"executives_can_view\", \"Communities:LSCVirgoLIGOGroupMembers_can_change\", \"Communities:LSCVirgoLIGOGroupMembers_can_view\"]", 
         "nevents": null, 
         "submitter": 2404, 
-        "analysisType": "CWB", 
         "likelihood": 7934.0
     }
 }
diff --git a/gracedb/fixtures/test_perms/gracedb_pipeline.json b/gracedb/fixtures/test_perms/gracedb_pipeline.json
new file mode 100644
index 000000000..bd9c0adf5
--- /dev/null
+++ b/gracedb/fixtures/test_perms/gracedb_pipeline.json
@@ -0,0 +1,86 @@
+[
+{
+    "pk": 1, 
+    "model": "gracedb.pipeline", 
+    "fields": {
+        "name": "MBTAOnline"
+    }
+},
+{
+    "pk": 2, 
+    "model": "gracedb.pipeline", 
+    "fields": {
+        "name": "CWB2G"
+    }
+},
+{
+    "pk": 3, 
+    "model": "gracedb.pipeline", 
+    "fields": {
+        "name": "gstlal"
+    }
+},
+{
+    "pk": 4, 
+    "model": "gracedb.pipeline", 
+    "fields": {
+        "name": "gstlal-spiir"
+    }
+},
+{
+    "pk": 5, 
+    "model": "gracedb.pipeline", 
+    "fields": {
+        "name": "HardwareInjection"
+    }
+},
+{
+    "pk": 6, 
+    "model": "gracedb.pipeline", 
+    "fields": {
+        "name": "X"
+    }
+},
+{
+    "pk": 7, 
+    "model": "gracedb.pipeline", 
+    "fields": {
+        "name": "Q"
+    }
+},
+{
+    "pk": 8, 
+    "model": "gracedb.pipeline", 
+    "fields": {
+        "name": "Omega"
+    }
+},
+{
+    "pk": 9, 
+    "model": "gracedb.pipeline", 
+    "fields": {
+        "name": "Ringdown"
+    }
+},
+{
+    "pk": 10, 
+    "model": "gracedb.pipeline", 
+    "fields": {
+        "name": "Fermi"
+    }
+},
+{
+    "pk": 11, 
+    "model": "gracedb.pipeline", 
+    "fields": {
+        "name": "Swift"
+    }
+},
+{
+    "pk": 12, 
+    "model": "gracedb.pipeline", 
+    "fields": {
+        "name": "CWB"
+    }
+}
+]
diff --git a/gracedb/fixtures/test_perms/gracedb_search.json b/gracedb/fixtures/test_perms/gracedb_search.json
new file mode 100644
index 000000000..33e37d1e4
--- /dev/null
+++ b/gracedb/fixtures/test_perms/gracedb_search.json
@@ -0,0 +1,34 @@
+[
+{
+    "pk": 1, 
+    "model": "gracedb.search", 
+    "fields": {
+        "name": "AllSky", 
+        "description": "all-sky burst online"
+    }
+},
+{
+    "pk": 2, 
+    "model": "gracedb.search", 
+    "fields": {
+        "name": "LowMass", 
+        "description": ""
+    }
+},
+{
+    "pk": 3, 
+    "model": "gracedb.search", 
+    "fields": {
+        "name": "HighMass", 
+        "description": ""
+    }
+},
+{
+    "pk": 4, 
+    "model": "gracedb.search", 
+    "fields": {
+        "name": "GRB", 
+        "description": ""
+    }
+}
+]
diff --git a/gracedb/management/commands/create_test_perms_fixtures.py b/gracedb/management/commands/create_test_perms_fixtures.py
index f142adfb4..06c2ead20 100644
--- a/gracedb/management/commands/create_test_perms_fixtures.py
+++ b/gracedb/management/commands/create_test_perms_fixtures.py
@@ -4,7 +4,8 @@ from StringIO import StringIO
 from datetime import datetime
 
 from gracedb.models import GrbEvent, Tag, Event
-from gracedb.models import MultiBurstEvent 
+from gracedb.models import MultiBurstEvent
+from django.contrib.auth.models import Group
 #from gracedb.models import CoincInspiralEvent
 from gracedb.models import EventLog, Labelling, SingleInspiral
 
@@ -23,6 +24,8 @@ OUTPUT_DIR = os.path.join(settings.ROOT_PATH, 'gracedb/fixtures/test_perms')
 DUMP_ALL_ROWS_LIST = [
     'auth.Group',
     'gracedb.Group',
+    'gracedb.Pipeline',
+    'gracedb.Search',
     'gracedb.Label',
 ]
 
@@ -136,7 +139,7 @@ def get_user_field_dicts(user_info):
         # Transform the 'groups' field into a list of pks.
         group_pks = [g.id for g in Group.objects.filter(name__in=group_names)]
         user_dict['groups'] = group_pks
-
+        
         user_dict['user_permissions'] = []
         user_dict['password'] = 'X'
         now = datetime.now().isoformat().split('.')[0]
diff --git a/gracedb/test/test_perms.py b/gracedb/test/test_perms.py
index 55bfa1692..90f0534ee 100644
--- a/gracedb/test/test_perms.py
+++ b/gracedb/test/test_perms.py
@@ -3,9 +3,9 @@ from django.test.utils import override_settings
 
 from django.contrib.contenttypes.models import ContentType
 from django.contrib.auth.models import Permission, Group, User
-from guardian.models import GroupObjectPermission
+from guardian.models import GroupObjectPermission, UserObjectPermission
 from gracedb.models import Event, GrbEvent, CoincInspiralEvent
-from gracedb.models import MultiBurstEvent
+from gracedb.models import MultiBurstEvent, Pipeline
 
 from django.conf import settings
 
@@ -81,11 +81,18 @@ def request_event_creation(client, username, test=False):
     input_dict = {
         'group'      : group,
         'pipeline'   : 'gstlal',
-        'search'     : 'LM',
+        'search'     : 'LowMass',
         'eventFile'  : event_file,
     }
     return client.post(url, input_dict, REMOTE_USER=username)
 
+# A map between test users and pipelines.
+PIPELINE_USER_MAP = {
+    'gstlal': ['gst',],
+    'Fermi': ['gdb',],
+    'Swift': ['gdb',],
+}
+
 #-------------------------------------------------------------------------------
 #-------------------------------------------------------------------------------
 # Test Perms Class
@@ -98,6 +105,8 @@ class TestPerms(TestCase):
         'test_perms/auth_user.json',
         'test_perms/auth_group.json',
         'test_perms/gracedb_group.json',
+        'test_perms/gracedb_pipeline.json',
+        'test_perms/gracedb_search.json',
         'test_perms/gracedb_label.json',
         'test_perms/gracedb_event.json',
         'test_perms/gracedb_grbevent.json',
@@ -115,6 +124,10 @@ class TestPerms(TestCase):
             name = 'Can view %s' % model.__name__.lower()
             codename = 'view_%s' % model.__name__.lower()
             Permission.objects.create(codename=codename, name=name, content_type=content_type)
+
+        content_type = ContentType.objects.get(app_label='gracedb', model='pipeline')
+        Permission.objects.create(codename="populate_pipeline", name="Can populate pipeline",
+            content_type=content_type)            
             
         # Find the content type and permissions for the parent Event class.
         Event_ctype = ContentType.objects.get(model='Event')
@@ -191,6 +204,17 @@ class TestPerms(TestCase):
         for e in Event.objects.all():
             e.refresh_perms()
 
+        # Create user object permissions for pipeline population
+        content_type = ContentType.objects.get(app_label='gracedb',model='pipeline')
+        populate = Permission.objects.get(codename='populate_pipeline')
+
+        for p in Pipeline.objects.all():
+            if p.name in PIPELINE_USER_MAP.keys():
+                for username in PIPELINE_USER_MAP[p.name]:
+                    user = User.objects.get(username=username)
+                    UserObjectPermission.objects.create(permission=populate, user=user,
+                        object_pk=p.id, content_type=content_type)        
+
         # Lastly, let's create a temporary data dir. 
         if not os.path.isdir(TMP_DATA_DIR):
             os.mkdir(TMP_DATA_DIR)
@@ -393,7 +417,7 @@ class TestPerms(TestCase):
         gstlal_submitter = get_user('gstlal_submitter')
         for user in User.objects.all():
             response = request_event_creation(self.client, user.username)
-            if user.id==gstlal_submitter.id:
+            if user.id==gstlal_submitter.id or user.is_superuser:
                 self.assertEqual(response.status_code, 302)
             else:
                 self.assertEqual(response.status_code, 403)
-- 
GitLab