Skip to content

Commit e5f128d

Browse files
authored
Merge pull request #592 from b0ink/refactor/confirm-recursive-fix
refactor: require confirmation for recursive fix and resubmit
1 parent 1717b16 commit e5f128d

File tree

3 files changed

+12
-11
lines changed

3 files changed

+12
-11
lines changed

app/api/tasks_api.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ class TasksApi < Grape::API
158158
optional :grade, type: Integer, desc: 'Grade value if task is a graded task (required if task definition is a graded task)'
159159
optional :quality_pts, type: Integer, desc: 'Quality points value if task has quality assessment'
160160
optional :discussed, type: Boolean, desc: 'Mark task as discussed'
161+
optional :trigger_recursive_fix, desc: 'If marking fix and resubmit, recursively update preqreuisite submissions to fix'
161162
end
162163
put '/projects/:id/task_def_id/:task_definition_id' do
163164
project = Project.find(params[:id])
@@ -203,7 +204,7 @@ class TasksApi < Grape::API
203204
end
204205

205206
logger.info "#{current_user.username} assessing task #{task.id} to #{params[:trigger]}"
206-
result = task.trigger_transition(trigger: params[:trigger], by_user: current_user, quality: params[:quality_pts])
207+
result = task.trigger_transition(trigger: params[:trigger], by_user: current_user, quality: params[:quality_pts], recursive_fix: params[:trigger_recursive_fix])
207208
if result.nil? && task.task_definition.restrict_status_updates
208209
error!({ error: 'This task can only be updated by your tutor.' }, 403)
209210
end

app/models/task.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -522,7 +522,7 @@ def ensured_group_submission
522522
group.create_submission self, '', group.projects.map { |proj| { project: proj, pct: 100 / group.projects.count } }
523523
end
524524

525-
def trigger_transition(trigger: '', by_user: nil, bulk: false, group_transition: false, quality: 1)
525+
def trigger_transition(trigger: '', by_user: nil, bulk: false, group_transition: false, quality: 1, recursive_fix: false)
526526
#
527527
# Ensure that assessor is allowed to update the task in the indicated way
528528
#
@@ -594,7 +594,7 @@ def trigger_transition(trigger: '', by_user: nil, bulk: false, group_transition:
594594
lc = comments.last
595595
# Prevent duplicate status comments during feedback
596596
unless lc && lc.user == by_user && lc.comment == status.name && (lc.content_type != 'status' || lc.task_status == status)
597-
assess status, by_user
597+
assess status, by_user, Time.zone.now, recursive_fix
598598

599599
# Add a status comment for new assessments - only recorded on submitter's task in groups
600600
add_status_comment(by_user, status)
@@ -674,7 +674,7 @@ def grade_task(new_grade, ui = nil, grading_group = false)
674674
end
675675
end
676676

677-
def assess(task_status, assessor, assess_date = Time.zone.now)
677+
def assess(task_status, assessor, assess_date = Time.zone.now, recursive_fix = false)
678678
# Set the task's status to the assessment outcome status
679679
# and flag it as no longer awaiting signoff
680680
self.task_status = task_status
@@ -725,7 +725,7 @@ def assess(task_status, assessor, assess_date = Time.zone.now)
725725
end
726726
end
727727

728-
if task_status == TaskStatus.fix_and_resubmit
728+
if task_status == TaskStatus.fix_and_resubmit && recursive_fix
729729
# Look for other submitted tasks from this student that has this task as a prerequisite
730730
# If they are ready for feedback, automatically assess them to fix and resubmit
731731
dependents = TaskPrerequisite.where(prerequisite_id: task_definition.id)
@@ -738,7 +738,7 @@ def assess(task_status, assessor, assess_date = Time.zone.now)
738738

739739
next unless task.task_status == TaskStatus.ready_for_feedback
740740
# Since we are calling this assess method again, we recursively check for more dependent tasks that need to be updated
741-
task.assess(TaskStatus.fix_and_resubmit, assessor, assess_date)
741+
task.assess(TaskStatus.fix_and_resubmit, assessor, assess_date, recursive_fix)
742742
task.add_status_comment(assessor, TaskStatus.fix_and_resubmit)
743743
task.add_text_comment(assessor, "**Automated comment**: A prerequisite task was updated to Fix and Resubmit, so this task was updated as well. You may need to review and update the prerequisite before resubmitting.")
744744
end

test/models/task_test.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1473,18 +1473,18 @@ def test_prerequisite_tasks_change_to_fix_and_resubmit
14731473
assert_equal TaskStatus.ready_for_feedback, task3.task_status
14741474
assert_equal TaskStatus.ready_for_feedback, task4.task_status
14751475

1476-
# Test case 1: Ensure parent prerequisite is not affected
1476+
# Test case 1: Without recursive_fix, dependent tasks should not be affected
14771477
task2.assess(TaskStatus.fix_and_resubmit, tutor)
14781478

14791479
task1.reload
14801480
task2.reload
14811481
task3.reload
14821482
task4.reload
14831483

1484-
# Task 1 should not be affected if the dependent task is assessed to fix and resubmit
1484+
# Task 1 should not be affected, and recursive fixes should not run by default
14851485
assert_equal TaskStatus.ready_for_feedback, task1.task_status, "Parent prerequisite should not be affected"
14861486
assert_equal TaskStatus.fix_and_resubmit, task2.task_status, "Task should have updated to Fix and Resubmit"
1487-
assert_equal TaskStatus.fix_and_resubmit, task3.task_status, "Dependent task should have automatically moved to Fix and Resubmit"
1487+
assert_equal TaskStatus.ready_for_feedback, task3.task_status, "Dependent task should not change without recursive_fix"
14881488
assert_equal TaskStatus.ready_for_feedback, task4.task_status # Task 4 has no prerequsite links
14891489

14901490
# Reset status
@@ -1501,7 +1501,7 @@ def test_prerequisite_tasks_change_to_fix_and_resubmit
15011501
task4.reload
15021502

15031503
# Test case 2: Ensure dependent tasks are recursively moved to fix and resubmit
1504-
task1.assess(TaskStatus.fix_and_resubmit, tutor)
1504+
task1.assess(TaskStatus.fix_and_resubmit, tutor, Time.zone.now, true)
15051505

15061506
task1.reload
15071507
task2.reload
@@ -1529,7 +1529,7 @@ def test_prerequisite_tasks_change_to_fix_and_resubmit
15291529
task4.reload
15301530

15311531
# Test case 3: Ensure tasks that are not Ready for Feedback are not moved to Fix and resubmit
1532-
task1.assess(TaskStatus.fix_and_resubmit, tutor)
1532+
task1.assess(TaskStatus.fix_and_resubmit, tutor, Time.zone.now, true)
15331533

15341534
task1.reload
15351535
task2.reload

0 commit comments

Comments
 (0)