fix: disable submit button for archived courses (#34920)

* fix: disable submit button for archived courses
This commit is contained in:
Muhammad Anas
2024-07-26 10:52:32 +05:00
committed by GitHub
parent 12569b459f
commit 3b8973ad01
2 changed files with 45 additions and 1 deletions

View File

@@ -795,12 +795,25 @@ class ProblemBlock(
}
yield (user_state.username, report)
@property
def course_end_date(self):
"""
Return the end date of the problem's course
"""
try:
course_block_key = self.runtime.course_entry.structure['root']
return self.runtime.course_entry.structure['blocks'][course_block_key].fields['end']
except (AttributeError, KeyError):
return None
@property
def close_date(self):
"""
Return the date submissions should be closed from.
"""
due_date = self.due
due_date = self.due or self.course_end_date
if self.graceperiod is not None and due_date:
return due_date + self.graceperiod

View File

@@ -655,6 +655,37 @@ class ProblemBlockTest(unittest.TestCase): # lint-amnesty, pylint: disable=miss
due=self.yesterday_str)
assert block.closed()
@patch.object(ProblemBlock, 'course_end_date', new_callable=PropertyMock)
def test_closed_for_archive(self, mock_course_end_date):
# Utility to create a datetime object in the past
def past_datetime(days):
return (datetime.datetime.now(UTC) - datetime.timedelta(days=days))
# Utility to create a datetime object in the future
def future_datetime(days):
return (datetime.datetime.now(UTC) + datetime.timedelta(days=days))
block = CapaFactory.create(max_attempts="1", attempts="0")
# For active courses without graceperiod
mock_course_end_date.return_value = future_datetime(10)
assert not block.closed()
# For archive courses without graceperiod
mock_course_end_date.return_value = past_datetime(10)
assert block.closed()
# For active courses with graceperiod
mock_course_end_date.return_value = future_datetime(10)
block.graceperiod = datetime.timedelta(days=2)
assert not block.closed()
# For archive courses with graceperiod
mock_course_end_date.return_value = past_datetime(2)
block.graceperiod = datetime.timedelta(days=3)
assert not block.closed()
def test_parse_get_params(self):
# Valid GET param dict