fix: add is_configured property

This commit is contained in:
=Awais Jibran
2021-12-10 16:50:20 +05:00
committed by Mehak Nasir
parent 770230c366
commit 51b2b89bcd
4 changed files with 46 additions and 32 deletions

View File

@@ -151,7 +151,7 @@ class ProgramDetailsFragmentView(EdxFragmentView):
'credit_pathways': credit_pathways,
'program_tab_view_enabled': program_tab_view_is_enabled(),
'discussion_fragment': {
'configured': bool(program_discussion_lti.configuration),
'configured': program_discussion_lti.is_configured,
'iframe': program_discussion_lti.render_iframe()
}
}
@@ -179,15 +179,14 @@ class ProgramDiscussionLTI:
self.program_uuid = program_uuid
self.program = get_programs(uuid=self.program_uuid)
self.request = request
self.configuration = self.get_configuration()
self.configuration = ProgramDiscussionsConfiguration.get(self.program_uuid)
def get_configuration(self) -> ProgramDiscussionsConfiguration:
@property
def is_configured(self):
"""
Returns ProgramDiscussionsConfiguration object with respect to program_uuid
Returns a boolean indicating if the program configuration is enabled or not.
"""
return ProgramDiscussionsConfiguration.objects.filter(
program_uuid=self.program_uuid
).first()
return bool(self.configuration and self.configuration.enabled)
def _get_resource_link_id(self) -> str:
site = get_current_site(self.request)
@@ -268,7 +267,7 @@ class ProgramDiscussionLTI:
"""
Returns the program discussion fragment if program discussions configuration exists for a program uuid
"""
if not self.configuration:
if not self.is_configured:
return ''
lti_embed_html = self._get_lti_embed_code()

View File

@@ -54,7 +54,7 @@ class TestProgramDiscussionIframeView(SharedModuleStoreTestCase, ProgramCacheMix
response = self.client.get(self.url)
self.assertEqual(response.status_code, 200)
expected_data = {
'enabled': True,
'tab_view_enabled': True,
'discussion': {
'iframe': "",
'configured': False
@@ -70,6 +70,29 @@ class TestProgramDiscussionIframeView(SharedModuleStoreTestCase, ProgramCacheMix
response = self.client.get(self.url)
self.assertEqual(response.status_code, 401)
def test_program_discussion_disabled(self):
"""
Tests that API does not return discussion iframe when discussion
configuration is disabled.
"""
__ = ProgramDiscussionsConfiguration.objects.create(
program_uuid=self.program_uuid,
enabled=False,
provider_type="piazza",
)
expected_data = {
'tab_view_enabled': True,
'discussion': {
'iframe': "",
'configured': False
}
}
response = self.client.get(self.url)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data, expected_data)
def test_api_returns_discussions_iframe(self):
"""
Test if API returns iframe in case ProgramDiscussionsConfiguration model contains proper data

View File

@@ -86,7 +86,7 @@ class ProgramDiscussionIframeView(APIView, ProgramSpecificViewMixin):
**Example**
{
'enabled_for_masters': True,
'tab_view_enabled': True,
'discussion': {
"iframe": "
<iframe
@@ -96,11 +96,10 @@ class ProgramDiscussionIframeView(APIView, ProgramSpecificViewMixin):
>
</iframe>
",
"enabled": false
"configured": false
}
}
"""
authentication_classes = (BearerAuthentication, SessionAuthentication)
permission_classes = (permissions.IsAuthenticated, IsEnrolledInProgram)
@@ -108,14 +107,11 @@ class ProgramDiscussionIframeView(APIView, ProgramSpecificViewMixin):
def get(self, request, program_uuid):
""" GET handler """
program_discussion_lti = ProgramDiscussionLTI(program_uuid, request)
return Response(
{
'enabled': masters_program_tab_view_is_enabled(),
'discussion': {
'iframe': program_discussion_lti.render_iframe(),
'configured': bool(program_discussion_lti.configuration),
}
},
status=status.HTTP_200_OK
)
response_data = {
'tab_view_enabled': masters_program_tab_view_is_enabled(),
'discussion': {
'iframe': program_discussion_lti.render_iframe(),
'configured': program_discussion_lti.is_configured,
}
}
return Response(response_data, status=status.HTTP_200_OK)

View File

@@ -552,17 +552,13 @@ class ProgramDiscussionsConfiguration(TimeStampedModel):
return f"Configuration(uuid='{self.program_uuid}', provider='{self.provider_type}', enabled={self.enabled})"
@classmethod
def is_enabled(cls, program_uuid) -> bool:
def get(cls, program_uuid):
"""
Check if there is an active configuration for a given program uuid
Default to False, if no configuration exists
Lookup a program discussion configuration by program uuid.
"""
try:
configuration = cls.objects.get(program_uuid=program_uuid)
return configuration.enabled
except cls.DoesNotExist:
return False
return ProgramDiscussionsConfiguration.objects.filter(
program_uuid=program_uuid
).first()
class DiscussionTopicLink(models.Model):