* Add new role for support staff. * Move dashboard/support functionality into a new Django app called "support". * Add support view for searching and regenerating certificates. * Refactor certificates views into separate files.
119 lines
3.7 KiB
Python
119 lines
3.7 KiB
Python
"""
|
|
Tests for support views.
|
|
"""
|
|
|
|
import ddt
|
|
from django.test import TestCase
|
|
from django.core.urlresolvers import reverse
|
|
|
|
from student.roles import GlobalStaff, SupportStaffRole
|
|
from student.tests.factories import UserFactory
|
|
|
|
|
|
class SupportViewTestCase(TestCase):
|
|
"""
|
|
Base class for support view tests.
|
|
"""
|
|
|
|
USERNAME = "support"
|
|
EMAIL = "support@example.com"
|
|
PASSWORD = "support"
|
|
|
|
def setUp(self):
|
|
"""Create a user and log in. """
|
|
super(SupportViewTestCase, self).setUp()
|
|
self.user = UserFactory(username=self.USERNAME, email=self.EMAIL, password=self.PASSWORD)
|
|
success = self.client.login(username=self.USERNAME, password=self.PASSWORD)
|
|
self.assertTrue(success, msg="Could not log in")
|
|
|
|
|
|
@ddt.ddt
|
|
class SupportViewAccessTests(SupportViewTestCase):
|
|
"""
|
|
Tests for access control of support views.
|
|
"""
|
|
|
|
@ddt.data(
|
|
("support:index", GlobalStaff, True),
|
|
("support:index", SupportStaffRole, True),
|
|
("support:index", None, False),
|
|
("support:certificates", GlobalStaff, True),
|
|
("support:certificates", SupportStaffRole, True),
|
|
("support:certificates", None, False),
|
|
("support:refund", GlobalStaff, True),
|
|
("support:refund", SupportStaffRole, True),
|
|
("support:refund", None, False),
|
|
)
|
|
@ddt.unpack
|
|
def test_access(self, url_name, role, has_access):
|
|
if role is not None:
|
|
role().add_users(self.user)
|
|
|
|
url = reverse(url_name)
|
|
response = self.client.get(url)
|
|
|
|
if has_access:
|
|
self.assertEqual(response.status_code, 200)
|
|
else:
|
|
self.assertEqual(response.status_code, 403)
|
|
|
|
@ddt.data("support:index", "support:certificates", "support:refund")
|
|
def test_require_login(self, url_name):
|
|
url = reverse(url_name)
|
|
|
|
# Log out then try to retrieve the page
|
|
self.client.logout()
|
|
response = self.client.get(url)
|
|
|
|
# Expect a redirect to the login page
|
|
redirect_url = "{login_url}?next={original_url}".format(
|
|
login_url=reverse("signin_user"),
|
|
original_url=url,
|
|
)
|
|
self.assertRedirects(response, redirect_url)
|
|
|
|
|
|
class SupportViewIndexTests(SupportViewTestCase):
|
|
"""
|
|
Tests for the support index view.
|
|
"""
|
|
|
|
EXPECTED_URL_NAMES = [
|
|
"support:certificates",
|
|
"support:refund",
|
|
]
|
|
|
|
def setUp(self):
|
|
"""Make the user support staff. """
|
|
super(SupportViewIndexTests, self).setUp()
|
|
SupportStaffRole().add_users(self.user)
|
|
|
|
def test_index(self):
|
|
response = self.client.get(reverse("support:index"))
|
|
self.assertContains(response, "Support")
|
|
|
|
# Check that all the expected links appear on the index page.
|
|
for url_name in self.EXPECTED_URL_NAMES:
|
|
self.assertContains(response, reverse(url_name))
|
|
|
|
|
|
class SupportViewCertificatesTests(SupportViewTestCase):
|
|
"""
|
|
Tests for the certificates support view.
|
|
"""
|
|
def setUp(self):
|
|
"""Make the user support staff. """
|
|
super(SupportViewCertificatesTests, self).setUp()
|
|
SupportStaffRole().add_users(self.user)
|
|
|
|
def test_certificates_no_query(self):
|
|
# Check that an empty initial query is passed to the JavaScript client correctly.
|
|
response = self.client.get(reverse("support:certificates"))
|
|
self.assertContains(response, "userQuery: ''")
|
|
|
|
def test_certificates_with_query(self):
|
|
# Check that an initial query is passed to the JavaScript client.
|
|
url = reverse("support:certificates") + "?query=student@example.com"
|
|
response = self.client.get(url)
|
|
self.assertContains(response, "userQuery: 'student@example.com'")
|