feat: enable unit-level control over discussions by default (#30903)
This PR changes the default behaviour of the discussions experience by making the previous "unit-level visibility" the default mechanism for configuring discussions. Prior to this PR, under the new discussions configuration experience, all units would automatically get assigned a discussion topic and have discussions enabled for them (other than units in graded or exam subsections). However, if authors wanted they could enabled a custom visibility mode which would allow toggling discussions on or off on a per-unit level. This PR makes this custom visibility mode the standard behaviour (and eventually, only behaviour) and enables discussion for all units by default. This replicates the behaviour that already existed, however, now gives authors control over disabling discussions for individual units by default. It also removes the ability to disable discussions for all units (while still keeping course-wide discussions) enabled.
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
# Generated by Django 3.2.15 on 2022-08-26 11:07
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('discussions', '0013_auto_20220802_1154'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='discussionsconfiguration',
|
||||
name='unit_level_visibility',
|
||||
field=models.BooleanField(default=True, help_text='If enabled, discussions will need to be manually enabled for each unit.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='historicaldiscussionsconfiguration',
|
||||
name='unit_level_visibility',
|
||||
field=models.BooleanField(default=True, help_text='If enabled, discussions will need to be manually enabled for each unit.'),
|
||||
),
|
||||
]
|
||||
@@ -432,7 +432,7 @@ class DiscussionsConfiguration(TimeStampedModel):
|
||||
help_text=_("If enabled, discussion topics will be created for graded units as well.")
|
||||
)
|
||||
unit_level_visibility = models.BooleanField(
|
||||
default=False,
|
||||
default=True,
|
||||
help_text=_("If enabled, discussions will need to be manually enabled for each unit.")
|
||||
)
|
||||
plugin_configuration = JSONField(
|
||||
|
||||
@@ -80,7 +80,7 @@ def update_discussions_settings_from_course(course_key: CourseKey) -> CourseDisc
|
||||
provider = course.discussions_settings.get('provider', provider_type)
|
||||
enable_in_context = course.discussions_settings.get('enable_in_context', True)
|
||||
provider_config = course.discussions_settings.get(provider, {})
|
||||
unit_level_visibility = course.discussions_settings.get('unit_level_visibility', False)
|
||||
unit_level_visibility = course.discussions_settings.get('unit_level_visibility', True)
|
||||
enable_graded_units = course.discussions_settings.get('enable_graded_units', False)
|
||||
contexts = []
|
||||
if supports_in_context:
|
||||
|
||||
@@ -108,10 +108,10 @@ class UpdateDiscussionsSettingsFromCourseTestCase(ModuleStoreTestCase):
|
||||
config_data = update_discussions_settings_from_course(self.course.id)
|
||||
assert config_data.course_key == self.course.id
|
||||
assert config_data.enable_graded_units is False
|
||||
assert config_data.unit_level_visibility is False
|
||||
assert config_data.unit_level_visibility is True
|
||||
assert config_data.provider_type is not None
|
||||
assert config_data.plugin_configuration == {}
|
||||
assert len(config_data.contexts) == 4
|
||||
assert {context.title for context in config_data.contexts} == {"General", "Unit", "Discussable Unit"}
|
||||
|
||||
def test_general_topics(self):
|
||||
"""
|
||||
@@ -122,7 +122,7 @@ class UpdateDiscussionsSettingsFromCourseTestCase(ModuleStoreTestCase):
|
||||
"Test Topic": {"id": "test-topic"},
|
||||
})
|
||||
config_data = update_discussions_settings_from_course(self.course.id)
|
||||
assert len(config_data.contexts) == 5
|
||||
assert len(config_data.contexts) == 4
|
||||
assert DiscussionTopicContext(
|
||||
title="General",
|
||||
external_id="general-topic",
|
||||
@@ -135,15 +135,17 @@ class UpdateDiscussionsSettingsFromCourseTestCase(ModuleStoreTestCase):
|
||||
) in config_data.contexts
|
||||
|
||||
@ddt.data(
|
||||
({}, 3, {"Unit", "Discussable Unit"},
|
||||
{"Graded Unit", "Non-Discussable Unit", "Discussable Graded Unit", "Non-Discussable Graded Unit"}),
|
||||
({"enable_in_context": False}, 1, set(), {"Unit", "Graded Unit"}),
|
||||
({"enable_graded_units": False}, 4, {"Unit", "Discussable Unit", "Non-Discussable Unit"},
|
||||
({"unit_level_visibility": False, "enable_graded_units": False}, 4,
|
||||
{"Unit", "Discussable Unit", "Non-Discussable Unit"},
|
||||
{"Graded Unit"}),
|
||||
({"enable_graded_units": True}, 7, {"Unit", "Graded Unit", "Discussable Graded Unit"}, set()),
|
||||
({"unit_level_visibility": True}, 2, {"Discussable Unit"},
|
||||
{"Unit", "Graded Unit", "Non-Discussable Unit", "Discussable Graded Unit", "Non-Discussable Graded Unit"}),
|
||||
({"unit_level_visibility": True, "enable_graded_units": True}, 3,
|
||||
{"Discussable Unit", "Discussable Graded Unit"},
|
||||
{"Graded Unit", "Non-Discussable Unit", "Non-Discussable Graded Unit"}),
|
||||
({"unit_level_visibility": False, "enable_graded_units": True}, 7,
|
||||
{"Unit", "Graded Unit", "Discussable Graded Unit"}, set()),
|
||||
({"enable_graded_units": True}, 5,
|
||||
{"Discussable Unit", "Discussable Graded Unit", "Graded Unit"},
|
||||
{"Non-Discussable Unit", "Non-Discussable Graded Unit"}),
|
||||
)
|
||||
@ddt.unpack
|
||||
def test_custom_discussion_settings(self, settings, context_count, present_units, missing_units):
|
||||
|
||||
Reference in New Issue
Block a user