Merge pull request #24796 from edx/ddumesnil/showanswer-improvement
AA-307: Turn showanswer override back on
This commit is contained in:
@@ -26,17 +26,7 @@ class ShowAnswerFieldOverride(FieldOverrideProvider):
|
||||
Overwrites the 'showanswer' field on blocks in self-paced courses to
|
||||
remove any checks about due dates being in the past.
|
||||
"""
|
||||
if name != 'showanswer':
|
||||
return default
|
||||
|
||||
has_showanswer = self.fallback_field_data.has(block, 'showanswer')
|
||||
# This is to explicitly check the case where the default value of
|
||||
# SHOWANSWER.FINISHED is left on a Course. In that case, we continue
|
||||
# to follow the same mapping of FINISHED -> AFTER_ALL_ATTEMPTS_OR_CORRECT.
|
||||
# This value will then be inherited throughout the rest of the Course.
|
||||
if not has_showanswer and block and block.category == 'course':
|
||||
return SHOWANSWER.AFTER_ALL_ATTEMPTS_OR_CORRECT
|
||||
elif not has_showanswer:
|
||||
if name != 'showanswer' or not self.fallback_field_data.has(block, 'showanswer'):
|
||||
return default
|
||||
|
||||
mapping = {
|
||||
@@ -53,8 +43,4 @@ class ShowAnswerFieldOverride(FieldOverrideProvider):
|
||||
@classmethod
|
||||
def enabled_for(cls, course):
|
||||
""" Enabled only for Self-Paced courses using Personalized User Schedules. """
|
||||
# Returning False while we figure out a bug where Course Level Show Answer settings are not
|
||||
# being properly applied and are being overridden with AFTER_ALL_ATTEMPTS_OR_CORRECT
|
||||
# *****IMPORTANT*****: comment the tests back in when this is re-enabled
|
||||
return False
|
||||
# return course and course.self_paced and RELATIVE_DATES_FLAG.is_enabled(course.id)
|
||||
return course and course.self_paced and RELATIVE_DATES_FLAG.is_enabled(course.id)
|
||||
|
||||
@@ -34,34 +34,37 @@ class ShowAnswerFieldOverrideTest(ModuleStoreTestCase):
|
||||
field_data_cache = FieldDataCache([], course.id, self.user)
|
||||
return get_module(self.user, request, course.location, field_data_cache, course=course)
|
||||
|
||||
# @ddt.data(True, False)
|
||||
# def test_override_enabled_for(self, active):
|
||||
# with RELATIVE_DATES_FLAG.override(active=active):
|
||||
# # Instructor paced course will just have the default value
|
||||
# ip_course = self.setup_course()
|
||||
# course_module = self.get_course_module(ip_course)
|
||||
# self.assertEqual(course_module.showanswer, SHOWANSWER.FINISHED)
|
||||
@ddt.data(True, False)
|
||||
def test_override_enabled_for(self, active):
|
||||
with RELATIVE_DATES_FLAG.override(active=active):
|
||||
# Instructor paced course will just have the default value
|
||||
ip_course = self.setup_course()
|
||||
course_module = self.get_course_module(ip_course)
|
||||
self.assertEqual(course_module.showanswer, SHOWANSWER.FINISHED)
|
||||
|
||||
# sp_course = self.setup_course(self_paced=True)
|
||||
# course_module = self.get_course_module(sp_course)
|
||||
# if active:
|
||||
# self.assertEqual(course_module.showanswer, SHOWANSWER.AFTER_ALL_ATTEMPTS_OR_CORRECT)
|
||||
# else:
|
||||
# self.assertEqual(course_module.showanswer, SHOWANSWER.FINISHED)
|
||||
# This should be updated to not explicitly add in the showanswer so it can test the
|
||||
# default case of never touching showanswer. Reference ticket AA-307 (if that's closed,
|
||||
# this can be updated!)
|
||||
sp_course = self.setup_course(self_paced=True, showanswer=SHOWANSWER.FINISHED)
|
||||
course_module = self.get_course_module(sp_course)
|
||||
if active:
|
||||
self.assertEqual(course_module.showanswer, SHOWANSWER.AFTER_ALL_ATTEMPTS_OR_CORRECT)
|
||||
else:
|
||||
self.assertEqual(course_module.showanswer, SHOWANSWER.FINISHED)
|
||||
|
||||
# @ddt.data(
|
||||
# (SHOWANSWER.ATTEMPTED, SHOWANSWER.ATTEMPTED_NO_PAST_DUE),
|
||||
# (SHOWANSWER.CLOSED, SHOWANSWER.AFTER_ALL_ATTEMPTS),
|
||||
# (SHOWANSWER.CORRECT_OR_PAST_DUE, SHOWANSWER.ANSWERED),
|
||||
# (SHOWANSWER.FINISHED, SHOWANSWER.AFTER_ALL_ATTEMPTS_OR_CORRECT),
|
||||
# (SHOWANSWER.PAST_DUE, SHOWANSWER.NEVER),
|
||||
# (SHOWANSWER.NEVER, SHOWANSWER.NEVER),
|
||||
# (SHOWANSWER.AFTER_SOME_NUMBER_OF_ATTEMPTS, SHOWANSWER.AFTER_SOME_NUMBER_OF_ATTEMPTS),
|
||||
# (SHOWANSWER.ALWAYS, SHOWANSWER.ALWAYS),
|
||||
# )
|
||||
# @ddt.unpack
|
||||
# @RELATIVE_DATES_FLAG.override(active=True)
|
||||
# def test_get(self, initial_value, expected_final_value):
|
||||
# course = self.setup_course(self_paced=True, showanswer=initial_value)
|
||||
# course_module = self.get_course_module(course)
|
||||
# self.assertEqual(course_module.showanswer, expected_final_value)
|
||||
@ddt.data(
|
||||
(SHOWANSWER.ATTEMPTED, SHOWANSWER.ATTEMPTED_NO_PAST_DUE),
|
||||
(SHOWANSWER.CLOSED, SHOWANSWER.AFTER_ALL_ATTEMPTS),
|
||||
(SHOWANSWER.CORRECT_OR_PAST_DUE, SHOWANSWER.ANSWERED),
|
||||
(SHOWANSWER.FINISHED, SHOWANSWER.AFTER_ALL_ATTEMPTS_OR_CORRECT),
|
||||
(SHOWANSWER.PAST_DUE, SHOWANSWER.NEVER),
|
||||
(SHOWANSWER.NEVER, SHOWANSWER.NEVER),
|
||||
(SHOWANSWER.AFTER_SOME_NUMBER_OF_ATTEMPTS, SHOWANSWER.AFTER_SOME_NUMBER_OF_ATTEMPTS),
|
||||
(SHOWANSWER.ALWAYS, SHOWANSWER.ALWAYS),
|
||||
)
|
||||
@ddt.unpack
|
||||
@RELATIVE_DATES_FLAG.override(active=True)
|
||||
def test_get(self, initial_value, expected_final_value):
|
||||
course = self.setup_course(self_paced=True, showanswer=initial_value)
|
||||
course_module = self.get_course_module(course)
|
||||
self.assertEqual(course_module.showanswer, expected_final_value)
|
||||
|
||||
Reference in New Issue
Block a user