refactor: Remove set_course_discussion_settings helper

This commit is contained in:
stvn
2021-04-14 16:25:16 -07:00
parent 6156064492
commit 146887df1b
11 changed files with 68 additions and 79 deletions

View File

@@ -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)

View File

@@ -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)

View File

@@ -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):
"""

View File

@@ -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__)

View File

@@ -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