Add has access tests to content gating graded problem types.
REV-492
This commit is contained in:
92
openedx/features/content_type_gating/tests/test_access.py
Normal file
92
openedx/features/content_type_gating/tests/test_access.py
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
"""
|
||||||
|
Test audit user's access to various content based on content-gating features.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import ddt
|
||||||
|
from django.http import Http404
|
||||||
|
from django.test.client import RequestFactory
|
||||||
|
from django.test.utils import override_settings
|
||||||
|
from mock import Mock, patch
|
||||||
|
|
||||||
|
from course_modes.tests.factories import CourseModeFactory
|
||||||
|
from courseware.access_response import IncorrectPartitionGroupError
|
||||||
|
from lms.djangoapps.courseware.module_render import load_single_xblock
|
||||||
|
from openedx.core.djangoapps.waffle_utils.testutils import override_waffle_flag
|
||||||
|
from openedx.features.course_duration_limits.config import CONTENT_TYPE_GATING_FLAG
|
||||||
|
from student.tests.factories import AdminFactory, CourseEnrollmentFactory, UserFactory
|
||||||
|
from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase
|
||||||
|
from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory
|
||||||
|
|
||||||
|
|
||||||
|
@ddt.ddt
|
||||||
|
@override_waffle_flag(CONTENT_TYPE_GATING_FLAG, True)
|
||||||
|
@override_settings(FIELD_OVERRIDE_PROVIDERS=(
|
||||||
|
'openedx.features.content_type_gating.field_override.ContentTypeGatingFieldOverride',
|
||||||
|
))
|
||||||
|
class TestProblemTypeAccess(SharedModuleStoreTestCase):
|
||||||
|
|
||||||
|
PROBLEM_TYPES = ['problem', 'openassessment', 'drag-and-drop-v2', 'done', 'edx_sga', ]
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUpClass(self):
|
||||||
|
super(TestProblemTypeAccess, self).setUpClass()
|
||||||
|
self.factory = RequestFactory()
|
||||||
|
self.course = CourseFactory.create(run='testcourse1', display_name='Test Course Title')
|
||||||
|
CourseModeFactory.create(course_id=self.course.id, mode_slug='audit')
|
||||||
|
CourseModeFactory.create(course_id=self.course.id, mode_slug='verified')
|
||||||
|
with self.store.bulk_operations(self.course.id):
|
||||||
|
self.chapter = ItemFactory.create(
|
||||||
|
parent=self.course,
|
||||||
|
display_name='Overview'
|
||||||
|
)
|
||||||
|
self.welcome = ItemFactory.create(
|
||||||
|
parent=self.chapter,
|
||||||
|
display_name='Welcome'
|
||||||
|
)
|
||||||
|
ItemFactory.create(
|
||||||
|
parent=self.course,
|
||||||
|
category='chapter',
|
||||||
|
display_name='Week 1'
|
||||||
|
)
|
||||||
|
self.chapter_subsection = ItemFactory.create(
|
||||||
|
parent=self.chapter,
|
||||||
|
category='sequential',
|
||||||
|
display_name='Lesson 1'
|
||||||
|
)
|
||||||
|
chapter_vertical = ItemFactory.create(
|
||||||
|
parent=self.chapter_subsection,
|
||||||
|
category='vertical',
|
||||||
|
display_name='Lesson 1 Vertical - Unit 1'
|
||||||
|
)
|
||||||
|
self.problem_dict = {}
|
||||||
|
for prob_type in self.PROBLEM_TYPES:
|
||||||
|
block = ItemFactory.create(
|
||||||
|
parent=chapter_vertical,
|
||||||
|
category=prob_type,
|
||||||
|
display_name=prob_type,
|
||||||
|
graded=True,
|
||||||
|
)
|
||||||
|
self.problem_dict[prob_type] = block
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(TestProblemTypeAccess, self).setUp()
|
||||||
|
self.audit_user = UserFactory.create()
|
||||||
|
self.enrollment = CourseEnrollmentFactory.create(user=self.audit_user, course_id=self.course.id, mode='audit')
|
||||||
|
|
||||||
|
@ddt.data(
|
||||||
|
*PROBLEM_TYPES
|
||||||
|
)
|
||||||
|
def test_audit_fails_access_graded_problems(self, prob_type):
|
||||||
|
fake_request = Mock()
|
||||||
|
with patch.object(IncorrectPartitionGroupError, '__init__',
|
||||||
|
wraps=IncorrectPartitionGroupError.__init__) as mock_access_error:
|
||||||
|
mock_access_error.return_value = IncorrectPartitionGroupError
|
||||||
|
with self.assertRaises(Http404):
|
||||||
|
load_single_xblock(
|
||||||
|
request=fake_request,
|
||||||
|
user_id=self.audit_user.id,
|
||||||
|
course_id=unicode(self.course.id),
|
||||||
|
usage_key_string=unicode(self.problem_dict[prob_type].scope_ids.usage_id),
|
||||||
|
course=None
|
||||||
|
)
|
||||||
|
self.assertTrue(mock_access_error.called)
|
||||||
Reference in New Issue
Block a user