From a1b8582cc8b4a01ae40de5768733299643e33787 Mon Sep 17 00:00:00 2001
From: Tanner Prestegard <tanner.prestegard@ligo.org>
Date: Fri, 10 May 2019 13:39:26 -0500
Subject: [PATCH] Add unit tests for pipeline manage/enable/disable views

---
 gracedb/events/tests/test_views.py | 79 ++++++++++++++++++++++++++++++
 1 file changed, 79 insertions(+)
 create mode 100644 gracedb/events/tests/test_views.py

diff --git a/gracedb/events/tests/test_views.py b/gracedb/events/tests/test_views.py
new file mode 100644
index 000000000..fb8b6a373
--- /dev/null
+++ b/gracedb/events/tests/test_views.py
@@ -0,0 +1,79 @@
+try:
+    from unittest import mock
+except ImportError:  # python < 3
+    import mock
+import pytest
+
+from django.urls import reverse
+
+from events.models import Pipeline
+from events.views import PipelineManageView
+
+
+@pytest.mark.django_db
+def test_pipeline_manage_view(standard_user, client):
+    """Test pipeline manage view as various classes of non-advocate user"""
+    if not standard_user.is_anonymous:
+        client.force_login(standard_user)
+    response = client.get(reverse('manage-pipelines'))
+
+    # Expected response code by user
+    response_dict = {
+        'internal.user': 200,
+        '': 403,
+    }
+    assert response.status_code == response_dict[standard_user.username]
+
+    # Check context
+    if response == 200:
+        assert response.context['user_can_manage'] == False
+
+
+def test_pipeline_manage_view_as_advocate(em_advocate_user, client):
+    """Test pipeline manage view as EM advocate"""
+    client.force_login(em_advocate_user)
+    response = client.get(reverse('manage-pipelines'))
+
+    # Expected response code
+    assert response.status_code == 200
+
+    # Check context
+    assert response.context['user_can_manage'] == True
+
+
+@pytest.mark.parametrize("view", ['enable-pipeline', 'disable-pipeline'])
+@pytest.mark.django_db
+def test_pipeline_change_views(view, standard_user, client):
+    """
+    Test pipeline enable/disable views as various classes of non-advocate user
+    """
+    if not standard_user.is_anonymous:
+        client.force_login(standard_user)
+
+    # Create a pipeline
+    p, _ = Pipeline.objects.get_or_create(name='fake_pipeline')
+
+    # NOTE: get() is wired to post() in the view
+    response = client.get(reverse(view, args=[p.pk]))
+
+    assert response.status_code == 403
+
+
+@pytest.mark.parametrize("view", ['enable-pipeline', 'disable-pipeline'])
+@pytest.mark.django_db
+def test_pipeline_change_views_as_advocate(view, em_advocate_user, client):
+    """
+    Test pipeline enable/disable views as various classes of non-advocate user
+    """
+    client.force_login(em_advocate_user)
+
+    # Create a pipeline
+    p, _ = Pipeline.objects.get_or_create(name='fake_pipeline')
+
+    # NOTE: get() is wired to post() in the view
+    with mock.patch('events.views.PIPELINE_LIST', new_callable=list) \
+        as mock_pipeline_list:
+        mock_pipeline_list.append(p.name)
+        response = client.get(reverse(view, args=[p.pk]))
+
+    assert response.status_code == 302
-- 
GitLab