test_views.py 4.13 KB
Newer Older
1 2 3 4 5 6 7 8 9
"""
Tests course_creators.views.py.
"""

from django.test import TestCase
from django.contrib.auth.models import User
from django.core.exceptions import PermissionDenied

from course_creators.views import add_user_with_status_unrequested, add_user_with_status_granted
10
from course_creators.views import get_course_creator_status, update_course_creator_group, user_requested_access
11
import mock
12 13
from student.roles import CourseCreatorRole
from student import auth
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28


class CourseCreatorView(TestCase):
    """
    Tests for modifying the course creator table.
    """

    def setUp(self):
        """ Test case setup """
        self.user = User.objects.create_user('test_user', 'test_user+courses@edx.org', 'foo')
        self.admin = User.objects.create_user('Mark', 'admin+courses@edx.org', 'foo')
        self.admin.is_staff = True

    def test_staff_permission_required(self):
        """
29
        Tests that any method changing the course creator authz group must be called with staff permissions.
30 31 32 33 34
        """
        with self.assertRaises(PermissionDenied):
            add_user_with_status_granted(self.user, self.user)

        with self.assertRaises(PermissionDenied):
35 36
            update_course_creator_group(self.user, self.user, True)

37
    def test_table_initially_empty(self):
38
        self.assertIsNone(get_course_creator_status(self.user))
39 40

    def test_add_unrequested(self):
41
        add_user_with_status_unrequested(self.user)
42
        self.assertEqual('unrequested', get_course_creator_status(self.user))
43 44 45

        # Calling add again will be a no-op (even if state is different).
        add_user_with_status_granted(self.admin, self.user)
46
        self.assertEqual('unrequested', get_course_creator_status(self.user))
47 48

    def test_add_granted(self):
49
        with mock.patch.dict('django.conf.settings.FEATURES', {"ENABLE_CREATOR_GROUP": True}):
50
            # Calling add_user_with_status_granted impacts is_user_in_course_group_role.
51
            self.assertFalse(auth.has_access(self.user, CourseCreatorRole()))
52 53

            add_user_with_status_granted(self.admin, self.user)
54
            self.assertEqual('granted', get_course_creator_status(self.user))
55 56

            # Calling add again will be a no-op (even if state is different).
57
            add_user_with_status_unrequested(self.user)
58
            self.assertEqual('granted', get_course_creator_status(self.user))
59

60
            self.assertTrue(auth.has_access(self.user, CourseCreatorRole()))
61 62

    def test_update_creator_group(self):
63
        with mock.patch.dict('django.conf.settings.FEATURES', {"ENABLE_CREATOR_GROUP": True}):
64
            self.assertFalse(auth.has_access(self.user, CourseCreatorRole()))
65
            update_course_creator_group(self.admin, self.user, True)
66
            self.assertTrue(auth.has_access(self.user, CourseCreatorRole()))
67
            update_course_creator_group(self.admin, self.user, False)
68
            self.assertFalse(auth.has_access(self.user, CourseCreatorRole()))
69 70 71 72 73 74 75 76 77 78 79 80 81 82

    def test_user_requested_access(self):
        add_user_with_status_unrequested(self.user)
        self.assertEqual('unrequested', get_course_creator_status(self.user))
        user_requested_access(self.user)
        self.assertEqual('pending', get_course_creator_status(self.user))

    def test_user_requested_already_granted(self):
        add_user_with_status_granted(self.admin, self.user)
        self.assertEqual('granted', get_course_creator_status(self.user))
        # Will not "downgrade" to pending because that would require removing the
        # user from the authz course creator group (and that can only be done by an admin).
        user_requested_access(self.user)
        self.assertEqual('granted', get_course_creator_status(self.user))
83 84 85 86 87 88 89 90 91 92

    def test_add_user_unrequested_staff(self):
        # Users marked as is_staff will not be added to the course creator table.
        add_user_with_status_unrequested(self.admin)
        self.assertIsNone(get_course_creator_status(self.admin))

    def test_add_user_granted_staff(self):
        # Users marked as is_staff will not be added to the course creator table.
        add_user_with_status_granted(self.admin, self.admin)
        self.assertIsNone(get_course_creator_status(self.admin))