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
22 changes: 22 additions & 0 deletions spec/controllers/graders_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -761,6 +761,28 @@
expect(@grouping1.tas).to be_empty
end
end

context 'when empty submissions are filtered' do
let(:submission) { create(:version_used_submission, grouping: @grouping1, is_empty: false) }
let(:submission2) { create(:version_used_submission, grouping: @grouping2, is_empty: true) }
# purposefully not creating submission3

it 'filters out grouping2 and grouping3' do
groupings = [@grouping1, @grouping2, @grouping3]
post_as @instructor, :global_actions, params: {
course_id: course.id,
assignment_id: @assignment.id,
global_actions: 'assign',
groupings: groupings,
graders: [@ta1.id],
current_table: 'groups_table',
skip_empty_submissions: 'true'
}

filtered_grouping_ids = GradersController.new.__send__(:filter_empty_submissions, groupings)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's not necessary to call this method directly, especially since it's private. If you're trying to assessing that the correct branch of code was executed, you can check the contents of the flash.

expect(filtered_grouping_ids).to contain_exactly(@grouping1.id)
end
end
end
end

Expand Down