Files
edx-platform/lms/djangoapps/learner_dashboard/tests/test_views.py
Ahtisham Shahid 987c641d82 feat: created API to get program discussion iframe (#29205)
fix: py lint issues fixed

feat: added test cases for API

fix: py lint issues fixed and added tests

fix: updated tests and refactored

fix: fixed return type in the function

fix: conflicts resolved and linter issue

refactor: updated code to accommodate backward compatibility

refactor: updated classes for code clean up

feat: added test for ProgramDetailFragment

feat: added a new flag for masters discussion

refactor: updated flag names and other refactors
2021-11-22 11:27:45 +05:00

109 lines
4.4 KiB
Python

"""
Unit tests covering the program discussion iframe API.
"""
from uuid import uuid4
from django.urls import reverse, reverse_lazy
from edx_toggles.toggles.testutils import override_waffle_flag
from lti_consumer.models import LtiConfiguration
from markupsafe import Markup
from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory as ModuleStoreCourseFactory
from common.djangoapps.student.tests.factories import UserFactory
from lms.djangoapps.learner_dashboard.config.waffle import ENABLE_PROGRAM_TAB_VIEW, ENABLE_MASTERS_PROGRAM_TAB_VIEW
from lms.djangoapps.program_enrollments.rest_api.v1.tests.test_views import ProgramCacheMixin
from lms.djangoapps.program_enrollments.tests.factories import ProgramEnrollmentFactory
from openedx.core.djangoapps.catalog.tests.factories import CourseFactory, CourseRunFactory, ProgramFactory
from openedx.core.djangoapps.discussions.models import ProgramDiscussionsConfiguration
@override_waffle_flag(ENABLE_PROGRAM_TAB_VIEW, active=True)
@override_waffle_flag(ENABLE_MASTERS_PROGRAM_TAB_VIEW, active=True)
class TestProgramDiscussionIframeView(SharedModuleStoreTestCase, ProgramCacheMixin):
"""Unit tests for the program details page."""
program_uuid = str(uuid4())
password = 'test'
url = reverse_lazy('program_discussion', kwargs={'program_uuid': program_uuid})
@classmethod
def setUpClass(cls):
super().setUpClass()
modulestore_course = ModuleStoreCourseFactory()
course_run = CourseRunFactory(key=str(modulestore_course.id))
course = CourseFactory(course_runs=[course_run])
cls.program = ProgramFactory(uuid=cls.program_uuid, courses=[course])
def setUp(self):
super().setUp()
self.user = UserFactory()
self.client.login(username=self.user.username, password=self.password)
self.set_program_in_catalog_cache(self.program_uuid, self.program)
ProgramEnrollmentFactory.create(
user=self.user,
program_uuid=self.program_uuid,
external_user_key='0001',
)
def test_program_discussion_not_configured(self):
"""
Verify API returns proper response in case ProgramDiscussions is not Configured.
"""
response = self.client.get(self.url)
self.assertEqual(response.status_code, 200)
expected_data = {
'enabled': True,
'discussion': {
'iframe': "",
'configured': False
}
}
self.assertEqual(response.data, expected_data)
def test_if_user_is_not_authenticated(self):
"""
Verify that 401 is returned if user is not authenticated.
"""
self.client.logout()
response = self.client.get(self.url)
self.assertEqual(response.status_code, 401)
def test_api_returns_discussions_iframe(self):
"""
Test if API returns iframe in case ProgramDiscussionsConfiguration model contains proper data
"""
discussion_config = ProgramDiscussionsConfiguration.objects.create(
program_uuid=self.program_uuid,
enabled=True,
provider_type="piazza",
)
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',
)
discussion_config.save()
response = self.client.get(self.url)
self.assertEqual(response.status_code, 200)
self.assertIsInstance(response.data['discussion']['iframe'], Markup)
self.assertIn('iframe', str(response.data['discussion']['iframe']), )
def test_program_does_not_exist(self):
"""
Test if API returns 404 in case program does not exist
"""
response = self.client.get(reverse('program_discussion', kwargs={'program_uuid': str(uuid4())}))
self.assertEqual(response.status_code, 404)
def test_program_access_denied(self):
"""
Test if API returns 403 in case user has no access to program
"""
self.user = UserFactory()
self.client.login(username=self.user.username, password=self.password)
response = self.client.get(self.url)
self.assertEqual(response.status_code, 403)