From ef025e41b58b17d7e9827092ca07598ad87cf59b Mon Sep 17 00:00:00 2001
From: Branson Stephens <branson.stephens@ligo.org>
Date: Tue, 4 Nov 2014 15:12:43 -0600
Subject: [PATCH] Added tests of eel creation for public, lvem, and internal
 users. EEL access is based on event access.

---
 .../fixtures/test_perms/gracedb_emgroup.json  | 163 ++++++++++++++++++
 .../commands/create_test_perms_fixtures.py    |   1 +
 gracedb/test/test_perms.py                    |  68 +++++++-
 3 files changed, 231 insertions(+), 1 deletion(-)
 create mode 100644 gracedb/fixtures/test_perms/gracedb_emgroup.json

diff --git a/gracedb/fixtures/test_perms/gracedb_emgroup.json b/gracedb/fixtures/test_perms/gracedb_emgroup.json
new file mode 100644
index 000000000..bb879b7a5
--- /dev/null
+++ b/gracedb/fixtures/test_perms/gracedb_emgroup.json
@@ -0,0 +1,163 @@
+[
+{
+    "pk": 1, 
+    "model": "gracedb.emgroup", 
+    "fields": {
+        "name": "Apertif-EVN"
+    }
+},
+{
+    "pk": 2, 
+    "model": "gracedb.emgroup", 
+    "fields": {
+        "name": "ARI LJMU"
+    }
+},
+{
+    "pk": 3, 
+    "model": "gracedb.emgroup", 
+    "fields": {
+        "name": "ATLAS"
+    }
+},
+{
+    "pk": 4, 
+    "model": "gracedb.emgroup", 
+    "fields": {
+        "name": "CRTS"
+    }
+},
+{
+    "pk": 5, 
+    "model": "gracedb.emgroup", 
+    "fields": {
+        "name": "FIGARO"
+    }
+},
+{
+    "pk": 6, 
+    "model": "gracedb.emgroup", 
+    "fields": {
+        "name": "FRBSG"
+    }
+},
+{
+    "pk": 7, 
+    "model": "gracedb.emgroup", 
+    "fields": {
+        "name": "GOTO"
+    }
+},
+{
+    "pk": 8, 
+    "model": "gracedb.emgroup", 
+    "fields": {
+        "name": "GWU LSC Group"
+    }
+},
+{
+    "pk": 9, 
+    "model": "gracedb.emgroup", 
+    "fields": {
+        "name": "H.E.S.S."
+    }
+},
+{
+    "pk": 10, 
+    "model": "gracedb.emgroup", 
+    "fields": {
+        "name": "HXMT"
+    }
+},
+{
+    "pk": 11, 
+    "model": "gracedb.emgroup", 
+    "fields": {
+        "name": "INAF"
+    }
+},
+{
+    "pk": 12, 
+    "model": "gracedb.emgroup", 
+    "fields": {
+        "name": "IUCAA"
+    }
+},
+{
+    "pk": 13, 
+    "model": "gracedb.emgroup", 
+    "fields": {
+        "name": "LCOGT"
+    }
+},
+{
+    "pk": 14, 
+    "model": "gracedb.emgroup", 
+    "fields": {
+        "name": "LV-EM Followup"
+    }
+},
+{
+    "pk": 15, 
+    "model": "gracedb.emgroup", 
+    "fields": {
+        "name": "MAGIC"
+    }
+},
+{
+    "pk": 16, 
+    "model": "gracedb.emgroup", 
+    "fields": {
+        "name": "Pan-STARRS"
+    }
+},
+{
+    "pk": 17, 
+    "model": "gracedb.emgroup", 
+    "fields": {
+        "name": "PIRATE"
+    }
+},
+{
+    "pk": 18, 
+    "model": "gracedb.emgroup", 
+    "fields": {
+        "name": "RoboPol"
+    }
+},
+{
+    "pk": 19, 
+    "model": "gracedb.emgroup", 
+    "fields": {
+        "name": "Swift"
+    }
+},
+{
+    "pk": 20, 
+    "model": "gracedb.emgroup", 
+    "fields": {
+        "name": "TOROS"
+    }
+},
+{
+    "pk": 21, 
+    "model": "gracedb.emgroup", 
+    "fields": {
+        "name": "VERITAS"
+    }
+},
+{
+    "pk": 22, 
+    "model": "gracedb.emgroup", 
+    "fields": {
+        "name": "ZTF"
+    }
+},
+{
+    "pk": 23, 
+    "model": "gracedb.emgroup", 
+    "fields": {
+        "name": "Test"
+    }
+}
+]
diff --git a/gracedb/management/commands/create_test_perms_fixtures.py b/gracedb/management/commands/create_test_perms_fixtures.py
index 06c2ead20..08f6ef283 100644
--- a/gracedb/management/commands/create_test_perms_fixtures.py
+++ b/gracedb/management/commands/create_test_perms_fixtures.py
@@ -27,6 +27,7 @@ DUMP_ALL_ROWS_LIST = [
     'gracedb.Pipeline',
     'gracedb.Search',
     'gracedb.Label',
+    'gracedb.EMGroup',
 ]
 
 # Our illustrious test users:
