Files
Bernard Szabo 2d544f94be feat: TNL-10136 tease course enrollment from student model
Reapply changes developed in bszabo/TNL-10136-student-course-enrollment branch to current master
2022-12-13 17:19:34 -05:00

82 lines
3.3 KiB
Python

"""
Tests for LTI Course tabs.
"""
import itertools
from unittest.mock import Mock, patch
import ddt
from django.test import RequestFactory
from lti_consumer.models import CourseAllowPIISharingInLTIFlag, LtiConfiguration
from lms.djangoapps.courseware.tests.test_tabs import TabTestCase
from openedx.core.djangoapps.discussions.models import DiscussionsConfiguration
from openedx.features.lti_course_tab.tab import DiscussionLtiCourseTab
@ddt.ddt
class DiscussionLtiCourseTabTestCase(TabTestCase):
"""Test cases for LTI Discussion Tab."""
def setUp(self):
super().setUp()
self.discussion_config = DiscussionsConfiguration.objects.create(
context_key=self.course.id,
enabled=False,
# Pick a provider that supports LTI
provider_type="yellowdig",
)
self.discussion_config.lti_configuration = LtiConfiguration.objects.create(
config_store=LtiConfiguration.CONFIG_ON_DB,
lti_1p1_launch_url='http://test.url',
lti_1p1_client_key='test_client_key',
lti_1p1_client_secret='test_client_secret',
)
self.discussion_config.save()
self.url = self.reverse('course_tab_view', args=[str(self.course.id), DiscussionLtiCourseTab.type])
def check_discussion_tab(self):
"""Helper function for verifying the LTI discussion tab."""
return self.check_tab(
tab_class=DiscussionLtiCourseTab,
dict_tab={'type': DiscussionLtiCourseTab.type, 'name': 'same'},
expected_link=self.url,
expected_tab_id=DiscussionLtiCourseTab.type,
invalid_dict_tab=None,
)
@ddt.data(True, False)
@patch('common.djangoapps.student.models.course_enrollment.CourseEnrollment.is_enrolled', Mock(return_value=True))
def test_pii_params_on_discussion_lti_tab(self, discussion_config_enabled):
self.discussion_config.enabled = discussion_config_enabled
self.discussion_config.save()
tab = self.check_discussion_tab()
self.check_can_display_results(
tab,
for_staff_only=True,
for_enrolled_users_only=True,
expected_value=discussion_config_enabled,
)
@ddt.data(*itertools.product((True, False), repeat=3))
@ddt.unpack
def test_discussion_lti_tab_pii(self, enable_sending_pii, share_username, share_email):
CourseAllowPIISharingInLTIFlag.objects.create(course_id=self.course.id, enabled=enable_sending_pii)
self.discussion_config.lti_configuration.lti_config = {
"pii_share_username": share_username,
"pii_share_email": share_email,
}
self.discussion_config.lti_configuration.save()
tab = self.check_discussion_tab()
request = RequestFactory().get(self.url)
user = self.create_mock_user(is_enrolled=True)
request.user = user
embed_code = tab._get_lti_embed_code(self.course, request) # pylint: disable=protected-access
if enable_sending_pii and share_username:
assert user.username in embed_code
else:
assert user.username not in embed_code
if enable_sending_pii and share_email:
assert user.email in embed_code
else:
assert user.email not in embed_code