Skip to content

Commit

Permalink
feat: update flext toggle behavior to only toggle on, not off
Browse files Browse the repository at this point in the history
  • Loading branch information
nsprenkle committed Jul 6, 2023
1 parent 929ed0b commit ae024c3
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 5 deletions.
34 changes: 34 additions & 0 deletions cms/djangoapps/contentstore/tests/test_contentstore.py
Original file line number Diff line number Diff line change
Expand Up @@ -1080,6 +1080,36 @@ def test_create_course(self):
"""Test new course creation - happy path"""
self.assert_created_course()

@ddt.data(True, False)
@mock.patch(
'cms.djangoapps.contentstore.views.course.default_enable_flexible_peer_openassessments'
)
def test_create_course__default_enable_flexible_peer_openassessments(
self,
mock_toggle_state,
mock_default_enable_flexible_peer_openassessments
):
"""
Test that flex peer grading is forced on, when enabled
"""
# Given a new course run
test_course_data = {}
test_course_data.update(self.course_data)
course_key = _get_course_id(self.store, test_course_data)

# ... with org configured to / not to enable flex grading
mock_default_enable_flexible_peer_openassessments.return_value = mock_toggle_state

# When I create a new course
new_course_data = _create_course(self, course_key, test_course_data)

# Then the process completes successfully
new_course_key = CourseKey.from_string(new_course_data['course_key'])
new_course = self.store.get_course(new_course_key)

# ... and our setting got toggled appropriately on the course
self.assertEqual(new_course.force_on_flexible_peer_openassessments, mock_toggle_state)

@override_settings(DEFAULT_COURSE_LANGUAGE='hr')
def test_create_course_default_language(self):
"""Test new course creation and verify default language"""
Expand Down Expand Up @@ -2104,6 +2134,8 @@ def test_accessibility(self):
def _create_course(test, course_key, course_data):
"""
Creates a course via an AJAX request and verifies the URL returned in the response.
Returns the data of the POST response
"""
course_url = get_url('course_handler', course_key, 'course_key_string')
response = test.client.ajax_post(course_url, course_data)
Expand All @@ -2112,6 +2144,8 @@ def _create_course(test, course_key, course_data):
test.assertNotIn('ErrMsg', data)
test.assertEqual(data['url'], course_url)

return data


def _get_course_id(store, course_data):
"""Returns the course ID."""
Expand Down
19 changes: 16 additions & 3 deletions cms/djangoapps/contentstore/tests/test_course_create_rerun.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@


import datetime
from itertools import product
from unittest import mock

import ddt
Expand Down Expand Up @@ -318,13 +319,15 @@ def test_course_creation_without_permission_for_specific_organization(self):
})
self.assertEqual(response.status_code, 403)

@ddt.data(True, False)
@ddt.data(*product([True, False], [True, False]))
@ddt.unpack
@mock.patch(
'cms.djangoapps.contentstore.views.course.default_enable_flexible_peer_openassessments'
)
def test_default_enable_flexible_peer_openassessments_on_rerun(
self,
mock_toggle_state,
mock_original_course_setting,
mock_default_enable_flexible_peer_openassessments
):
"""
Expand All @@ -336,6 +339,9 @@ def test_default_enable_flexible_peer_openassessments_on_rerun(
'short_name': self.source_course_key.org,
'description': 'Test roll-forward of flex grading setting',
})
source_course = self.store.get_course(self.source_course_key)
source_course.force_on_flexible_peer_openassessments = mock_original_course_setting
self.store.update_item(source_course, self.user.id)
mock_default_enable_flexible_peer_openassessments.return_value = mock_toggle_state

# When I create a new course
Expand All @@ -354,5 +360,12 @@ def test_default_enable_flexible_peer_openassessments_on_rerun(
dest_course_key = CourseKey.from_string(data['destination_course_key'])
dest_course = self.store.get_course(dest_course_key)

# ... and our setting got toggled appropriately on the course
self.assertEqual(dest_course.force_on_flexible_peer_openassessments, mock_toggle_state)
# ... and our setting got enabled appropriately on our new course
if (mock_toggle_state):
self.assertTrue(dest_course.force_on_flexible_peer_openassessments)
# ... or preserved if the default enable setting is not on
else:
self.assertEqual(
source_course.force_on_flexible_peer_openassessments,
dest_course.force_on_flexible_peer_openassessments
)
6 changes: 4 additions & 2 deletions cms/djangoapps/contentstore/views/course.py
Original file line number Diff line number Diff line change
Expand Up @@ -997,7 +997,8 @@ def create_new_course(user, org, number, run, fields):
update_course_discussions_settings(new_course.id)

# Enable certain fields rolling forward, where configured
new_course.force_on_flexible_peer_openassessments = default_enable_flexible_peer_openassessments(new_course.id)
if default_enable_flexible_peer_openassessments(new_course.id):
new_course.force_on_flexible_peer_openassessments = True
modulestore().update_item(new_course, new_course.published_by)

return new_course
Expand Down Expand Up @@ -1064,7 +1065,8 @@ def rerun_course(user, source_course_key, org, number, run, fields, background=T
fields['video_upload_pipeline'] = {}

# Enable certain fields rolling forward, where configured
fields['force_on_flexible_peer_openassessments'] = default_enable_flexible_peer_openassessments(source_course_key)
if default_enable_flexible_peer_openassessments(source_course_key):
fields['force_on_flexible_peer_openassessments'] = True

json_fields = json.dumps(fields, cls=EdxJSONEncoder)
args = [str(source_course_key), str(destination_course_key), user.id, json_fields]
Expand Down

0 comments on commit ae024c3

Please sign in to comment.