diff --git a/lms/djangoapps/courseware/tests/test_discussion_xblock.py b/lms/djangoapps/courseware/tests/test_discussion_xblock.py index 0b3577c34f..e5ee524ec8 100644 --- a/lms/djangoapps/courseware/tests/test_discussion_xblock.py +++ b/lms/djangoapps/courseware/tests/test_discussion_xblock.py @@ -24,6 +24,7 @@ from xmodule.modulestore.tests.factories import ItemFactory, ToyCourseFactory from lms.djangoapps.course_api.blocks.tests.helpers import deserialize_usage_key from lms.djangoapps.courseware.module_render import get_module_for_descriptor_internal from lms.djangoapps.courseware.tests.helpers import XModuleRenderingTestBase +from openedx.core.djangoapps.discussions.models import DiscussionsConfiguration, Provider from common.djangoapps.student.tests.factories import CourseEnrollmentFactory, UserFactory @@ -161,7 +162,10 @@ class TestViews(TestDiscussionXBlock): assert fragment.content == self.template_canary self.render_template.assert_called_once_with( 'discussion/_discussion_inline_studio.html', - {'discussion_id': self.discussion_id} + { + 'discussion_id': self.discussion_id, + 'is_visible': True, + } ) @ddt.data( @@ -374,6 +378,32 @@ class TestXBlockInCourse(SharedModuleStoreTestCase): assert block_data['display_name'] == (self.store.get_item(block_key).display_name or '') assert block_data['student_view_data'] == {'topic_id': self.discussion_id} + def test_discussion_xblock_visibility(self): + """ + Tests that the discussion xblock is hidden when discussion provider is openedx + """ + # Enable new OPEN_EDX provider for this course + course_key = self.course.location.course_key + DiscussionsConfiguration.objects.create( + context_key=course_key, + enabled=True, + provider_type=Provider.OPEN_EDX, + ) + + discussion_xblock = get_module_for_descriptor_internal( + user=self.user, + descriptor=self.discussion, + student_data=mock.Mock(name='student_data'), + course_id=self.course.id, + track_function=mock.Mock(name='track_function'), + request_token='request_token', + ) + + fragment = discussion_xblock.render('student_view') + html = fragment.content + assert 'data-user-create-comment="false"' not in html + assert 'data-user-create-subcomment="false"' not in html + class TestXBlockQueryLoad(SharedModuleStoreTestCase): """ @@ -400,12 +430,14 @@ class TestXBlockQueryLoad(SharedModuleStoreTestCase): discussion_target='Target Discussion', )) - # 4 queries are required to do first discussion xblock render: + # 6 queries are required to do first discussion xblock render: # * split_modulestore_django_splitmodulestorecourseindex x2 - # * waffle_utils_waffleorgoverridemodel + # * waffle_flag.discussions.enable_new_structure_discussions + # * lms_xblock_xblockasidesconfig # * django_comment_client_role + # * DiscussionsConfiguration - num_queries = 4 + num_queries = 6 for discussion in discussions: discussion_xblock = get_module_for_descriptor_internal( @@ -421,7 +453,9 @@ class TestXBlockQueryLoad(SharedModuleStoreTestCase): # Permissions are cached, so no queries required for subsequent renders - num_queries = 0 + # query to check for provider_type + # query to check waffle flag discussions.enable_new_structure_discussions + num_queries = 2 html = fragment.content assert 'data-user-create-comment="false"' in html diff --git a/lms/templates/discussion/_discussion_inline_studio.html b/lms/templates/discussion/_discussion_inline_studio.html index be1fe33533..9433b6e7d5 100644 --- a/lms/templates/discussion/_discussion_inline_studio.html +++ b/lms/templates/discussion/_discussion_inline_studio.html @@ -7,6 +7,9 @@ ${_("To view live discussions, click Preview or View Live in Unit Settings.")}
${_("Discussion ID: {discussion_id}").format(discussion_id=discussion_id)} + % if not is_visible: +
${_('The discussion block is disabled for this course as it is not using a compatible discussion provider.')} + % endif

diff --git a/xmodule/discussion_block.py b/xmodule/discussion_block.py index 25a6be2138..c7eb09d2a2 100644 --- a/xmodule/discussion_block.py +++ b/xmodule/discussion_block.py @@ -15,6 +15,7 @@ from xblock.fields import UNIQUE_ID, Scope, String from xblockutils.resources import ResourceLoader from xblockutils.studio_editable import StudioEditableXBlockMixin +from openedx.core.djangoapps.discussions.models import DiscussionsConfiguration, Provider from openedx.core.djangolib.markup import HTML, Text from openedx.core.lib.xblock_utils import get_css_dependencies, get_js_dependencies from xmodule.xml_module import XmlParserMixin @@ -81,6 +82,14 @@ class DiscussionXBlock(XBlock, StudioEditableXBlockMixin, XmlParserMixin): # li """ return getattr(self.scope_ids.usage_id, 'course_key', None) + @property + def is_visible(self): + """ + Discussion Xblock does not support new OPEN_EDX provider + """ + provider = DiscussionsConfiguration.get(self.course_key) + return provider.provider_type == Provider.LEGACY + @property def django_user(self): """ @@ -162,8 +171,11 @@ class DiscussionXBlock(XBlock, StudioEditableXBlockMixin, XmlParserMixin): # li Renders student view for LMS. """ fragment = Fragment() - self.add_resource_urls(fragment) + if not self.is_visible: + return fragment + + self.add_resource_urls(fragment) login_msg = '' if not self.django_user.is_authenticated: @@ -210,7 +222,10 @@ class DiscussionXBlock(XBlock, StudioEditableXBlockMixin, XmlParserMixin): # li fragment = Fragment() fragment.add_content(self.runtime.service(self, 'mako').render_template( 'discussion/_discussion_inline_studio.html', - {'discussion_id': self.discussion_id} + { + 'discussion_id': self.discussion_id, + 'is_visible': self.is_visible, + } )) return fragment