Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Optimize Empty Submission Querying in graders_controller #7381

Merged
merged 9 commits into from
Jan 25, 2025
1 change: 1 addition & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
- Ensures row selection for peer reviewer unassigning has the same validation checks as individual selections (#7274)
- Ensures mark levels on a rubric criterion are properly scaled when its max mark is updated (#7311)
- Refactor contributors list in About section to read from markus-contributors.txt (#7374)
- Optimized the querying of submissions when assigning graders (#7381)

### 🔧 Internal changes

Expand Down
6 changes: 2 additions & 4 deletions app/controllers/graders_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -253,10 +253,8 @@ def unassign_graders(grouping_ids, grader_ids)

# Returns array of grouping ids with non empty submissions
def filter_empty_submissions(grouping_ids)
grouping_ids.select do |grouping_id|
submission = Submission.find_by(grouping_id: grouping_id, submission_version_used: true)
submission && !submission.is_empty
end
Submission.where(grouping_id: grouping_ids, is_empty: false, submission_version_used: true)
.pluck(:grouping_id)
end

def filter_grouping_by_section(section_assignments, assignment)
Expand Down
33 changes: 33 additions & 0 deletions spec/controllers/graders_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -561,6 +561,7 @@
@grouping1 = create(:grouping, assignment: @assignment)
@grouping2 = create(:grouping, assignment: @assignment)
@grouping3 = create(:grouping, assignment: @assignment)
@grouping4 = create(:grouping, assignment: @assignment)
@ta1 = create(:ta)
@ta2 = create(:ta)
@ta3 = create(:ta)
Expand Down Expand Up @@ -762,6 +763,38 @@
end
end
end

context 'and when assigning to multiple groupings and skip_empty_submissions is true' do
before do
# defining submissions for use in the 'asisgn' post
submission
submission2
submission3
submission4
post_as @instructor,
:global_actions,
params: { course_id: course.id, assignment_id: @assignment.id, global_actions: 'assign',
groupings: [@grouping1.id, @grouping2.id, @grouping3.id, @grouping4.id],
graders: [@ta1.id], current_table: 'groups_table', skip_empty_submissions: 'true' }
end

context 'and some groups have empty submissions while some do not' do
let(:submission) { create(:version_used_submission, grouping: @grouping1, is_empty: true) }
let(:submission2) { create(:version_used_submission, grouping: @grouping2, is_empty: false) }
let(:submission3) { create(:version_used_submission, grouping: @grouping3, is_empty: true) }
let(:submission4) { create(:version_used_submission, grouping: @grouping4, is_empty: false) }

it 'should not assign graders to groups with empty submissions' do
expect(@grouping1.tas).to be_empty
expect(@grouping3.tas).to be_empty
end

it 'should assign graders to groups with non-empty submissions' do
expect(@grouping2.tas).to include(@ta1)
expect(@grouping4.tas).to include(@ta1)
end
end
end
end

context 'POST on :global_actions on assign_sections' do
Expand Down