test_views.py 4.38 KB
Newer Older
1 2 3 4 5 6
"""
Tests course_creators.views.py.
"""

from django.contrib.auth.models import User
from django.core.exceptions import PermissionDenied
7
from django.test import TestCase, RequestFactory
8 9

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
from edxmako.tests import mako_middleware_process_request
15 16 17 18 19 20 21 22 23


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

    def setUp(self):
        """ Test case setup """
24
        super(CourseCreatorView, self).setUp()
25 26 27 28 29 30
        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):
        """
31
        Tests that any method changing the course creator authz group must be called with staff permissions.
32 33 34 35 36
        """
        with self.assertRaises(PermissionDenied):
            add_user_with_status_granted(self.user, self.user)

        with self.assertRaises(PermissionDenied):
37 38
            update_course_creator_group(self.user, self.user, True)

39
    def test_table_initially_empty(self):
40
        self.assertIsNone(get_course_creator_status(self.user))
41 42

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

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

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

            add_user_with_status_granted(self.admin, self.user)
56
            self.assertEqual('granted', get_course_creator_status(self.user))
57 58

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

62
            self.assertTrue(auth.has_access(self.user, CourseCreatorRole()))
63 64

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

    def test_user_requested_access(self):
        add_user_with_status_unrequested(self.user)
        self.assertEqual('unrequested', get_course_creator_status(self.user))
75 76 77 78 79

        request = RequestFactory().get('/')
        request.user = self.user

        mako_middleware_process_request(request)
80 81 82 83 84 85 86 87 88 89
        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))
90 91 92 93 94 95 96 97 98 99

    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))