diff --git a/gracedb/test/test_perms.py b/gracedb/test/test_perms.py
index 0ef3eced9..d9493a651 100644
--- a/gracedb/test/test_perms.py
+++ b/gracedb/test/test_perms.py
@@ -108,6 +108,7 @@ class TestPerms(TestCase):
         'test_perms/gracedb_pipeline.json',
         'test_perms/gracedb_search.json',
         'test_perms/gracedb_label.json',
+        'test_perms/gracedb_emgroup.json',
         'test_perms/gracedb_event.json',
         'test_perms/gracedb_grbevent.json',
         'test_perms/gracedb_multiburstevent.json',
@@ -336,7 +337,8 @@ class TestPerms(TestCase):
     #   POST dict keys: displayName
     #   test DELETE?
     # - Labelling
-    #   no way to do this through the web interface
+    #   but no way to do this through the web interface
+    # - EEL creation
 
     # Test annotation of events user.
     def test_public_log_creation(self):
@@ -361,6 +363,23 @@ class TestPerms(TestCase):
             REMOTE_USER=get_user('public').username)
         self.assertEqual(response.status_code, 403)
 
+    def test_public_eel_creation(self):
+        # Choose any event. The public coinc one will do.
+        event = get_public_coinc_event()
+        url = '/events/%s/embblog/' % event.graceid()
+        # Test, em.gamma, FO, TE, instrument='Test', comment='Test'
+        input_dict = {
+            'group'      : 'Test',
+            'waveband'   : 'em.gamma',
+            'eel_status' : 'FO',
+            'obs_status' : 'TE',
+            'comment'    : 'Test',
+            'instrument' : 'Test',
+        }
+        response = self.client.post(url,input_dict,
+            REMOTE_USER=get_user('public').username)
+        self.assertEqual(response.status_code, 403)
+
     # Test annotation of events by LV-EM users
     def test_lvem_log_creation(self):
         # Should be able to annotate the public event, but no others
@@ -392,6 +411,25 @@ class TestPerms(TestCase):
             else:
                 self.assertEqual(response.status_code, 403)
 
+    def test_lvem_eel_creation(self):
+        public_coinc_event = get_public_coinc_event()
+        for e in CoincInspiralEvent.objects.all():
+            url = '/events/%s/embblog/' % e.graceid()
+            input_dict = {
+                'group'      : 'Test',
+                'waveband'   : 'em.gamma',
+                'eel_status' : 'FO',
+                'obs_status' : 'TE',
+                'comment'    : 'Test',
+                'instrument' : 'Test',
+            }
+            response = self.client.post(url,input_dict,
+                REMOTE_USER=get_user('lvem').username)
+            if e.id==public_coinc_event.id:
+                self.assertEqual(response.status_code, 302)
+            else:                    
+                self.assertEqual(response.status_code, 403)
+
     # Test annotation of events by LIGO users
     def test_internal_log_creation(self):
         for e in CoincInspiralEvent.objects.all():
@@ -413,6 +451,21 @@ class TestPerms(TestCase):
                 REMOTE_USER=get_user('internal').username)
             self.assertEqual(response.status_code, 302)
 
+    def test_internal_eel_creation(self):
+        for e in CoincInspiralEvent.objects.all():
+            url = '/events/%s/embblog/' % e.graceid()
+            input_dict = {
+                'group'      : 'Test',
+                'waveband'   : 'em.gamma',
+                'eel_status' : 'FO',
+                'obs_status' : 'TE',
+                'comment'    : 'Test',
+                'instrument' : 'Test',
+            }
+            response = self.client.post(url,input_dict,
+                REMOTE_USER=get_user('internal').username)
+            self.assertEqual(response.status_code, 302)
+
     #-------------------------------------------------------------------------------
     #-------------------------------------------------------------------------------
     # Tests of event creation/replacement
@@ -436,6 +489,19 @@ class TestPerms(TestCase):
             response = request_event_creation(self.client, user.username, 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)
+        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)
+        res = json.loads(response.content)
+        # You should get exactly one record.
+        self.assertEqual(res['records'],1)
+
 #    # Actually, you can only replace an event that you yourself created.
 #    # Thus, not sure if we really need this.
 #    def test_event_replacement(self):
-- 
GitLab