refactor: Remove set_course_discussion_settings helper
This commit is contained in:
@@ -203,7 +203,7 @@ class CourseCohortsSettings(models.Model):
|
||||
@cohorted_discussions.setter
|
||||
def cohorted_discussions(self, value):
|
||||
"""
|
||||
DEPRECATED-- DO NOT USE. Instead use `CourseDiscussionSettings` via `set_course_discussion_settings`.
|
||||
DEPRECATED-- DO NOT USE. Instead use `CourseDiscussionSettings.update`
|
||||
"""
|
||||
self._cohorted_discussions = json.dumps(value)
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ from factory.django import DjangoModelFactory
|
||||
from opaque_keys.edx.locator import CourseLocator
|
||||
|
||||
from openedx.core.djangoapps.django_comment_common.models import CourseDiscussionSettings
|
||||
from openedx.core.djangoapps.django_comment_common.utils import set_course_discussion_settings
|
||||
from openedx.core.djangoapps.django_comment_common.utils import get_course_discussion_settings
|
||||
from xmodule.modulestore import ModuleStoreEnum
|
||||
from xmodule.modulestore.django import modulestore
|
||||
|
||||
@@ -125,10 +125,10 @@ def config_course_cohorts(
|
||||
"""
|
||||
|
||||
set_course_cohorted(course.id, is_cohorted)
|
||||
set_course_discussion_settings(
|
||||
course.id,
|
||||
division_scheme=discussion_division_scheme,
|
||||
)
|
||||
discussion_settings = get_course_discussion_settings(course.id)
|
||||
discussion_settings.update({
|
||||
'division_scheme': discussion_division_scheme,
|
||||
})
|
||||
|
||||
for cohort_name in auto_cohorts:
|
||||
cohort = CohortFactory(course_id=course.id, name=cohort_name)
|
||||
|
||||
@@ -267,6 +267,26 @@ class CourseDiscussionSettings(models.Model):
|
||||
"""
|
||||
self._divided_discussions = json.dumps(value)
|
||||
|
||||
def update(self, validated_data: dict):
|
||||
"""
|
||||
Set discussion settings for a course
|
||||
|
||||
Returns:
|
||||
A CourseDiscussionSettings object
|
||||
"""
|
||||
fields = {
|
||||
'division_scheme': (str,)[0],
|
||||
'always_divide_inline_discussions': bool,
|
||||
'divided_discussions': list,
|
||||
}
|
||||
for field, field_type in fields.items():
|
||||
if field in validated_data:
|
||||
if not isinstance(validated_data[field], field_type):
|
||||
raise ValueError(f"Incorrect field type for `{field}`. Type must be `{field_type.__name__}`")
|
||||
setattr(self, field, validated_data[field])
|
||||
self.save()
|
||||
return self
|
||||
|
||||
|
||||
class DiscussionsIdMapping(models.Model):
|
||||
"""
|
||||
|
||||
@@ -10,7 +10,6 @@ from openedx.core.djangoapps.course_groups.cohorts import CourseCohortsSettings
|
||||
from openedx.core.djangoapps.django_comment_common.models import CourseDiscussionSettings, Role
|
||||
from openedx.core.djangoapps.django_comment_common.utils import (
|
||||
get_course_discussion_settings,
|
||||
set_course_discussion_settings
|
||||
)
|
||||
from common.djangoapps.student.models import CourseEnrollment, User
|
||||
from xmodule.modulestore import ModuleStoreEnum
|
||||
@@ -111,13 +110,13 @@ class CourseDiscussionSettingsTest(ModuleStoreTestCase):
|
||||
assert ['foo', 'bar'] == discussion_settings.divided_discussions
|
||||
assert discussion_settings.always_divide_inline_discussions
|
||||
|
||||
def test_set_course_discussion_settings(self):
|
||||
set_course_discussion_settings(
|
||||
course_key=self.course.id,
|
||||
divided_discussions=['cohorted_topic'],
|
||||
division_scheme=CourseDiscussionSettings.ENROLLMENT_TRACK,
|
||||
always_divide_inline_discussions=True,
|
||||
)
|
||||
def test_update_course_discussion_settings(self):
|
||||
discussion_settings = get_course_discussion_settings(self.course.id)
|
||||
discussion_settings.update({
|
||||
'divided_discussions': ['cohorted_topic'],
|
||||
'division_scheme': CourseDiscussionSettings.ENROLLMENT_TRACK,
|
||||
'always_divide_inline_discussions': True,
|
||||
})
|
||||
discussion_settings = get_course_discussion_settings(self.course.id)
|
||||
assert CourseDiscussionSettings.ENROLLMENT_TRACK == discussion_settings.division_scheme
|
||||
assert ['cohorted_topic'] == discussion_settings.divided_discussions
|
||||
@@ -132,8 +131,9 @@ class CourseDiscussionSettingsTest(ModuleStoreTestCase):
|
||||
]
|
||||
invalid_value = 3.14
|
||||
|
||||
discussion_settings = get_course_discussion_settings(self.course.id)
|
||||
for field in fields:
|
||||
with pytest.raises(ValueError) as value_error:
|
||||
set_course_discussion_settings(self.course.id, **{field['name']: invalid_value})
|
||||
discussion_settings.update({field['name']: invalid_value})
|
||||
|
||||
assert str(value_error.value) == exception_msg_template.format(field['name'], field['type'].__name__)
|
||||
|
||||
@@ -134,34 +134,3 @@ def get_course_discussion_settings(course_key):
|
||||
)
|
||||
|
||||
return course_discussion_settings
|
||||
|
||||
|
||||
def set_course_discussion_settings(course_key, **kwargs):
|
||||
"""
|
||||
Set discussion settings for a course.
|
||||
|
||||
Arguments:
|
||||
course_key: CourseKey
|
||||
always_divide_inline_discussions (bool): If inline discussions should always be divided.
|
||||
divided_discussions (list): List of discussion ids.
|
||||
division_scheme (str): `CourseDiscussionSettings.NONE`, `CourseDiscussionSettings.COHORT`,
|
||||
or `CourseDiscussionSettings.ENROLLMENT_TRACK`
|
||||
|
||||
Returns:
|
||||
A CourseDiscussionSettings object.
|
||||
"""
|
||||
fields = {
|
||||
'division_scheme': (str,)[0],
|
||||
'always_divide_inline_discussions': bool,
|
||||
'divided_discussions': list,
|
||||
}
|
||||
|
||||
course_discussion_settings = get_course_discussion_settings(course_key)
|
||||
for field, field_type in fields.items():
|
||||
if field in kwargs:
|
||||
if not isinstance(kwargs[field], field_type):
|
||||
raise ValueError(f"Incorrect field type for `{field}`. Type must be `{field_type.__name__}`")
|
||||
setattr(course_discussion_settings, field, kwargs[field])
|
||||
|
||||
course_discussion_settings.save()
|
||||
return course_discussion_settings
|
||||
|
||||
Reference in New Issue
Block a user