diff --git a/common/lib/xmodule/xmodule/capa_module.py b/common/lib/xmodule/xmodule/capa_module.py index 2597690572..2856a942e9 100644 --- a/common/lib/xmodule/xmodule/capa_module.py +++ b/common/lib/xmodule/xmodule/capa_module.py @@ -310,11 +310,17 @@ class CapaModule(XModule): is_survey_question = (self.max_attempts == 0) needs_reset = self.is_completed() and self.rerandomize == "always" + # If the student has unlimited attempts, and their answers + # are not randomized, then we do not need a save button + # because they can use the "Check" button + if self.max_attempts is None and self.rerandomize != "always": + return False + # If the problem is closed (and not a survey question with max_attempts==0), # then do NOT show the reset button # If we're waiting for the user to reset a randomized problem # then do NOT show the reset button - if (self.closed() and not is_survey_question) or needs_reset: + elif (self.closed() and not is_survey_question) or needs_reset: return False else: return True diff --git a/common/lib/xmodule/xmodule/tests/test_capa_module.py b/common/lib/xmodule/xmodule/tests/test_capa_module.py index cb77921957..15f8c6cc61 100644 --- a/common/lib/xmodule/xmodule/tests/test_capa_module.py +++ b/common/lib/xmodule/xmodule/tests/test_capa_module.py @@ -772,13 +772,24 @@ class CapaModuleTest(unittest.TestCase): module.lcp.done = True self.assertFalse(module.should_show_save_button()) + # If the user has unlimited attempts and we are not randomizing, + # then do NOT show a save button + # because they can keep using "Check" + module = CapaFactory.create(max_attempts=None, rerandomize="never") + module.lcp.done = False + self.assertFalse(module.should_show_save_button()) + + module = CapaFactory.create(max_attempts=None, rerandomize="never") + module.lcp.done = True + self.assertFalse(module.should_show_save_button()) + # Otherwise, DO show the save button module = CapaFactory.create() module.lcp.done = False self.assertTrue(module.should_show_save_button()) - # If we're not randomizing, then we can re-save - module = CapaFactory.create(rerandomize="never") + # If we're not randomizing and we have limited attempts, then we can save + module = CapaFactory.create(rerandomize="never", max_attempts=2) module.lcp.done = True self.assertTrue(module.should_show_save_button())