Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions openedx/core/djangoapps/discussions/handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,12 +96,17 @@ def update_course_discussion_config(configuration: CourseDiscussionConfiguration
log.info(f"Course {course_key} doesn't have discussion configuration model yet. Creating a new one.")
DiscussionsConfiguration(
context_key=course_key,
enabled=configuration.enabled,
provider_type=provider_id,
plugin_configuration=configuration.plugin_configuration,
enable_in_context=configuration.enable_in_context,
enable_graded_units=configuration.enable_graded_units,
unit_level_visibility=configuration.unit_level_visibility,
).save()
else:
DiscussionsConfiguration.objects.filter(
context_key=course_key,
).update(enabled=configuration.enabled)


COURSE_DISCUSSIONS_CHANGED.connect(handle_course_discussion_config_update)
12 changes: 12 additions & 0 deletions openedx/core/djangoapps/discussions/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,20 @@ def update_discussions_settings_from_course(
)
contexts.extend(list(discussable_units))

# Derive enabled from the discussion tab's is_hidden state.
# When a course is imported or rerun, course.tabs are copied verbatim
# from the source but DiscussionsConfiguration is not, so we pass the
# tab state through config_data for the handler to reconcile.
enabled = True
if course:
for tab in course.tabs:
if getattr(tab, 'tab_id', None) == 'discussion':
enabled = not tab.is_hidden
break

config_data = CourseDiscussionConfigurationData(
course_key=course_key,
enabled=enabled,
enable_in_context=enable_in_context,
enable_graded_units=enable_graded_units,
unit_level_visibility=unit_level_visibility,
Expand Down
31 changes: 31 additions & 0 deletions openedx/core/djangoapps/discussions/tests/test_handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ def test_configuration_for_new_course(self):
config_data = CourseDiscussionConfigurationData(
course_key=new_key,
provider_type="openedx",
plugin_configuration={},
)
assert not DiscussionsConfiguration.objects.filter(context_key=new_key).exists()
update_course_discussion_config(config_data)
Expand Down Expand Up @@ -191,3 +192,33 @@ def test_enabled_units_change(self):
assert existing_topic_link.title == "Section 10|Subsection 10|Unit 10"
# If there is no stored context, then continue using the Unit name.
assert existing_topic_link_2.title == "Unit 11"

def test_new_config_uses_enabled_from_configuration(self):
"""
When creating a new DiscussionsConfiguration, the handler should use
the enabled value from the configuration data.
"""
new_key = CourseKey.from_string("course-v1:test+test+disabled")
config_data = CourseDiscussionConfigurationData(
course_key=new_key,
provider_type="openedx",
enabled=False,
plugin_configuration={},
)
update_course_discussion_config(config_data)
db_config = DiscussionsConfiguration.objects.get(context_key=new_key)
assert db_config.enabled is False

def test_existing_config_updated_enabled_from_configuration(self):
"""
When the configuration already exists, the handler should update
enabled from the configuration data.
"""
config_data = CourseDiscussionConfigurationData(
course_key=self.course_key,
provider_type="openedx",
enabled=False,
)
update_course_discussion_config(config_data)
db_config = DiscussionsConfiguration.objects.get(context_key=self.course_key)
assert db_config.enabled is False
22 changes: 22 additions & 0 deletions openedx/core/djangoapps/discussions/tests/test_tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,28 @@ def test_custom_discussion_settings(self, settings, context_count, present_units
assert present_units <= units_in_config
assert not missing_units & units_in_config

@ddt.data(
# (tab_is_hidden, expected_enabled)
(True, False), # import with hidden tab → disabled
(False, True), # import with visible tab → enabled
)
@ddt.unpack
def test_config_data_enabled_from_discussion_tab(self, tab_is_hidden, expected_enabled):
"""
update_discussions_settings_from_course should set config_data.enabled
based on the discussion tab's is_hidden state.
"""
course = self.store.get_course(self.course.id)
for tab in course.tabs:
if getattr(tab, 'tab_id', None) == 'discussion':
tab['is_hidden'] = tab_is_hidden
break
self.store.update_item(course, self.user.id)

config_data = update_discussions_settings_from_course(self.course.id)

assert config_data.enabled is expected_enabled


@ddt.ddt
class MigrateUnitDiscussionStateFromXBlockTestCase(ModuleStoreTestCase, DiscussionConfigUpdateMixin):
Expand Down
2 changes: 1 addition & 1 deletion requirements/edx/base.txt
Original file line number Diff line number Diff line change
Expand Up @@ -839,7 +839,7 @@ openedx-django-require==3.0.0
# via -r requirements/edx/kernel.in
openedx-django-wiki==3.1.1
# via -r requirements/edx/kernel.in
openedx-events==10.5.0
openedx-events==11.1.0
# via
# -r requirements/edx/kernel.in
# edx-enterprise
Expand Down
2 changes: 1 addition & 1 deletion requirements/edx/development.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1400,7 +1400,7 @@ openedx-django-wiki==3.1.1
# via
# -r requirements/edx/doc.txt
# -r requirements/edx/testing.txt
openedx-events==10.5.0
openedx-events==11.1.0
# via
# -r requirements/edx/doc.txt
# -r requirements/edx/testing.txt
Expand Down
2 changes: 1 addition & 1 deletion requirements/edx/doc.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1019,7 +1019,7 @@ openedx-django-require==3.0.0
# via -r requirements/edx/base.txt
openedx-django-wiki==3.1.1
# via -r requirements/edx/base.txt
openedx-events==10.5.0
openedx-events==11.1.0
# via
# -r requirements/edx/base.txt
# edx-enterprise
Expand Down
2 changes: 1 addition & 1 deletion requirements/edx/testing.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1068,7 +1068,7 @@ openedx-django-require==3.0.0
# via -r requirements/edx/base.txt
openedx-django-wiki==3.1.1
# via -r requirements/edx/base.txt
openedx-events==10.5.0
openedx-events==11.1.0
# via
# -r requirements/edx/base.txt
# edx-enterprise
Expand Down
Loading