Skip to content

Commit d5c50b5

Browse files
andrii-hantkovskyiAndrii
andauthored
feat: [AXM-1899] add default advanced modules (#2634)
* feat: [AXM-1899] add default advanced modules * test: [AXM-1899] add check for default advanced modules list --------- Co-authored-by: Andrii <[email protected]>
1 parent 7cb3196 commit d5c50b5

3 files changed

Lines changed: 53 additions & 15 deletions

File tree

cms/djangoapps/contentstore/views/component.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,7 @@ def create_support_legend_dict():
445445
# These modules should be specified as a list of strings, where the strings
446446
# are the names of the modules in ADVANCED_COMPONENT_TYPES that should be
447447
# enabled for the course.
448-
course_advanced_keys = courselike.advanced_modules
448+
course_advanced_keys = list(dict.fromkeys(courselike.advanced_modules + settings.DEFAULT_ADVANCED_MODULES))
449449
advanced_component_templates = {
450450
"type": "advanced",
451451
"templates": [],

cms/djangoapps/contentstore/views/tests/test_block.py

Lines changed: 39 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2903,6 +2903,16 @@ def setUp(self):
29032903

29042904
self.templates = get_component_templates(self.course)
29052905

2906+
self.default_advanced_modules_titles = [
2907+
"Google Calendar",
2908+
"Google Document",
2909+
"LTI Consumer",
2910+
"Poll",
2911+
"Content Experiment",
2912+
"Survey",
2913+
"Word cloud",
2914+
]
2915+
29062916
def get_templates_of_type(self, template_type):
29072917
"""
29082918
Returns the templates for the specified type, or None if none is found.
@@ -2956,7 +2966,12 @@ def test_basic_components(self):
29562966
self.assertGreater(len(self.get_templates_of_type("library")), 0)
29572967
self.assertGreater(len(self.get_templates_of_type("html")), 0)
29582968
self.assertGreater(len(self.get_templates_of_type("problem")), 0)
2959-
self.assertIsNone(self.get_templates_of_type("advanced"))
2969+
2970+
# Check for default advanced modules
2971+
advanced_templates = self.get_templates_of_type("advanced")
2972+
self.assertEqual(len(advanced_templates), len(settings.DEFAULT_ADVANCED_MODULES))
2973+
advanced_module_titles = [t['display_name'] for t in advanced_templates]
2974+
self.assertEqual(advanced_module_titles, self.default_advanced_modules_titles)
29602975

29612976
# Now fully disable video through XBlockConfiguration
29622977
XBlockConfiguration.objects.create(name="video", enabled=False)
@@ -3004,29 +3019,38 @@ def test_advanced_components(self):
30043019
"""
30053020
Test the handling of advanced component templates.
30063021
"""
3007-
self.course.advanced_modules.append("word_cloud")
3022+
self.course.advanced_modules.append("done")
3023+
EXPECTED_ADVANCED_MODULES_LENGTH = len(settings.DEFAULT_ADVANCED_MODULES) + 1
30083024
self.templates = get_component_templates(self.course)
30093025
advanced_templates = self.get_templates_of_type("advanced")
3010-
self.assertEqual(len(advanced_templates), 1)
3011-
world_cloud_template = advanced_templates[0]
3012-
self.assertEqual(world_cloud_template.get("category"), "word_cloud")
3013-
self.assertEqual(world_cloud_template.get("display_name"), "Word cloud")
3014-
self.assertIsNone(world_cloud_template.get("boilerplate_name", None))
3026+
self.assertEqual(len(advanced_templates), EXPECTED_ADVANCED_MODULES_LENGTH)
3027+
done_template = advanced_templates[0]
3028+
self.assertEqual(done_template.get("category"), "done")
3029+
self.assertEqual(done_template.get("display_name"), "Completion")
3030+
self.assertIsNone(done_template.get("boilerplate_name", None))
30153031

3016-
# Verify that non-advanced components are not added twice
3032+
# Verify that components are not added twice
30173033
self.course.advanced_modules.append("video")
30183034
self.course.advanced_modules.append("drag-and-drop-v2")
3035+
# Already defined advanced modules
3036+
self.course.advanced_modules.append("poll")
3037+
self.course.advanced_modules.append("google-document")
3038+
self.course.advanced_modules.append("survey")
3039+
30193040
self.templates = get_component_templates(self.course)
30203041
advanced_templates = self.get_templates_of_type("advanced")
3021-
self.assertEqual(len(advanced_templates), 1)
3042+
self.assertEqual(len(advanced_templates), EXPECTED_ADVANCED_MODULES_LENGTH)
30223043
only_template = advanced_templates[0]
30233044
self.assertNotEqual(only_template.get("category"), "video")
30243045
self.assertNotEqual(only_template.get("category"), "drag-and-drop-v2")
3046+
self.assertNotEqual(only_template.get("category"), "poll")
3047+
self.assertNotEqual(only_template.get("category"), "google-document")
3048+
self.assertNotEqual(only_template.get("category"), "survey")
30253049

3026-
# Now fully disable word_cloud through XBlockConfiguration
3027-
XBlockConfiguration.objects.create(name="word_cloud", enabled=False)
3050+
# Now fully disable done through XBlockConfiguration
3051+
XBlockConfiguration.objects.create(name="done", enabled=False)
30283052
self.templates = get_component_templates(self.course)
3029-
self.assertIsNone(self.get_templates_of_type("advanced"))
3053+
self.assertTrue((not any(item.get("category") == "done" for item in self.get_templates_of_type("advanced"))))
30303054

30313055
def test_advanced_problems(self):
30323056
"""
@@ -3087,8 +3111,9 @@ def test_create_support_level_flag_off(self):
30873111
XBlockConfiguration) if XBlockStudioConfigurationFlag is False.
30883112
"""
30893113
XBlockStudioConfigurationFlag.objects.create(enabled=False)
3090-
self.course.advanced_modules.extend(["annotatable", "survey"])
3091-
self._verify_advanced_xblocks(["Annotation", "Survey"], [True, True])
3114+
self.course.advanced_modules.extend(["annotatable", "done"])
3115+
expected_xblocks = ["Annotation", "Completion"] + self.default_advanced_modules_titles
3116+
self._verify_advanced_xblocks(expected_xblocks, [True] * len(expected_xblocks))
30923117

30933118
def test_xblock_masquerading_as_problem(self):
30943119
"""

cms/envs/common.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2938,3 +2938,16 @@ def _should_send_learning_badge_events(settings):
29382938
'survey',
29392939
'word_cloud',
29402940
]
2941+
2942+
# .. setting_name: DEFAULT_ADVANCED_MODULES
2943+
# .. setting_default: ['google-calendar', 'google-document', 'lti_consumer', 'poll', 'split_test', 'survey', 'word_cloud']
2944+
# .. setting_description: List of advanced modules that are enabled by default
2945+
DEFAULT_ADVANCED_MODULES = [
2946+
'google-calendar',
2947+
'google-document',
2948+
'lti_consumer',
2949+
'poll',
2950+
'split_test',
2951+
'survey',
2952+
'word_cloud',
2953+
]

0 commit comments

Comments
 (0)